微信告警的zabbix监控系统 监控整个NGINX集群


Posted in Servers onApril 18, 2022

项目描述

本项目的目的是构建一个能实现微信告警的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

微信告警的zabbix监控系统 监控整个NGINX集群

添加应用集nginx

微信告警的zabbix监控系统 监控整个NGINX集群

在应用集nginx增加监控项

微信告警的zabbix监控系统 监控整个NGINX集群

自定义触发器nginx-up-down,监控项为nginx-ping,正常为1,每5s监控一次,若为0,严重警告。

微信告警的zabbix监控系统 监控整个NGINX集群

微信告警的zabbix监控系统 监控整个NGINX集群

除nginx-ping,nginx-accepts外,需要添加所有状态监控项,只有nginx-ping创建触发器,这里不一一举例。

微信告警的zabbix监控系统 监控整个NGINX集群

添加好所有监控项,下一步制图,图中包含所有监控项

微信告警的zabbix监控系统 监控整个NGINX集群

因为我们监控实际上就是在一直请求,所以看到nginx-requests在不断增加。

微信告警的zabbix监控系统 监控整个NGINX集群

注册企业微信接口

注册成功之后创建一个运维部门

微信告警的zabbix监控系统 监控整个NGINX集群

记住自己的企业ID

微信告警的zabbix监控系统 监控整个NGINX集群

自建应用

微信告警的zabbix监控系统 监控整个NGINX集群

应用名称为zabbix监控

微信告警的zabbix监控系统 监控整个NGINX集群

微信告警的zabbix监控系统 监控整个NGINX集群

创建成功后,查看信息记住自己的AgentId和Secret

微信告警的zabbix监控系统 监控整个NGINX集群

微信扫码企业微信插件就可以在微信接收消息

微信告警的zabbix监控系统 监控整个NGINX集群

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 '\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监控系统 监控整个NGINX集群

可以看到正常接收。

微信告警的zabbix监控系统 监控整个NGINX集群

然后我们回到zabbix-server-web配置

zabbix-server-web配置告警

管理->报警媒介类型->创建媒体类型

微信告警的zabbix监控系统 监控整个NGINX集群

创建用户群组

微信告警的zabbix监控系统 监控整个NGINX集群

创建用户

微信告警的zabbix监控系统 监控整个NGINX集群

报警媒介

微信告警的zabbix监控系统 监控整个NGINX集群

微信告警的zabbix监控系统 监控整个NGINX集群

权限->超级管理员

微信告警的zabbix监控系统 监控整个NGINX集群

配置->动作

添加触发器

微信告警的zabbix监控系统 监控整个NGINX集群

操作

故障{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监控系统 监控整个NGINX集群

恢复操作

恢复{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监控系统 监控整个NGINX集群

zabbix-agent关停nginx服务测试

微信告警的zabbix监控系统 监控整个NGINX集群


可以看到推送成功

微信告警的zabbix监控系统 监控整个NGINX集群

Python webhook机器人脚本

新建一个测试群聊,在群里添加机器人,记住webhook地址

微信告警的zabbix监控系统 监控整个NGINX集群

除了使用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以及微信告警的文章就介绍到这了!

Servers 相关文章推荐
nginx限制并发连接请求数的方法
Apr 01 Servers
详解Apache SkyWalking 告警配置指南
Apr 22 Servers
nginx部署多前端项目的几种方法
May 25 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Shell脚本一键安装Nginx服务自定义Nginx版本
Mar 20 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 Servers
永中文档在线转换预览基于nginx配置部署方案
Jun 10 Servers
安装harbor作为docker镜像仓库的问题
Jun 14 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
nginx配置之并发频次限制
如何通过cmd 连接阿里云服务器
Linux中如何安装并部署Redis
Apr 18 #Servers
nginx搭建NFS网络文件系统
Mac电脑OS系统下安装Nginx的详细教程
Docker 镜像介绍以及commit相关操作
Docker官方工具docker-registry案例演示
Apr 13 #Servers
You might like
松下Panasonic RF-B65电路分析
2021/03/02 无线电
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
php经典算法集锦
2015/11/14 PHP
详解js异步文件加载器
2016/01/24 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python编写登陆接口的方法
2017/07/10 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
windows下python安装pip方法详解
2020/02/10 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
python 写一个文件分发小程序
2020/12/05 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
先进教育工作者事迹材料
2014/12/23 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL