網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
項(xiàng)目描述
本項(xiàng)目的目的是構(gòu)建一個(gè)能實(shí)現(xiàn)微信告警的zabbix監(jiān)控系統(tǒng),方便的監(jiān)控整個(gè)NGINX集群,同時(shí)能批量的去部署和管理整個(gè)集群。
項(xiàng)目步驟
- zabbix服務(wù)端(192.168.2.138)安裝好zabbix server,nginx端安裝好zabbix agent(192.168.2.58),配置好Nginx負(fù)載均衡集群,并打開(kāi)狀態(tài)統(tǒng)計(jì)。
- nginx端編寫(xiě)監(jiān)控腳本,取到nginx的狀態(tài)。
- 服務(wù)端web添加監(jiān)控項(xiàng),出圖。
- 注冊(cè)企業(yè)微信,配置好微信接口。
- zabbix服務(wù)端添加接口推送腳本,測(cè)試接口正常。
- 在web端配置報(bào)警媒介,群組和用戶(hù),添加相關(guān)觸發(fā)器和動(dòng)作。
- nginx關(guān)停服務(wù),測(cè)試是否能通過(guò)微信告警。
項(xiàng)目心得
在測(cè)試接收消息過(guò)程中,返回值一直是參數(shù){ALTER.MESSAGE},排查腳本問(wèn)題,版本問(wèn)題,最后發(fā)現(xiàn)是參數(shù){ALERT.MESSAGE},所以打字一定要細(xì)心,認(rèn)真。同時(shí)對(duì)監(jiān)控也有了一定的認(rèn)識(shí),運(yùn)維人員不可能7*24小時(shí)盯著zabbix看,所以做到及時(shí)告警是非常必要的,對(duì)之前的高可用web集群項(xiàng)目葉可以進(jìn)行完善。
詳細(xì)步驟
zabbix-agent客戶(hù)端nginx配置監(jiān)控
nginx打開(kāi)狀態(tài)統(tǒng)計(jì)功能
nginx配置增加stub_status模塊
location = /wyt_status{
stub_status;}
測(cè)試狀態(tài)統(tǒng)計(jì)功能是否打開(kāi)
http://192.168.2.58/wyt_status\
nginx端(zabbix客戶(hù)端)編寫(xiě)監(jiān)控腳本
cd /etc/zabbix/zabbix_agentd.d
#在zabbix_agentd.d目錄下編寫(xiě)監(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
#通過(guò)查詢(xún)進(jìn)程PID值,測(cè)試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
#指定動(dòng)作
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ù)端測(cè)試是否返回參數(shù)1
zabbix-server-web配置監(jiān)控
先創(chuàng)建nginx主機(jī)master-nginx
添加應(yīng)用集nginx
在應(yīng)用集nginx增加監(jiān)控項(xiàng)
自定義觸發(fā)器nginx-up-down,監(jiān)控項(xiàng)為nginx-ping,正常為1,每5s監(jiān)控一次,若為0,嚴(yán)重警告。
除nginx-ping,nginx-accepts外,需要添加所有狀態(tài)監(jiān)控項(xiàng),只有nginx-ping創(chuàng)建觸發(fā)器,這里不一一舉例。
添加好所有監(jiān)控項(xiàng),下一步制圖,圖中包含所有監(jiān)控項(xiàng)
因?yàn)槲覀儽O(jiān)控實(shí)際上就是在一直請(qǐng)求,所以看到nginx-requests在不斷增加。
注冊(cè)企業(yè)微信接口
注冊(cè)成功之后創(chuàng)建一個(gè)運(yùn)維部門(mén)
記住自己的企業(yè)ID
自建應(yīng)用
應(yīng)用名稱(chēng)為zabbix監(jiān)控
創(chuàng)建成功后,查看信息記住自己的AgentId和Secret
微信掃碼企業(yè)微信插件就可以在微信接收消息
zabbix-server接口腳本配置告警
Shell腳本
cd /usr/lib/zabbix/alertscripts
進(jìn)入腳本配置文件夾
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ā)送的用戶(hù)ID
local PartyID=1 # 部門(mén)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
測(cè)試腳本能否正常接收消息
可以看到正常接收。
然后我們回到zabbix-server-web配置
zabbix-server-web配置告警
管理->報(bào)警媒介類(lèi)型->創(chuàng)建媒體類(lèi)型
創(chuàng)建用戶(hù)群組
創(chuàng)建用戶(hù)
報(bào)警媒介
權(quán)限->超級(jí)管理員
配置->動(dòng)作
添加觸發(fā)器
操作
故障{TRIGGER.STATUS},服務(wù)器:{HOSTNAME1}發(fā)生{TRIGGER.NAME}故障!
告警主機(jī):{HOSTNAME1}
告警時(shí)間:{EVENT.DATE} {EVENT.TIME}
告警等級(jí):{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項(xiàng)目:{TRIGGER.KEY1}
問(wèn)題詳情:{ITEM.NAME}:{ITEM.VALUE}
當(dāng)前狀態(tài):{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢復(fù)操作
恢復(fù){TRIGGER.STATUS}, 服務(wù)器:{HOSTNAME1}: {TRIGGER.NAME}已恢復(fù)!
告警主機(jī):{HOSTNAME1}
告警時(shí)間:{EVENT.DATE} {EVENT.TIME}
告警等級(jí):{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項(xiàng)目:{TRIGGER.KEY1}
問(wèn)題詳情:{ITEM.NAME}:{ITEM.VALUE}
當(dāng)前狀態(tài):{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
zabbix-agent關(guān)停nginx服務(wù)測(cè)試
可以看到推送成功
Python webhook機(jī)器人腳本
新建一個(gè)測(cè)試群聊,在群里添加機(jī)器人,記住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=****”
#填寫(xiě)自己的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)
測(cè)試
python weixin.py test
web配置同上
總結(jié)?
原文鏈接:https://blog.csdn.net/weixin_46415378/article/details/124208052
相關(guān)推薦
- 2022-09-14 Flutter?iOS開(kāi)發(fā)OC混編Swift動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)問(wèn)題填坑_Swift
- 2022-07-11 查看 jvm 參數(shù)
- 2022-11-19 C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)不掛科指南之隊(duì)列詳解_C 語(yǔ)言
- 2022-09-19 golang圖片處理庫(kù)image基本操作_Golang
- 2022-10-21 K8s解決主機(jī)重啟后kubelet無(wú)法自動(dòng)啟動(dòng)問(wèn)題(推薦)_云其它
- 2022-08-19 R語(yǔ)言rhdf5讀寫(xiě)hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù)_R語(yǔ)言
- 2022-03-14 Linux磁盤(pán)格式化和掛載(linux服務(wù)器硬盤(pán)掛載步驟)
- 2022-12-15 uboot添加自定義命令的實(shí)現(xiàn)步驟_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支