业务中有时候需要将业务系统的错误日志发送到钉钉进行告警下面就分享一份错误告警案例
主要思路是服务器端部署filebeat发送错误日志到logstash ,logstash对接钉钉机器人。filebeat资源消耗少,非常时候日志采集。logstash资源占有多,功能强大,使用logstash聚合多套系统多个节点的error日志进行发送钉钉处理。
elk这一套官网有详细的说明文档,具体可以参考官网配置
以下是收集java错误日志
下载filebeat
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-x86_64.rpm
filebeat配置
cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
#stream: stdout
paths:
- /data/logs/*/*/error*
multiline.pattern: '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' #多行日志合并到最上面一行
multiline.negate: true
multiline.match: after
multiline.max_lines: 50000
#ignore_older: 2h
tail_files: true #从文件末尾读取
exclude_lines: ['404 NOT_FOUND'] #忽略掉一些错误日志
fields:
hostip: 10.117.0.1 #为日志打上一个host标签,好知道是哪个机器的告警
env: xxxx #添加一个env标签,区分多套系统进行不同的钉钉地址发送
fields_under_root: true
processors:
- drop_fields:
fields:
- ecs
- host
- agent
- input
ignore_missing: true
output.logstash:
hosts: ["10.117.30.236:5044"] #配置logstash地址
logstash配置
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.9.3.tar.gz
logstash配置 ./logstash -rf df.conf &
input{
beats {
port => 5044
}
}
filter{
}
output{
#stdout { codec => rubydebug }
if [env] == 'xxxx'{
#此处if else分支根据之前env标签,将不同的业务告警发送到不同的钉钉机器人
http {
url => "https://oapi.dingtalk.com/robot/send?access_token=xxx"
http_method => "post"
mapping => {
"msgtype" => "text"
"text" => '{"content":"服务器:%{hostip}\n日志路径:%{[log][file][path]} \n %{message}"}'
}
}}
}