1、实现nginx故障自愈
2、zabbix实现微信告警通知

--------------------------------------------------------------------------------------------------------------------------

1、实现nginx故障自愈

#zabbix-agent配置
# vi /etc/zabbix/zabbix_agentd.conf
 EnableRemoteCommands=1        #允许远程执行命令
 UnsafeUserParameters=1        #允许执行特殊字符(非安全指令)

#重启abbix-agent
# systemctl restart zabbix-agent

#修改sudoers配置文件,授权zabbix用户远程执行命令
# sed -ri '/Defaults   !visiblepw/s/(.*)/#\1/' /etc/sudoers        #centos系统须设置,不强制使用tty
# echo 'zabbix ALL = NOPASSWD: ALL' >> /etc/sudoers

#准备故障自愈脚本
# vi /etc/zabbix/zabbix_agentd.d/chk_nginx.sh
#!/bin/bash
#检测服务本身是否可用
#检测项:1 端口是否监听
#       2 进程是否存在
#       3 进程状态是否为S(interruptable sleeping)或R(running)

#GATEWAY="10.0.0.2"
PORT="80"
SERVICE="nginx"

chk_nginx() {
    if ! $(ss -ntlp | grep -E ".*:{1}${PORT}[[:space:]]+.*${SERVICE}" &> /dev/null); then
        return 1
    elif $(ps aux | grep ${SERVICE} | grep -v grep &> /dev/null); then
        for PS_STAT in $(ps aux | awk '$0 ~ "'${SERVICE}'" && $0 !~ "awk"{print $8}'); do
            if [ ${PS_STAT:0:1} != "S" ] && [ ${PS_STAT:0:1} != "R" ]; then
                return 1
            fi
        done
    else
        return 1   
    fi
    return 0
}

main() {
    chk_${SERVICE}
    if [ $? -eq 1 ]; then
        systemctl restart ${SERVICE}
    fi
}

main

#脚本给执行权限
# chmod +x /etc/zabbix/zabbix_agentd.d/chk_nginx.sh

#===================================================================
#zabbix-server配置
#管理->报警媒介类型:定义发件人账号信息和邮件格式
 管理->用户:定义收件人邮箱

#配置->动作->创建动作->名称:Nginx 故障自愈
                     条件->添加->类型:触发器
                                 操作:等于
                                 触发器->选择:nginx-linux39-active-10.0.0.7 listen_80
                                 添加
                     操作->默认操作步骤持续时间:60s
                            操作->添加->操作类型:远程命令
                                          步骤:1-1
                                          步骤持续时间:60s
                                          目标列表:当前主机            #一般指定单独,特殊情况:有相同特征时选主机群组
                                          类型:自定义脚本
                                          命令:sudo /bin/bash /etc/zabbix/zabbix_agentd.d/chk_nginx.sh
                                          Add
                     添加
                     
#=====================================================================
#测试nginx-server宕机,查看zabbix-web仪表盘是否产生告警,并自动恢复
# systemctl stop nginx

2、zabbix实现微信告警通知

#https://work.weixin.qq.com/

#===================================================================
#注册企业微信
 管理员注册企业微信->企业名称:XX测试告警有限公司
 我的企业-企业信息-企业ID:wwd264be1731XXXXXX

#创建应用
 应用管理->创建应用->添加应用Logo
                    应用名称:微信报警
                    可见范围:XX测试告警有限公司
 应用管理->微信报警->AgentId:1000XXX
                    Secret:nCjY0GAg6SWbBeFRWOLWTxAl84luW-XXXXXXXXXXXXXX

#添加成员
 通讯录->添加成员->姓名:测试微信报警用户1
                       账号:oxz4XXX                #唯一,不可更改
                       手机:xxx
                       部门:XX测试告警有限公司
                       保存后自动发送邀请通知:勾选
                       保存
                       邀请

#测试发送消息
 应用管理->微信报警->发送消息->应用名称:微信报警
                            发送范围:XX测试告警有限公司
                            消息:test-warning
                            发送
#===================================================================
#管理->报警媒介类型->创建媒体类型->名称:微信报警
                                类型:脚本
                                脚本名称:send_wx.py
                                脚本参数:{ALERT.SENDTO}
                                         {ALERT.SUBJECT}
                                         {ALERT.MESSAGE}
                    消息模板->添加->消息类型:问题
                                   主题:故障通知: {HOST.NAME}, {ITEM.NAME}: {ITEM.VALUE}
                                   消息:<b>故障开始时间:</b> {EVENT.DATE}_{EVENT.TIME}<br>
                                        <b>主机名:</b> {HOST.NAME}<br>
                                        <b>IP:</b> {HOSTNAME1}<br>
                                        <b>监控项:</b> {ITEM.NAME}: {ITEM.VALUE}<br>
                                   添加
                                   消息类型:问题恢复
                                   主题:恢复通知: {HOST.NAME}, {ITEM.NAME}: {ITEM.VALUE}
                                   消息:<b>恢复时间:</b> {EVENT.RECOVERY.DATE}_{EVENT.RECOVERY.TIME}<br>
                                        <b>主机名:</b> {HOST.NAME}<br>
                                        <b>IP:</b> {HOSTNAME1}<br>
                                        <b>监控项:</b> {ITEM.NAME}: {ITEM.VALUE}<br>
                                   添加
                    添加

#管理->用户->Admin->报警媒介->添加->类型:微信报警
                                  收件人:oxz4XXX
                                  当启用时:1-7,00:00-24:00
                                  如果存在严重性则使用:未分类、信息、警告、一般严重、严重、灾难
                                  添加
                             更新

#配置->动作->创建动作->动作->名称:微信报警
                           计算方式:与/或(默认)
                           条件->添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:未分类
                                    添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:信息
                                    添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:警告
                                    添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:一般严重
                                    添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:严重
                                    添加->类型:触发器示警度
                                         操作者:等于
                                         严重性:灾难
                     操作->默认操作步骤持续时间:60s                #默认1h
                            操作->添加->操作类型:发送消息
                                          步骤:1-2
                                          步骤持续时间:0
                                          发送给用户:Admin
                                          仅送到:微信报警
                                          Add
                            恢复操作->添加->操作类型:发送消息
                                          发送给用户:Admin
                                          仅送到:微信报警
                                          Add
                     添加

#python环境为3.6
# apt -y install python-pip
# pip install requests

#短信报警脚本
# vi /usr/lib/zabbix/alertscripts/send_wx.py
#!/usr/bin/python3.6            #centos注意版本
#coding:utf-8
import requests                    #非自带模块
import sys
import os
import json
import logging

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(levelname)s, %(message)s',
    datefmt = '%a, %d %b %Y %H:%M:%S',
    filename = os.path.join('/tmp','weixin.log'),
    filemode = 'a')

corpid='wwd264be1731XXXXXX'                                        #企业ID
appsecret="nCjY0GAg6SWbBeFRWOLWTxAl84luW-XXXXXXXXXXXXX"            #Secret
agentid="1000XXX"                                                #AgentId
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret 
req=requests.get(token_url)
accesstoken=req.json()['access_token']

msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
message=sys.argv[3]
#message=sys.argv[2] + "\n\n" +sys.argv[3]

params={
    "touser": touser,
    "msgtype": "text",
    "agentid": agentid,
    "text": {
        "content": message
        },
    "safe":0
    }

req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)


#脚本给执行权限
# chmod +x /usr/lib/zabbix/alertscripts/send_wx.py

#测试脚本
# python3.6 /usr/lib/zabbix/alertscripts/send_wx.py "oxz" "这是主题" "这是内容"
# tail -n1 /tmp/weixin.log 
Thu, 04 May 2023 17:33:13, INFO, sendto:oxz;;subject:这是主题;;message:这是内容

#测试nginx server宕机,查看zabbix-web仪表盘是否成功发送,微信是否可达
# systemctl stop nginx
posted on 2023-05-04 23:53  不期而至  阅读(30)  评论(0)    收藏  举报