Elasticsearch12-ELK

ELK

1.Elasticsearch 做数据存储
2.Logstash 采集日志
3.Kibana 可视化

采集日志增加filebeat组件

1.beat体积小、简单、占用客户端资源少。
2.Logstash功能全,占用资源多,启动占用大量jvm资源。


#beat +logstash使用
1.beat放在客户端采集日志
2.beat 输出到logstash集群进行过滤
3.logstash 进行input filter output

架构图

logstash输出到elasticsearch

# vim logstash-sample.conf
input {
  beats {
    port => 5044
  }
}

output {

 if "ke-nginx" in [tags] {
        elasticsearch {
                hosts => ["http://192.168.244.191:9201"] #输出到es
                index => "logstash-es-%{+YYYY.MM.dd}"    #索引格式
        }
 }
stdout { codec => rubydebug} #输出到控制台,用来调试

}

启动:
./bin/logstash -f config/logstash-sample.conf

filebeat采集nginx日志,发送给logstash

#vim filebeat.yml

#1. 修改采集数据配置
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access.log
  tags: ["ke-nginx"]

#2.修改输出配置
output.logstash:
  hosts: ["192.168.244.195:5044"]

#output.console: 用来调试,输出到控制台
# pretty: true

启动:
 ./filebeat -e -c filebeat.yml

结果: nginx日志增加、成功写入filebeat、成功写入logstash、最终写入es,创建索引的格式如下如

---------- logstash可以解决json格式化问题,因nginx自带json格式化,所以使用nginx_json-----------

nginx增加json格式化

# vim nginx.conf

        log_format log_json '{ "@timestamp": "$time_local", '
                '"remote_addr": "$remote_addr", '
                '"referer": "$http_referer", '
                '"request": "$request", '
                '"status": $status, '
                '"bytes": $body_bytes_sent, '
                '"agent": "$http_user_agent", '
                '"x_forwarded": "$http_x_forwarded_for", '
                '"up_addr": "$upstream_addr",'
                '"up_host": "$upstream_http_host",'
                '"up_resp_time": "$upstream_response_time",'
                '"request_time": "$request_time"'
                ' }';
        access_log  logs/access.log log_json;
# 使用nginx自带json格式插入filebeat,在写入logstash 在写入elasticsearch

filebeat修改为json格式接收

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access.log
  tags: ["ke-nginx"]
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log


# 配置来源es官网: https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-input-log.html

结果: 可以看到nginx配置的字段变成了elasticsearch的文档字段

filebeat和flume区别

flume是运行在jvm上的,占用客户端资源,所以不建议使用

kibana查看日志

监控

1.起一套新的配置
2.packetbeat + logstash + elasticsearch
3.监控功能
    a.用来监控业务集群
    b.用来统计各个索引访问次数、
    c.当主节点挂掉 或者维护,采集的日志会丢失,监控日志可以进行保存

packetbeat.yml配置

#监控的es
- type: http
  ports: [9200]
  send_request: true
  include_body_for: ["application/json", "x-www-form-urlencoded"]

# 输出到logstash, 可以配置多个,这样logstash可以在这里做负载均衡
output.logstash:
  hosts: ["192.168.244.191:5044"]

logstash配置

output {
    
  if "search" in [request] {
      elasticsearch {
        hosts => ["http://192.168.244.191:9200"]
        index => "monitor-es-%{+YYYY.MM.dd}"  
    }
  }  
}    

启动

./packetbeat -e -c packetbeat.yml

结果: 监控索引创建

es和mongodb

1.mongo没有倒排索引
2.mongo主要做大数据量查询
3.mongo没有es这么多的聚合查询、分析、 集群自我识别
4.两者不能相互替代
原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/15291677.html