由于我们的各个服务在多台服务器上部署,有时候遇到用户反馈的问题,技术人员需要挨个登录上去查看,并且dubbo服务之间链式调用时需要登录查看更多的服务器,增加了解决问题的时间,同时,error日志我们也希望统一收集起来,可以进行监控告警。
上图是通过Filebeat收集日志文件中的信息,然后统一发送到Logstash中。
我们的日志记录使用的是logback,其实本身是支持通过logback直接发送到Logstash中的,但是我们考虑日志的抽取不应该属于项目的管理范畴,logback的主要是各项目条线进行管理,因此统一由运维进行管理更加灵活。
下列是filebeat和logstash配置文件的内容:
filebeat.inputs:
- type: log
paths:
- /logdir/serviceA/*.debug.log
document_type: serviceA
fields_under_root: true
fields:
appid: serviceA
log_type: debug
- type: log
paths:
- /logdir/serviceA/*.error-warn.log
document_type: serviceA
fields_under_root: true
fields:
appid: serviceA
log_type: error-warn
- type: log
paths:
- /logdir/serviceB/*.debug.log
document_type: serviceB
fields_under_root: true
fields:
appid: serviceB
log_type: debug
- type: log
paths:
- /logdir/serviceB/*.error-warn.log
document_type: serviceB
fields_under_root: true
fields:
appid: serviceB
log_type: error-warn
output.logstash:
enabled: true
hosts: ["logstash服务器ip地址:5044"]
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
remove_field => ["@timestamp","log","input","agent","ecs"]
}
}
output {
file {
path => "/存储目录/%{+yyyy}-%{+MM}-%{+dd}-%{appid}-%{log_type}.log"
codec => line {
format => "[%{[host][name]}] %{message}"
}
}
}
mark一下,如果大家有什么更好的方案,可以提供给我。
另外有一个没有考虑太清楚的就是如果服务器数量众多,网络IO太大的问题
一些设置过程中的经验(逐步追加完善):
1.filebeat我是使用rpm安装的,使用service filebeat start 启动时如果我的配置文件有错误,service filebeat status提供的错误信息根本无法准确判断问题,因此使用filebeat命令进行启动就可以在日志里看见了
/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat
2.按照网上的教程,增加filebeat当前服务器的ip地址,一直没有成功,启动报错,filebeat送往logstash的信息里有主机名,因为我们公司的主机名是按照一定规则起的,和ip地址效果相同,因此放弃获取ip地址,使用的主机名,我觉得运维期间规范主机名的定义也是一项应该完成的工作