采用elasticsearch+logstash+kibana收集日志方案,因为logstash是jvm跑的,资源消耗比较大。所以有了一个新的工具filebeat,filebeat负责收集日志,logstash负责过滤日志后发送给elasticsearch。常用的ELK日志采集方案中,大部分的做法就是filebeat将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤,然后送到elasticsearch。
如下图:
这里省略了kafka这一环节,也是可以的。具体配置如下:
filebeat配置
filebeat.prospectors: - type: log paths: - E:\log\server.log output.logstash: # The Logstash hosts hosts: ["127.0.0.1:5044"]
配置好后,可以在cmd下进入对应的文件目录,输入下面命令启动,filebeat -e -c filebeat.yml
注意启动filebeat 需要前先启动logstash。
logstash配置
input { beats { port => "5044" } } filter { grok { match => { "message" => "(\s*%{TIMESTAMP_ISO8601:time} \s*%{LOGLEVEL:level}\s*%{NUMBER:lineNumber} ---\s*(?<class>(\[.*?\].*:) )\s*(?<message>[\s\S]* ))"} } } output { stdout {codec => rubydebug} elasticsearch { hosts => ["localhost:9200"] index => "log" } }