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: \n $*" 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
看一下效果