Zabbix自定義腳本監(jiān)控nginx以及微信告警的全過程
項目描述
本項目的目的是構(gòu)建一個能實現(xiàn)微信告警的zabbix監(jiān)控系統(tǒng),方便的監(jiān)控整個NGINX集群,同時能批量的去部署和管理整個集群。
項目步驟
- zabbix服務(wù)端(192.168.2.138)安裝好zabbix server,nginx端安裝好zabbix agent(192.168.2.58),配置好Nginx負載均衡集群,并打開狀態(tài)統(tǒng)計。
- nginx端編寫監(jiān)控腳本,取到nginx的狀態(tài)。
- 服務(wù)端web添加監(jiān)控項,出圖。
- 注冊企業(yè)微信,配置好微信接口。
- zabbix服務(wù)端添加接口推送腳本,測試接口正常。
- 在web端配置報警媒介,群組和用戶,添加相關(guān)觸發(fā)器和動作。
- nginx關(guān)停服務(wù),測試是否能通過微信告警。
項目心得
在測試接收消息過程中,返回值一直是參數(shù){ALTER.MESSAGE},排查腳本問題,版本問題,最后發(fā)現(xiàn)是參數(shù){ALERT.MESSAGE},所以打字一定要細心,認真。同時對監(jiān)控也有了一定的認識,運維人員不可能7*24小時盯著zabbix看,所以做到及時告警是非常必要的,對之前的高可用web集群項目葉可以進行完善。
詳細步驟
zabbix-agent客戶端nginx配置監(jiān)控
nginx打開狀態(tài)統(tǒng)計功能
nginx配置增加stub_status模塊
location = /wyt_status{
stub_status;}
測試狀態(tài)統(tǒng)計功能是否打開
http://192.168.2.58/wyt_status\
nginx端(zabbix客戶端)編寫監(jiān)控腳本
cd /etc/zabbix/zabbix_agentd.d #在zabbix_agentd.d目錄下編寫監(jiān)控腳本 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存活狀態(tài)
;;
esac
vim userparameter_nginx.conf #在zabbix_agentd.d目錄下自定義參數(shù)配置文件 UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/zabbix-nginx_status.sh $1 #指定動作 chmod +x zabbix-nginx_status.sh #授予可執(zhí)行權(quán)限 service zabbix-agent restart #刷新服務(wù) zabbix_get -k nginx.status[ping] -s 192.168.2.58 #去服務(wù)端測試是否返回參數(shù)1
zabbix-server-web配置監(jiān)控
先創(chuàng)建nginx主機master-nginx

添加應(yīng)用集nginx

在應(yīng)用集nginx增加監(jiān)控項

自定義觸發(fā)器nginx-up-down,監(jiān)控項為nginx-ping,正常為1,每5s監(jiān)控一次,若為0,嚴重警告。


除nginx-ping,nginx-accepts外,需要添加所有狀態(tài)監(jiān)控項,只有nginx-ping創(chuàng)建觸發(fā)器,這里不一一舉例。

添加好所有監(jiān)控項,下一步制圖,圖中包含所有監(jiān)控項

因為我們監(jiān)控實際上就是在一直請求,所以看到nginx-requests在不斷增加。

注冊企業(yè)微信接口
注冊成功之后創(chuàng)建一個運維部門

記住自己的企業(yè)ID

自建應(yīng)用

應(yīng)用名稱為zabbix監(jiān)控


創(chuàng)建成功后,查看信息記住自己的AgentId和Secret

微信掃碼企業(yè)微信插件就可以在微信接收消息

zabbix-server接口腳本配置告警
Shell腳本
cd /usr/lib/zabbix/alertscripts 進入腳本配置文件夾 vim weixin.sh
#!/bin/bash
CorpID="wwaa6fb8ff1b81aa77" # 你的企業(yè)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" # 發(fā)送的用戶ID
local PartyID=1 # 部門ID
local Msg=$(echo "$@" | cut -d" " -f3-) # 發(fā)送給所有人
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配置
zabbix-server-web配置告警
管理->報警媒介類型->創(chuàng)建媒體類型

創(chuàng)建用戶群組

創(chuàng)建用戶

報警媒介


權(quán)限->超級管理員

配置->動作
添加觸發(fā)器

操作
故障{TRIGGER.STATUS},服務(wù)器:{HOSTNAME1}發(fā)生{TRIGGER.NAME}故障!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態(tài):{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

恢復(fù)操作
恢復(fù){TRIGGER.STATUS}, 服務(wù)器:{HOSTNAME1}: {TRIGGER.NAME}已恢復(fù)!
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態(tài):{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

zabbix-agent關(guān)停nginx服務(wù)測試

可以看到推送成功

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配置同上

總結(jié)
到此這篇關(guān)于Zabbix自定義腳本監(jiān)控nginx以及微信告警的文章就介紹到這了,更多相關(guān)Zabbix自定義腳本監(jiān)控nginx內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Zabbix對Kafka?topic積壓數(shù)據(jù)監(jiān)控的問題(bug優(yōu)化)
這篇文章主要介紹了Zabbix對Kafka?topic積壓數(shù)據(jù)監(jiān)控,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Zabbix如何通過ssh監(jiān)控獲取網(wǎng)絡(luò)設(shè)備數(shù)據(jù)
這篇文章主要介紹了Zabbix如何通過ssh監(jiān)控獲取網(wǎng)絡(luò)設(shè)備數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2020-08-08
ubuntu系統(tǒng)下部署zabbix服務(wù)器監(jiān)控的方法教程
這篇文章主要給大家介紹了在ubuntu系統(tǒng)下部署zabbix服務(wù)器監(jiān)控的方法教程,文中將步驟介紹的非常詳細,對大家具有一定的參考學(xué)習價值,需要的朋友們下面跟著小編來一起看看吧。2017-06-06
解析Zabbix 5.0磁盤自動發(fā)現(xiàn)和讀寫監(jiān)控的問題
本文文章給大家介紹Zabbix 5.0磁盤自動發(fā)現(xiàn)和讀寫監(jiān)控的問題,在配置鍵值得時候大家要主要此鍵值支持Linux平臺,具體細節(jié)問題跟隨小編一起通過本文學(xué)習下吧2021-05-05
Zabbix監(jiān)控華為交換機DHCP接口地址池的操作過程
最近工作中遇到一個因為DHCP地址池滿載、導(dǎo)致用戶無法獲取到IP地址的故障,所以在想通過zabbix 監(jiān)控DHCP地址池的狀態(tài)、當DHCP 地址池數(shù)量小于某個值時觸發(fā)zabbix告警,這篇文章主要介紹了Zabbix監(jiān)控華為交換機DHCP接口地址池,需要的朋友可以參考下2023-08-08
Zabbix?Timeout?設(shè)置不當導(dǎo)致的問題及解決方案
這篇文章主要介紹了Zabbix?Timeout設(shè)置不當導(dǎo)致的問題,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
解決zabbix監(jiān)控因php問題導(dǎo)致圖形界面中文亂碼方法
解決因編譯php中添加了-enable-gd-jis-conv選項導(dǎo)致Zabbix監(jiān)控系統(tǒng)圖形界面中文亂碼問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2019-10-10

