ELK+logstash配置日志報警

1 需求

通過讀取日志文件監(jiān)控,過濾日志信息的異常關(guān)鍵詞,如ERR,error,F(xiàn)ailed,warning等信息,將這些帶有異常關(guān)鍵詞的異常日志信息過濾出來,然后輸出到zabbix,通過zabbix告警機(jī)制實(shí)現(xiàn)觸發(fā)告警,下面環(huán)境是filebeat作為采集端,最后由logsatsh拉取日志并過濾,輸出到zabbix

2 客戶端——tomcat日志格式統(tǒng)一

修改tomcat7 默認(rèn)catalina .out運(yùn)行日志格式【logging.properties】

vim /usr/local/tomcat1/conf/logging.properties
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
#后面添加兩行配置
1catalina.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %4$s %3$s %2$s %5$s %6$s%n
——————————
——————————

%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %1$te %4$s %3$s %2$s %5$s %6$s%n

年               月          日         時        分         秒      毫秒     
注意:每個數(shù)字代表不同的日志內(nèi)容,1代表時間,%1$tL是毫秒

修改tomcat8 默認(rèn)catalina .out運(yùn)行日志格式【logging.properties】

# vim /usr/local/tomcat/conf/logging.properties

#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter     #將其刪除或者注釋掉
添加下面兩行配置,
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS,%1$tL %1$te %4$s %3$s %2$s %5$s %6$s%n

修改log4j日志格式

vim log4j.properties  修改為ISO8601
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n

log4j日志格式參考:https://www.codejava.net/coding/common-conversion-patterns-for-log4js-patternlayout

3 客戶端配置-filebeat
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/tomcat/apache-tomcat-8.0.24/logs/catalina.out
fields:
  env: 5pao-203     ##注意名稱
 - drop_fields:
   fields: ["beat", "input", "source", "offset", "prospector"]
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
  name: 192.168.1.203   ##注意名字
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.logstash:
  hosts: ["1.1.1.1:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
4 ELK——logstash安裝插件

如果我們將logstash收集的日志輸出到zabbix告警,就必須要用到logstash-output-zabbix插件,通過這個插件將logstash與zabbix整合,logstash收集到的數(shù)據(jù)過濾出錯誤信息的日志輸出到zabbix中,最后通過zabbix告警機(jī)制觸發(fā)

cd /elk/logstash-7.4.0/bin
./logstash-plugin install logstah-output-zabbix
5 ELK——logstash配置文件

logstash啟動多個配置文件方法
nohup ./bin/logstash -f config/conf.d/ >/dev/null 2>&1 &

filter {
    if [fields][env] == "5pao-203" { 
        ##增加zabbix需要的兩個字段
        mutate {
               add_field => [ "[zabbix_key]", "oslogs" ]
               add_field => [ "[zabbix_host]", "192.168.1.203" ]
        }
        ##過濾日志,將沒有日期的一條日志歸到前一條
        multiline {
                 pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
                 negate => true  
                 what => "previous"  
        }
       ##將message日志中的字符串時間格式轉(zhuǎn)化成@timestamp - logstash
        grok {
            match => {
            "message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})" }
         }
        date {
            match => ["datetime","yyyy-MM-dd HH:mm:ss,SSS"]
            target => "@timestamp"
        }
        
     }
    
}
##輸出到zabbix
output{
       if [message]  =~ /(ERR|error|ERROR|Failed)/  {   
              zabbix {
                        zabbix_host => "[zabbix_host]"     
                        zabbix_key => "[zabbix_key]"       
                        zabbix_server_host => "2.2.2.2" 
                        zabbix_server_port => "9900"           
                        zabbix_value => "message" 
                        }
                    }
}

6 客戶端配置-zabbix

注意:客戶端機(jī)器連接不能使用PSK加密方式
1> 修改agent端

注釋配置文件中psk加密部分并重啟zabbix
vim /etc/zabbix/zabbix_agentd.conf
#psk encryption
#TLSConnect=psk
#TLSAccept=psk
#TLSPSKFile=/etc/zabbix/zabbix_agentd.d/zabbix_agentd.psk
##unique psk value
#TLSPSKIdentity=PSK VM_23_8_centos1576636711
service zabbix-agent restart

2>修改zabbix界面加密方式


7 zabbix創(chuàng)建監(jiān)控模板

創(chuàng)建模板


圖片.png

創(chuàng)建應(yīng)用集


圖片.png

創(chuàng)建監(jiān)控項(xiàng)
圖片.png

創(chuàng)建觸發(fā)器


圖片.png
{logstah-output-zabbix:oslogs.strlen()}>0

注意

zabbix注意觸發(fā)器,監(jiān)控的類型為日志|文本,不能是數(shù)字,否則會報錯
我遇到的報錯:zabbix 提供錯誤的項(xiàng)目值類型"數(shù)字 (無正負(fù))"給觸發(fā)器函數(shù)"strlen()"
zabbix觸發(fā)器方法strlen - 支持類型
它支持類型包括:str, text, log

驗(yàn)證zabbix客戶端
在tomcat日志中輸入error日志,如

echo "Feb  4 11:44:20 izshvqfkb75a89z sshd[8549]: error: Received disconnect from 221.197.133.59: 0:  [preauth]">>/data/tomcat/apache-tomcat-8.5.50-crm/logs/catalina.out
圖片.png

8 報錯

問題1:無法觸發(fā)報警(是指zabbix端無法接收到logstash傳輸?shù)膌og,界面不會顯示)
logstash日志中報錯:
cannot process item "oslogs" trap: connection from "10.50.20.3" rejected
zabbix server日志報錯
1287:20200204:202522.748 connection of type "unencrypted" is not allowed for host "111.111.112.112"
原因:zabbix添加使用PSK加密方式,注意日志中的"unencrypted",去掉PSK加密
問題2:已經(jīng)觸發(fā)了報警但是無法發(fā)送郵件
沒有發(fā)送出報警檢查已經(jīng)觸發(fā)了,問題出現(xiàn)在沒執(zhí)行發(fā)送郵件的動作上,這個時候小伙伴就要重點(diǎn)關(guān)注下用戶的權(quán)限以及動作的配置以及觸發(fā)器的配置上了。
我這邊重新修改了配置

圖片.png

以及
圖片.png

郵件就可以發(fā)送成功了
問題3
報警是觸發(fā)了,可是你要是不手動確認(rèn)它并不會再次發(fā)送郵件,所以收到報警需要小伙伴們手動確認(rèn)下
圖片.png

在觸發(fā)器中點(diǎn)擊 Allow manual close,否則手動點(diǎn)擊關(guān)閉是關(guān)閉不了的啊
圖片.png

參考: https://www.zabbix.com/documentation/4.0/zh/manual/config/events/manual_close

問題4
這個問題還沒有解決,logstash配置文件中[host][name]不被識別,目前只能是填寫IP,如果是多個客戶端就寫多個文件

add_field => [ "[zabbix_host]", "%{[host][name]}" ]

參考:> https://www.cnblogs.com/bixiaoyu/p/9665677.html
https://blog.csdn.net/miss1181248983/article/details/97130206

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容