zabbix自動發現監控日誌異常字段

公司服務器出現java應用內存溢出的情況,導致應用異常;之前監控做的不完善,現在通過讀取每個工程的日誌來檢測異常字段進行內存溢出報警;

zabbix監控日誌的原理

在這裏插入圖片描述

通過使用log函數來操作

log文件的item解釋

log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]

file - 日誌文件的全路徑。 
regexp - 過濾日誌的正則表達式。 
encoding - 字符編碼,默認爲英文單字節SBCS(Single-Byte Character Set)。 
maxlines - agent每秒發送給server(或proxy)的數據的最大行數,這個參數會覆蓋掉zabbix_agentd.conf配置文件裏的’MaxLinesPerSecond’參數。 
mode - 可填參數:all(默認),skip(跳過舊數據)。 
output - 自定義格式化輸出,默認輸出regexp匹配的整行數據;轉義字符’\0’表示regexp,只輸出regexp匹配的字段。 
maxdelay-The ‘maxdelay’ parameter in log items allows ignoring some older lines from log files in order to get the most recent lines analyzed within the ‘maxdelay’ seconds.(這一句我翻譯不準,所以上上英文~)
備註:我推薦大家使用第二個參數,如果只使用第一個參數,將會導致日誌文件裏的內容統統丟給zabbix_server記錄。加上第二個參數時,過濾後的日誌內容纔會傳給zabbix server,大大減少了日誌內容佔用的空間。

1、先寫腳本獲取每個工程的日誌文件的絕對路徑

cat log_collect.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-

'''此腳本文件用於獲取需要監控的日誌文件的絕對路徑'''
import os, json

filenamelist = []
def collect_log(path):
    direc_list = os.listdir(path)

    for direc in direc_list:
        filepath = os.path.join(path, direc)
        if os.path.isdir(filepath):
            file = filepath + '/logs/' + direc + '.info.log'
            filenamelist.append((file,direc))

if __name__ == '__main__':

    filelog = collect_log('/opt/app')
    a = {"data": []}
    for filename in filenamelist:
        b = {}
        b["{#FILELOG}"] = filename[0]
        b["{#FILENAME}"] = filename[1]
        a["data"].append(b)
    print(json.dumps(a))

執行腳本打印出來的是json格式的字符串,如下示例:

{"data": [{"{#FILELOG}": "/opt/app/chanpy-web-user/logs/chanpy-web-user.info.log", "{#FILENAME}": "chanpy-web-user"}]}

這個是zabbix要求的固定格式;{#GILELOG}這個是日誌文件的絕對路徑,{#FILENAME}這個是工程名;爲了便於在zabbix界面中配置自動發現規則時用到它們,zabbix界面中將這兩個變量定義爲$1,$2;但是在監控原型和觸發器中只能使用{#FILELOG}和{#FILENAME}這兩個變量,不能使用$1和$2;

2、配置zabbix agent

cat /etc/zabbix/zabbix_agentd.conf

UserParameter=filelog,/usr/bin/python /etc/zabbix/scripts/log_collect.py # filelog是自定義的發現規則的鍵值

3、zabbix界面中配置

創建一個模版 :QK_Log_Collect
在這個模版裏創建一個應用集:Log
創建自動發現規則

自動發現規則的名稱不能使用{#FILENAME}和{#FILELOG},只能使用$1和$2;
在這裏插入圖片描述

監控項原型和觸發器的名稱不能使用$1和$2,只能使用{#FILELOG}和{#FILENAME}
在這裏插入圖片描述

在這裏插入圖片描述

4、結果顯示

將上面創建好的模版應用到主機上,可以看到會自動發現監控項

在這裏插入圖片描述

當出現異常字段將告警

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章