logstash是可以根据日志级别,日志类型进行报警通知的。
这次精简教程,排除filebeat自带的#include_lines: ['^ERR', '^WARN']写法,直接使用logstash报警。
步骤一、安装logstash
方法1 去官网下载rpm包,官网地址:https://www.elastic.co/cn/downloads/logstash
方法2 yum install logstash -y
方法3 使用国内一些软件源下载rpm包,速度更快一点。有可能安装包报错。比如:https://www.newbe.pro/Mirrors/Mirrors-Logstash/
步骤二、安装exec插件,用于报警
执行如下命令安装插件
/usr/share/logstash/bin/logstash-plugin install logstash-output-exec
步骤三、编写配置文件
cd /etc/logstash/conf.d
vim logstash.conf
input { file { path => "/home/wwwroot/hxt_reconciliation/storage/logs/laravel-2020-07-01.log" } } output { if 'ERROR' in [message] or 'local.WARNING' in [message] { exec { command => "/bin/bash /etc/logstash/conf.d/dingding.sh %{message}" } } }
input选择文件,output发送钉钉通知。
注意:
LogStash::Inputs::File只是在进程运行的注册阶段初始化一个FileWatch对象。所以它不能支持类似 fluentd 那样的path => "/path/to/%{+yyyy/MM/dd/hh}.log"写法。达到相同目的,你只能写成path => "/path/to/*/*/*/*.log"。FileWatch 模块提供了一个稍微简单一点的写法:/path/to/**/*.log,用**来缩写表示递归全部子目录。
所以这里写了绝对路径,也没用*替代所有。在自己写一个shell脚本,添加到crontab里 每天0点执行。
0 0 * * * /bin/bash /root/tools/replace_logstash.sh
#!/bin/bash today=`date +%Y-%m-%d` lastday=`date -d 'yesterday' +%Y-%m-%d` sed -i "s/${lastday}/${today}/g" /etc/logstash/conf.d/logstash.conf systemctl restart logstash.service
钉钉通知脚本自己随便一个吧,贴一个我随便写的
#!/bin/bash message="我的ip地址_logstash: $*" curl "https://oapi.dingtalk.com/robot/send?access_token=钉钉的webhook地址" -H "Content-Type: application/json" -d '{"msgtype": "text", "text": { "content": "'"${message}"'" } }'
步骤四、启动
service logstash start #或者,以下命令更多用于调试output输出到控制台时候使用 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf
看一下效果