您好,登錄后才能下訂單哦!
這篇文章主要介紹“Zabbix自定義腳本監控nginx及微信告警的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Zabbix自定義腳本監控nginx及微信告警的方法”文章能幫助大家解決問題。
本項目的目的是構建一個能實現微信告警的zabbix監控系統,方便的監控整個NGINX集群,同時能批量的去部署和管理整個集群。
zabbix服務端(192.168.2.138)安裝好zabbix server,nginx端安裝好zabbix agent(192.168.2.58),配置好Nginx負載均衡集群,并打開狀態統計。
nginx端編寫監控腳本,取到nginx的狀態。
服務端web添加監控項,出圖。
注冊企業微信,配置好微信接口。
zabbix服務端添加接口推送腳本,測試接口正常。
在web端配置報警媒介,群組和用戶,添加相關觸發器和動作。
nginx關停服務,測試是否能通過微信告警。
在測試接收消息過程中,返回值一直是參數{ALTER.MESSAGE},排查腳本問題,版本問題,最后發現是參數{ALERT.MESSAGE},所以打字一定要細心,認真。同時對監控也有了一定的認識,運維人員不可能7*24小時盯著zabbix看,所以做到及時告警是非常必要的,對之前的高可用web集群項目葉可以進行完善。
nginx打開狀態統計功能
nginx配置增加stub_status模塊
location = /wyt_status{ stub_status;}
測試狀態統計功能是否打開
http://192.168.2.58/wyt_status\
nginx端(zabbix客戶端)編寫監控腳本
cd /etc/zabbix/zabbix_agentd.d #在zabbix_agentd.d目錄下編寫監控腳本 vim zabbix-nginx_status.sh
#!/bin/bash case $1 in active) curl http://192.168.2.58:80/wyt_status 2>/dev/null|awk '/Active/ {print $NF}' ;; accepts) curl http://192.168.2.58:80/wyt_status 2>/dev/null|awk 'NR==3 {print $1}' ;; handled) curl http://192.168.2.58:80/wyt_status 2>/dev/null |awk 'NR==3 {print $2}' ;; requests) curl http://192.168.2.58:80/wyt_status 2>/dev/null |awk 'NR==3 {print $3}' ;; reading) curl http://192.168.2.58:80/wyt_status 2>/dev/null |awk 'NR==4 {print $2}' ;; writing) curl http://192.168.2.58:80/wyt_status 2>/dev/null |awk 'NR==4 {print $4}' ;; waiting) curl http://192.168.2.58:80/wyt_status 2>/dev/null |awk 'NR==4 {print $NF}' ;; ping) pidof nginx |wc -l #通過查詢進程PID值,測試nginx存活狀態 ;; esac
vim userparameter_nginx.conf #在zabbix_agentd.d目錄下自定義參數配置文件 UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/zabbix-nginx_status.sh $1 #指定動作 chmod +x zabbix-nginx_status.sh #授予可執行權限 service zabbix-agent restart #刷新服務 zabbix_get -k nginx.status[ping] -s 192.168.2.58 #去服務端測試是否返回參數1
先創建nginx主機master-nginx
添加應用集nginx
在應用集nginx增加監控項
自定義觸發器nginx-up-down,監控項為nginx-ping,正常為1,每5s監控一次,若為0,嚴重警告。
除nginx-ping,nginx-accepts外,需要添加所有狀態監控項,只有nginx-ping創建觸發器,這里不一一舉例。
添加好所有監控項,下一步制圖,圖中包含所有監控項
因為我們監控實際上就是在一直請求,所以看到nginx-requests在不斷增加。
注冊成功之后創建一個運維部門
記住自己的企業ID
自建應用
應用名稱為zabbix監控
創建成功后,查看信息記住自己的AgentId和Secret
微信掃碼企業微信插件就可以在微信接收消息
Shell腳本
cd /usr/lib/zabbix/alertscripts 進入腳本配置文件夾 vim weixin.sh
#!/bin/bash CorpID="wwaa6fb8ff1b81aa77" # 你的企業id Secret="Cxyd*****" #你的SecretID GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret" Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}') # echo $Token PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token" function body(){ local int agentid=1000002 # 你的agentdid local UserID="@all" # 發送的用戶ID local PartyID=1 # 部門ID local Msg=$(echo "$@" | cut -d" " -f3-) # 發送給所有人 printf '{\n' printf '\t"touser": "'"$UserID"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "'"$agentid"\"",\n" printf '\t"text": {\n' printf '\t\t"content": "'"$Msg"\""\n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n' } /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
測試腳本能否正常接收消息
可以看到正常接收。
然后我們回到zabbix-server-web配置
管理->報警媒介類型->創建媒體類型
創建用戶群組
創建用戶
報警媒介
權限->超級管理員
配置->動作
添加觸發器
操作
故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生{TRIGGER.NAME}故障!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢復操作
恢復{TRIGGER.STATUS}, 服務器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
可以看到推送成功
Python webhook機器人腳本
新建一個測試群聊,在群里添加機器人,記住webhook地址
除了使用Shell腳本配置接口之外,還可以使用Python腳本
#!/usr/bin/python #-*- coding: utf-8 -*- import requests import json import sys import os headers = {'Content-Type': 'application/json;charset=utf-8'} api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=****” #填寫自己的webhook地址 def msg(text): json_text= { "msgtype": "text", "text": { "content": text }, } print requests.post(api_url,json.dumps(json_text),headers=headers).content if __name__ == '__main__': text = sys.argv[1] msg(text)
測試
python weixin.py test
web配置同上
關于“Zabbix自定義腳本監控nginx及微信告警的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。