Zabbix如何將告警信息寫入日志文件
2024-09-29 08:18 瀟湘隱者 閱讀(402) 評論(0) 收藏 舉報這里介紹一下如何將Zabbix的告警信息寫入日志文件。至于為什么要將Zabbix的告警信息寫入日志文件呢?因為公司里面有兩套監控系統,現在想將Zabbix的告警信息同步到另外一套監控系統中去,現在的方案是將Zabbix的告警寫入一個日志文件,另外一套監控系統的Agent會定期掃描日志文件(增量),然后將日志文件中的告警信息采集過去。這里簡單介紹一下這個需求的前因后果。
檢查/修改Zabbix Server的參數文件zabbix_server.conf,如下所示,需要設置下面兩個參數
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
ExternalScripts=/usr/local/zabbix/share/zabbix/externalscripts
修改參數文件zabbix_server.conf后重啟Zabbix Server使之生效。
# systemctl restart zabbix_server
注意:其實當前情況下,只需設置設置參數AlertScriptsPath即可。
上傳腳本zabbix_alert_log.sh
往/usr/local/zabbix/share/zabbix/alertscripts目錄上傳腳本zabbix_alert_log.sh,腳本內容如下所示:
#!/bin/bash
PARM1=$1
echo "$PARM1 " >> /home/zabbix/zabbix.alert.log
上傳腳本后授予執行權限。
創建媒介類型
Zabbix 6: 在Zabbix左邊的菜單“管理”—>“媒介“下,點擊右上角的“創建媒介類型“
Zabbix 7:
Zabbix 7跟Zabbix 6的界面有所不同了,需要在Zabbix的左側菜單”告警”—>”媒介”下,點擊右上角的“創建媒介類型”,如下截圖所示:

具體設置如下:



修改用戶的報警媒介
在用戶里面設置“報警媒介“,如下截圖所示:


設置觸發器動作
在Zabbix的左側菜單“告警“—》“動作”—》“觸發器動作“里面,點擊右上角的”創建動作“,如下所示,創建一個名為”zabbix_alert_log“的動作。

可以在條件中設置過濾條件,對告警信息進行過濾,符合條件的才會觸發觸發器。然后點擊“操作1“,執行下面修改。
其中步驟輸入1-1,后面一個數字不要輸入大于1,這個會導致告警信息多次寫入
勾選“自定義消息內容”,然后再主題和消息中填寫下面內容:
主題:Problem: {EVENT.NAME}
消息:{EVENT.DATE} {EVENT.TIME} {EVENT.SEVERITY} {EVENT.ID} {HOST.NAME} {EVENT.NAME}
這里的ENVET.NAME,EVENT.DATE其實是Zabbix的宏變量,具體代表的意義可以參考官方文檔[1],這里就不做重復述說了。
其實這些值就是zabbix數據庫events表的相關數據。


至此,配置成功,如果Zabbix出現告警或錯誤,就會將其對應的宏信息寫入日志。
前面的腳本,是將告警日志寫入一個文件,如果出現大量的告警,以及隨著時間的推移,zabbix.alert.log將會變得越來越大,這樣也會影響Agent工具掃描讀取新增的告警。 那么我們有必要每天切換、歸檔這個日志文件,于是寫了下面腳本rotation_log.sh
#!/bin/bash
#source /etc/profile
#########################################################################################
# #
# This script is used for rotation log #
# #
# #######################################################################################
# #
# ScriptName : rotation_log.sh #
# Author : Kerry #
# CerateDate : 2024-09-12 #
# Blogs : http://www.rzrgm.cn/kerrycode #
# Email : kerry2008code@qq.com #
#***************************************************************************************#
# 變量配置 #
#---------------------------------------------------------------------------------------#
# 注意,需要設置腳本的下面變量 #
#---------------------------------------------------------------------------------------#
# MAIL_FROM 郵件發送人 #
# MAIL_TO 郵件接收人 #
# LOG_FILE 設置腳本的輸出日志文件 #
# LOG_KEEP_DAYS 設置輪轉日志保留天數 #
#***************************************************************************************#
# 腳本參數 #
# $1 日志文件(絕對路徑) #
# $2 日志文件后綴 #
#***************************************************************************************#
# Version Modified Date Description #
#***************************************************************************************#
# V.1.0 2024-09-12 創建此腳本 #
#########################################################################################
#輪轉日期改為前一天
LOG_ROTATION_DATE=$(date -d yesterday +%Y%m%d)
MAIL_SUBJECT=""
MAIL_FROM="`hostname`@yict.com.cn"
MAIL_TO="ts-dba@yict.com.cn"
LOG_KEEP_DAYS=30
# Log輸出方式:log或out或mail或log_out或all
LOG_OUT_TYPE=log_out
LOG_FILE=/home/zabbix/logs/rotation.log
ARGS=$#
SOURCE_LOG_FILE=$1
LOG_TYPE=$2
# 記錄腳本的輸出日志信息
function log_info()
{
#判斷參數個數
if [ $# -eq 1 ];then
local log_msg=$1
else
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
fi
case $LOG_OUT_TYPE in
out)
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
;;
log)
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
mail)
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
log_out)
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
all)
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
*)
esac
}
# 記錄腳本的錯誤信息
function log_error()
{
#判斷參數個數
if [ $# -eq 1 ];then
local log_msg=$1
else
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
fi
case $LOG_OUT_TYPE in
out)
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
;;
log)
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
mail)
echo "$1" | mailx -s "rotation_log.sh on the `hostname` failed ,please check the log!" -r ${MAIL_FROM} ${MAIL_TO}
;;
log_out)
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
;;
all)
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $LOG_FILE
echo "$1" | mailx -s "rotation_log.sh on the `hostname` failed ,please check the log!" -r ${MAIL_FROM} ${MAIL_TO}
;;
*)
esac
}
# 環境變量檢查
function check_enviroment(){
# 此處不檢查是否安裝mailx
:<<!
if [ ! -x /bin/mailx ];then
log_error "`date`>usage:mailx did not exists!"
exit -1
fi
!
LOG_FILE_PATH=$(dirname $LOG_FILE)
#ALERT_LOG_PATH目錄不存在則創建目錄
if [ ! -d $LOG_FILE_PATH ] ; then
log_error "the $LOG_FILE_PATH didn't exists"
exit 1
fi
}
# 輪轉日志文件
function rotation_log(){
#輪換/切換日志文件
#注意:賦值的=號前后不要有空格
NEW_LOG_NAME=$(basename $SOURCE_LOG_FILE .$LOG_TYPE)
LOG_PATH=$(dirname $SOURCE_LOG_FILE)
if [ -f "$LOG_PATH/${NEW_LOG_NAME}.$LOG_TYPE".${LOG_ROTATION_DATE} ] ; then
log_info "the log file have been rotated!"
else
cat $SOURCE_LOG_FILE > $LOG_PATH/${NEW_LOG_NAME}.$LOG_TYPE.${LOG_ROTATION_DATE}
#最后運行的命令的結束代碼(返回值)
if [ $? -eq 0 ]; then
cat /dev/null > $SOURCE_LOG_FILE
else
log_error "failed to rotate the log file"
fi
fi
}
# 刪除過期日志
function delete_old_log(){
#LOG_PATH=$(dirname $SOURCE_LOG_FILE)
#刪除指定天數前的日志文件
#find $LOG_PATH -name ${LOG_TYPE} -type f -mtime +$LOG_KEEP_DAYS -delete
# 寫死目錄,避免調用是誤刪文件。
find /home/zabbix -name ${LOG_TYPE} -type f -mtime +$LOG_KEEP_DAYS -delete
}
main(){
if [ $ARGS != 2 ]; then
log_error "This script must be run with one parameter"
log_info "Usage:sh rotation_log.sh /home/mysql/test.log log"
exit 1
fi
if [ ! -f $SOURCE_LOG_FILE ];then
log_error "$SOURCE_LOG_FILE didn't exists, please check it"
exit 1
fi
check_enviroment
rotation_log
}
main
然后設置一個crotab作業,定期運行這個腳本
##############################################################################################
0 0 * * * /home/zabbix/scripts/rotation_log.sh /home/zabbix/zabbix.alert.log log
##############################################################################################
1: https://www.zabbix.com/documentation/7.0/zh/manual/appendix/macros/supported_by_location
浙公網安備 33010602011771號