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上的,占用客户端资源,所以不建议使用
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.两者不能相互替代