filebeat+redis+logstash+elasticsearch+kibana+elastalert
搭建基本的日志监控系统
因为现行业务的需要服务器已开始转向分布式和微服务化,为方便排查错误及预警自己动手试了一下日志收集监控系统的搭建。
filebeat-7.1.1
日志采集使用的是filebeat,收集端没有使用logstash是因为logstash是java实现的太重机器的资源消耗较大,而filebeat是go lang实现的,比较轻量化,在占用很少资源的情况下可以很好的实现日志信息采集的工作,
网址:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
手动安装:curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.1.1-linux-x86_64.tar.gz
在不同的filebeat的output中可以输入到不同的redis的list中。
redis
因为目前只是想做一个基本的试用,所以没有采用kafka而是采用了更轻量化的redis的list来实现。
logstash-7.1.1
日志接收端采用的是logstash-7.1.1,针对不同的日志如果是输出到不同的redis的list中的,可以配置多个input,在不同的input中设置不同的type,以便在output的时候方便处理
input:
redis {
type => “nginxlog”
host => “127.0.0.1”
password => your pass word
port => “6379”
data_type => “list”
key => “nginxlog”
}
output {
if [type] == “nginxlog” {
elasticsearch {
hosts => [“http://localhost:9200”]
index => ["%{[appname]}-%{+YYYY.MM.dd}"]
user => “elastic”
password => your pass word
}
}
elasticsearch-7.1.1
elasticsearch用来做数据存储,方便检索
kibana-7.1.1
用来做信息展示,因为使用的是免费版没有wathcer等功能,因此下面自己添加elastalert来实现报警功能。
elastalert
https://github.com/Yelp/elastalert
elastalert是使用python实现的,使用的时候注意python的版本及各依赖的版本,我使用的时候因为数据存储使用的是elasticsearch7.1.1所以碰到了这种小错误,因为elastalert的release版本不支持elasticsearch所以要使用beta版本:
pip install “elastalert>=0.2.0b”
相应的python依赖也需要更新:
pip install -U PyYAML
elastalert中配置邮件通知,配置的rules被触发后发邮件通知到相应的人员。
-
如何同时运行多个规则?修改config.yaml,指定rules_folder,启动时不要指定rule,例:
python -m elastalert.elastalert --verbose (不要指定具体的rule),这样就会加载rules_floder下的所有rule -
如何指定多种提醒方式? 例如邮件短信等都写在一个alert下面,每个告警的参数再单独分开。
待续
以上只是一个基本的试用,目前能正常工作,试行一段时间后会再行升级到kafka并将通知扩展到企业微信通知上。