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
浙公网安备 33010602011771号