首頁 > 軟體

Zabbix自定義指令碼監控nginx以及微信告警的全過程

2022-04-17 13:01:06

專案描述

本專案的目的是構建一個能實現微信告警的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叢集專案葉可以進行完善。

詳細步驟

zabbix-agent使用者端nginx設定監控

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

zabbix-server-web設定監控

先建立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

微信掃碼企業微信外掛就可以在微信接收訊息

zabbix-server介面指令碼設定告警

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 'tt"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設定告警

管理->報警媒介型別->建立媒體型別

建立使用者群組

建立使用者

報警媒介

許可權->超級管理員

設定->動作

新增觸發器

操作

故障{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}

zabbix-agent關停nginx服務測試


可以看到推播成功

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以及微信告警的文章就介紹到這了,更多相關Zabbix自定義指令碼監控nginx內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com