我们公司要实现一个log的收集,实现方便查找的功能,用到了ElasticSearch Logstash Kibana filebeat来实现,使用的工具和具体功能如下(在我的业务实现中):
ElasticSearch(负责数据检索,和类似于数据存储的作用 端口:9200)、Logstash(负责将filebeat中的数据格式分割改成我们要看到的样子 端口:5044)、Kibana(负责数据展示,类似于可视化工具 端口:5601)filebeat(将业务服务中的log收集起来) 、 project(业务服务,我们的项目)
1,project中需要做的事情:
在logback-spring.xml 中确定log保存的路径
<property name="log.path" value="/usr/software/log_test/logs" />
在conversionRule中添加你需要的数据(在我的业务中此IP用来区分服务器),别忘了根据conversionRule修改日志输出格式中的pattern
<conversionRule conversionWord="ip" converterClass="com.xx.payment.commons.utils.IpUtil"/>
最重要的是你创建的log中info 或者error最好格式完全一样后边需要配置格式信息创建索引,格式非常严谨 , 注意你的空格 和 - 符合。
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %ip %logger{50} - %msg%n</pattern>
2,filebeat 要做的事情
将 filebeat安装在此项目的服务器上(自己取网上找下载地址)
安装好后修改filebeat.yml的配置信息 ,将path路径修改成你的log保存地址,将filetype命名为我们能分出哪个项目的名字,有可能会配置多个项目,将hosts 修改为指向Logstash 的端口(ElasticSearch Logstash Kibana 在一台服务器上)IP修改为安装此ELK的电脑IP
paths:
- /usr/software/lfpayment_log_test/logs/log_info.log
filetype: payment
hosts: ["xx.xx.xx.xxx:5044"]
3,logstash中要做的事情
安装完成后修改logstaash.conf文件修改filter{}中[filetype] == "payment" 此名为您在filebeat中命名的 grok 设置的格式为你在项目中统一的格式所对应的格式信息,可以帮助你进行验证的网页工具(在线Grok Debug工具,Grok校验|调试 (5axxw.com))帮你校验出你的格式和你的log信息是否能分割成我们想在kibana中看到的信息格式,
在output中修改filetype 和filter中相同,hosts中修改的端口对应着创建索引的ElasticSearch的端口 ,index是你项目中的log名 后边的yyyymmdd为每天log的格式, beats中的port为logstash的端口
input {
beats {
port => 5044
}
}
if [filetype] == "payment"{
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:date} %{DATA:systemmessage} %{LOGLEVEL:level} %{IP:ip} %{DATA:package} - %{DATA:msgid} %{DATA:url} %{GREEDYDATA:logmsg}" }
}
}
if [filetype] == "payment"{
elasticsearch {
hosts => "xx.xx.xx.xx:9200"
index => "payment-info-%{+YYYY.MM.dd}"
}
}
4,ElasticSearch Logstash Kibana 中的相关安装以及配置请去网上自行查找吧
总结:
看完了别忘了点个赞呦 ^v^ !