Zabbix自定义脚本监控nginx以及微信告警的全过程

目录
  • 项目描述
  • 项目步骤
  • 项目心得
  • 详细步骤
    • zabbix-agent客户端nginx配置监控
    • zabbix-server-web配置监控
    • 注册企业微信接口
    • zabbix-server接口脚本配置告警
    • zabbix-server-web配置告警
    • zabbix-agent关停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集群项目叶可以进行完善。

详细步骤

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 '\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配置告警

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

创建用户群组

创建用户

报警媒介

权限->超级管理员

配置->动作

添加触发器

操作

故障{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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python脚本zabbix自定义key监控oracle连接状态

    目的:此次实验目的是为了zabbix服务端能够实时监控某服务器上oracle实例能否正常连接 环境:1.zabbix_server 2.zabbix_agent(含有oracle) 主要知识点: 1.zabbix_get用法 2.python中cx_Oracle模块使用 ------------------------------------------------------------------------------ 1.zabbix_get用法 常用用法 zabbix_get -s h

  • ZABBIX3.2使用python脚本实现监控报表的方法

    如下所示: #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '172.16.8.200' zdbuser = 'zabbix' zdbpass = 'zabbix' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilename = 'zabbix.xls' #需要查询的key列表 [名称,表名,key值,取值,格式

  • Zabbix 结合 bat 脚本实现多个应用程序状态监控的方法

    场景模拟: 国内有部分企业需要运行某些窗口程序(即.exe)来支撑重要的业务运作,一旦这些重要的窗口程序中断了,那么就会造成巨大的经济损失或者影响工作效率,后果如此严重.所以想通过zabbix进行多程序状态的监控,一旦这些重要的窗口程序中断,里面产生告警,通知运维人员去修复. 提前准备好,两个bat脚本,findexe.bat(把要监控的exe程序做成自动发现),check_exe_status.bat(获取监控exe程序的状态) 第一步–准备bat脚本: findexe.bat脚本的内容如下

  • Python脚本实现Zabbix多行日志监控过程解析

    通过使用zabbix 日志监控 我发现一个问题 例如oracle的日志有报错的情况 ,通常不会去手动清理 这样的话当第二次有日志写进来的时候 zabbix的机制是回去检查全部日志,这样的话之前已经告警过的错误日志,又会被检查到,这样就会出现重复告警,而且zabbix的日志监控只能读到匹配当前行关键字的数据,感觉不太灵活, 比如我想要匹配到的关键字之后再当前关键字的下N行再去匹配另一个关键字这个时候就比较麻烦,在这里给大家推荐一个有效,便捷解决的方式. 通过Python脚本实现日志监控 要求 1

  • Zabbix 动态执行监控采集脚本的实现原理

    在使用Zabbix自定义脚本采集监控数据的时候,通常会遇到以下一些问题: 服务器扩容之后,监控脚本如何部署到新的服务器上? 监控脚本需要修改时,如何自动修改所有相同的监控脚本? 如何备份监控采集脚本避免因服务器异常后丢失? 新部署自定义监控,如何避免系统管理员过多操作? 如何避免大量研发就能解决上述的问题? 实现原理:使用文件服务器统一存放和管理监控脚本,在zabbix agent预埋通用脚本,根据zabbix server传输的Key和参数,从文件服务器拉取脚本执行后返回数据. 架构设计: 具

  • Zabbix自定义脚本监控nginx以及微信告警的全过程

    目录 项目描述 项目步骤 项目心得 详细步骤 zabbix-agent客户端nginx配置监控 zabbix-server-web配置监控 注册企业微信接口 zabbix-server接口脚本配置告警 zabbix-server-web配置告警 zabbix-agent关停nginx服务测试 总结 项目描述 本项目的目的是构建一个能实现微信告警的zabbix监控系统,方便的监控整个NGINX集群,同时能批量的去部署和管理整个集群. 项目步骤 zabbix服务端(192.168.2.138)安装好

  • PHP脚本监控Nginx 502错误并自动重启php-fpm

    最近服务器时不时出现Nginx 502 Bad Gateway,如果在电脑旁边还好,要是半夜或者出去了,怎么办? 没关系,写个脚本检测服务状态,发现异常,自动重启. 自动重启脚本: 复制代码 代码如下: <?php $url = 'http://blog.rebill.info'; $cmd = '/usr/local/php/sbin/php-fpm restart';   for($i = 0; $i < 5; $i ++){         $exec = "curl  con

  • zabbix自定义监控nginx状态实现过程

    目录 1. 开启状态界面 2. 写监控脚本 3. 配置监控项 4. 配置触发器 5. 测试 zabbix自定义监控nginx状态 zabbix_server 192.168.200.145 zabbix_agentd ,nginx 192.168.200.146 1. 开启状态界面 开启status: [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf location /status { stub_status on; allow

  • 关于zabbix自定义监控项和触发器问题

    目录 一.监控端口 关系说明 操作 二.监控服务 关系说明 操作 三.模板的导入和导出 一.监控端口 关系说明 触发器: 根据客户端的脚本获取值,当客户端的某项值达到要求后,将发出告警 监控项:根据客户端的脚本获取值,可设定采集值得间隔时间,将值保留记录下来,可形成曲线图 应用集:用来分类存放监控项,比如将监控80,8080等web服务的监控项放在WEB应用集中,将监控22,21等小服务的监控项放入SMALL应用集中. 模板:模板是一套定义好的监控项的合集,任何主机连接模板,则将模板中的监控项等

  • zabbix自定义邮箱报警和微信报警

    前言 看了很多其他人的博客,写了很多都有的用脚本的方式来实现邮箱报警,我觉得有点繁琐了,今天推荐一种不使用脚本的方式实现邮箱报警. zabbix安装部署参考: https://www.jb51.net/article/174787.htm Emai邮箱报警 不使用脚本,利用外部邮箱发送报警信息,需要打开邮箱里的外部邮箱smtp/pop3功能开启完以后会生成一个唯一授权码,自己要保存好,外部连接时需要用到. sendmail:邮件传输代理程序,引导用户构建一个需要的邮件系统,在这个环境里是引导16

  • zabbix监控Nginx/Tomcat/MySQL的详细教程

    zabbix监控Nginx A机器:zabbix服务端(192.168.234.128) B机器:zabbix客户端(192.168.234.125) 在B机器(zabbix客户端)操作: 编辑nginx虚拟主机配置文件: [root@centos ~]# vi /etc/nginx/conf.d/default.conf 在server{}中添加以下内容: location /nginx_status { stub_status on; access_log off; allow 127.0.

  • 监控服务调用微信API如何给自己发告警信息

    今天心血来潮,想试试用微信公众号给自己发消息.主要是想如何运维监控的设备故障时可以通过微信告警. 查了一下开发者文档,发现普通未认证订阅号不能通过API群发,认证订阅号每天只能群一条信号,而认证的服务号每月发给每个月户也只有4条.瞬间心凉了一半,于是网上又搜了一下,发现有个"WeiXin-Private-API-master"的东东说是可以单独给每个关注的用户发送,于是下载试了一下,失败.再去查查官方文档,已找不到这个"single send"接口,官方的FAQ里回

  • python脚本监控logstash进程并邮件告警实例

    supervisor虽然也能拉起来logstash进程,但是有时候supervisor也会挂,也有时会拉不起,就算拉起来了也没有邮件告警功能 ,所以编写一个python脚本监控所有服务器,以下代码只列举了一台服务器,需要更多服务器在列表里面添加就行! (日志采集过程中连续几天数据异常,由于服务器太多,当时不太想一一去将近40台服务器查看logstash进程,但又一直查不出原因,后来就每台服务器查看logstash进程,果然发现3台采集搜索日志的logstash进程没了,然后就编写了此脚本监控,效

随机推荐