Zabbix学习案例(9)-Zabbix事件通知

Zabbix学习(1)-监控服务与Zabbix介绍

Zabbix学习(2)-Zabbix安装和基础使用

Zabbix学习(3)-Zabbix监控入门

Zabbix学习(4)-Proxy主动被动部署

Zabbix学习案例(1)-TCP状态监控

Zabbix学习案例(2)-memcached状态监控

Zabbix学习案例(3)-redis状态监控

Zabbix学习案例(4)-nginx状态监控

Zabbix学习案例(5)-SNMP监控和WEB监控

Zabbix学习案例(6)-MySQL监控

Zabbix学习案例(7)-grafana图形展示

Zabbix学习案例(8)-Zabbix故障自治愈

一. 邮件通知

邮箱设置

开启邮件 SMTP 服务

在自己的QQ邮箱界面 找到设置 账户一栏
在这里插入图片描述
开启POP3/SMTP服务

获取授权码

在这里插入图片描述
授权码需要记录好,这个相当于一个验证的密码

报警媒介

报警媒介类型是一种给运维工程师发送消息通知的渠道,即当 zabbix 的触发器触发一个事件后,怎么才能把这个事件通过某些方式通知给运维工程师呢?

媒介类型就起到这样的作用,媒介类型创建好之后,需要在每个账户里面添加相应的收件配置,比如邮件类型的媒介类型要给 zabbix 账户添加邮箱,如果是微信类型的媒介类型那么就要在 zabbix 账户设置微信号,同样的到来,短信类型的媒介类型那就得给 zabbix 账户设置手机号用于接收报警消息内容。

管理–>报警媒介类型–>创建报警媒介类型:

常用邮件客户端软件设置

创建报警媒介

在这里插入图片描述

给用户添加报警媒介

在这里插入图片描述

在这里插入图片描述
给该用户管理员权限

在这里插入图片描述
添加报警媒介
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建动作

动作是对 zabbix 触发器触发后生成的事件的具体处理操作,可以是远程执行命令,也可以是发送通知 指定的管理员进行故障处理,发送命令是调用的上一步骤创建好的报警媒介类型。

配置–>动作–>创建动作:
在这里插入图片描述
定义操作1:故障自治愈,自己执行脚本或者定义的命令

在这里插入图片描述
定义操作2:配置动作信息报警
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

配置故障恢复信息并添加动作

在这里插入图片描述

验证

root@Mysql-slave:~# /apps/nginx/sbin/nginx -s stop
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
0
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
0
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
1
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

邮箱验证

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二. 短信通知

通知脚本见 api 及通知脚本/send_sms_sh.sh
服务端配置略,不同厂商配置不一样

注册短信服务

云片

https://www.yunpian.com/

阿里大于

https://dysms.console.aliyun.com/

签名和模板

新增签名

签名用于显示在短信内容的最前面,显示这条短信来自哪家公司/产品/网站。运营商要求签名需经过审核。如下面的短信内容:

【阿里大于】: 你的验证码是XXXXX

“阿里大于”就是签名。

这里实例是云片

编写短信发送脚本

#!/bin/bash
# send_msg.sh

PHONE=$1
SUBJECT=$2
MESSAGE=$3
/usr/bin/curl -X "POST" "https://sms.yunpian.com/v2/sms/single_send.json"   -H "content-type: application/x-www-form-urlencoded"  -d "apikey=API-KEY" -d "mobile=${PHONE}"    -d "text=${MESSAGE}"

#echo $? >> /tmp/A_zabbix_sms.txt
#echo $1  $3 >> /tmp/A_zabbix_sms.txt

#【alibaba】北京业务故障服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME},{ITEM.VALUE}
root@Zabbix-server:~# /usr/bin/curl -X "POST" "https://sms.yunpian.com/v2/sms/single_send.json" -H "content-type: application/x-www-form-urlencoded"  -d "apikey=API-KEY" -d "mobile=${PHONE}" -d "text=${MESSAGE}"
{"http_status_code":400,"code":-1,"msg":"非法的apikey","detail":"请检查您的apikey是否正确,或者账户已经失效"}
#是因为签名没有认证 
root@Zabbix-server:~# /usr/bin/curl -X "POST" "https://sms.yunpian.com/v2/sms/single_send.json" -H "content-type: application/x-www-form-urlencoded"  -d "apikey=25be5eb58affed3e2dee853da017390c" -d "mobile=${15675455220}" -d "text=北京业务故障服务器:172.20.32.101-mysql-server,IP:172.20.32.101#,详情:tcp.listen[80],0"
{"http_status_code":400,"code":-1,"msg":"非法的apikey","detail":"请检查您的apikey是否正确,或者账户已经失效"}

zabbix web 添加短信报警媒介

在这里插入图片描述
脚本参数是zabbix的宏定义自变量
https://www.zabbix.com/documentation/4.0/manual/appendix/macros/supported_by_location

在这里插入图片描述

创建短信通知动作

在这里插入图片描述

配置短信发送内容

在这里插入图片描述

配置恢复操作

在这里插入图片描述

测试短信告警通知

微信通知

注册企业微信
打开企业微信官网注册账号,使用自己的手机号进行注册。
https://work.weixin.qq.com/

在这里插入图片描述
在这里插入图片描述

创建一个 app 用于发送信息

在这里插入图片描述

在这里插入图片描述
红框信息使用 API 时需要用到,会自动生成AgentID和Secret
在这里插入图片描述

部门和人员信息配置

用户账户名称必须唯一,在发送微信报警信息的时候会调用
在这里插入图片描述
在这里插入图片描述

新增人员

在这里插入图片描述
账户名在整个公司中必须保持唯一
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

测试发送消息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

手机上使用企业微信查看信息

在这里插入图片描述
只有上面的操作成功才表示在后面的步骤中能够正常的部署。

查看企业信息

企业 ID 在发送微信报警信息的时候会调用
在这里插入图片描述

zabbix server 配置

zabbix server 实现微信通知基于 python 调用脚本实现且需要使用 pip 安装
requests 模块:

root@Zabbix-server:~# apt install python-pip

root@Zabbix-server:~# pip install requests

简易教程

先获取 token,token 是通过 corpid(企业 ID)和 corpsecret(应用 Secret)获取到的,然后通过 API 发送消息,根据官方文档可以看到,发送的消息其实就是一个 post 请求,请求方式如下:

请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?
access_token=ACCESS_TOKEN

post 参数为 access_token 和 消息体。

access_token

编写 python 程序

在 zabbix server 安装基础模块并编写 pyhton 脚本,python 脚本通过调用企业微信的 API 实现自动发送通知消息:

测试获取 token

此处需要使用corpid和corpsecret,就是下图红框中的内容:
在这里插入图片描述

在这里插入图片描述

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# pwd
/apps/zabbix_server/share/zabbix/alertscripts

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# which python3
/usr/bin/python3

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# vim get_token.py
#!/usr/bin/python3
import requests
corpid = "你公司的ID"
corpsecret = "你的app的corpsecret"
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + \
      "&corpsecret=" + corpsecret
token = requests.get(url)
values = list(token.json().values())
print(values[2])

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# python3 get_token.py 
2k1Uoee0-k_7Mt3f-zW2ald1gxGZnvYTHPuEwVLNtQChGHOU_f40XjGbIvp5-DGXkckm4hvNXcCJl00126fYQocz0JvdUGRTrexJSJklTTG1D_-dttoMICxpLYvfk9u-eB-VK1k9-Vhbusr3k_S1oY520Zb1A9ulXkDnUt_LmSTTU-gEm1HUTeckdiBKDNrDEcBmXdxRT2pchXQqzAiDig
#获取到可token,可以使用该token调用API发信息了。
py脚本
root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# cat sent_wechat_msg.py
#!/usr/bin/python3
# Edited by likai.tech on 2020.05.04
#

import os
import sys
import json
import logging
import requests as req

corpid = "wwf732e03dce6f50ba"
corpsecret = "Zb_0J5zlCyfGFXAb3RUCGjkKpod0W-21OZgSFx4T_fY"
agentid = "1000013"
token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + \
            "&corpsecret=" + corpsecret

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

def get_token(url):
    r = req.get(url)
    token_value = list(r.json().values())[2]
    return token_value

token = get_token(token_url)
msg_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token
msg_to = sys.argv[1]
subject = sys.argv[2]
msg_body = sys.argv[2] + "\n\n" +sys.argv[3]
#消息发送的必要信息改为获取命令行的参数,以便在 zabbix使用宏来代替消息内容等信息。

post_body = {
    "touser": msg_to,
    "msgtype": "text",
    "agentid": agentid,
    "text": {
        "content": msg_body
    },
    "safe": 0
}

def send_msg(url, p_body):
    post = req.post(msg_url, data=json.dumps(p_body))

send_msg(msg_url, post_body)
logging.info('msg_to:' + msg_to + ';;suject:' + subject + ';;msg:' + msg_body)

py脚本测试
root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# chmod a+x sent_wechat_msg.py

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# python3 sent_wechat_msg.py "LiKai" "one a test for zabbix" "run run run!"

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# cat /tmp/wx_message.log
Mon, 04 May 2020 03:45:48:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): qyapi.weixin.qq.com
Mon, 04 May 2020 03:45:49:DEBUG:urllib3.connectionpool:https://qyapi.weixin.qq.com:443 "GET /cgi-bin/gettoken?corpid=wwf732e03dce6f50bc&corpsecret=Zb_0J5zlCyfGFXAb3RUCGjkKpod0W-21OZgSFx4T_eY HTTP/1.1" 200 277
Mon, 04 May 2020 03:45:49:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): qyapi.weixin.qq.com
Mon, 04 May 2020 03:45:49:DEBUG:urllib3.connectionpool:https://qyapi.weixin.qq.com:443 "POST /cgi-bin/message/send?access_token=2k1Uoee0-k_7Mt3f-zW2ald1gxGZnvYTHPuEwVLNtQChGHOU_f40XjGbIvp5-DGXkckm4hvNXcCJl00126fYQocz0JvdUGRTrexJSJklTTG1D_-dttoMICxpLYvfk9u-eB-VK1k9-Vhbusr3k_S1oY520Zb1A9ulXkDnUt_LmSTTU-gEm1HUTeckdiBKDNrDEcBmXdxRT2pchXQqzAiDig HTTP/1.1" 200 44
Mon, 04 May 2020 03:45:49:INFO:root:msg_to:LiKai;;suject:one a test for zabbix;;msg:one a test for zabbix

run run run!   # # 日志记录了详细信息

在这里插入图片描述

添加微信报警媒介

下图中Script parameters表示 zabbix 的宏,zabbix 会在调用该 python程序时,使用图中的三个宏的内容分别填充到三个命令行参数中,实现将告警信息发送给企业微信用户。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加报警动作

定义消息内容细节和收件人及发送方式
在这里插入图片描述
在这里插入图片描述

添加操作
在这里插入图片描述
在这里插入图片描述
恢复操作
在这里插入图片描述
在这里插入图片描述
最终界面
在这里插入图片描述
最终测试告警信息
这里注意的是python脚本放置的位置

root@Zabbix-server:~# ll /apps/zabbix_server/share/zabbix/alertscripts/sent_wechat_msg.py

这里停止172.20.32.105的nginx服务

root@Mysql-slave:~# /apps/nginx/sbin/nginx -s stop

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

root@Zabbix-server:/apps/zabbix_server/share/zabbix/alertscripts# tail /tmp/wx_message.log 
Mon, 04 May 2020 05:05:12:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): qyapi.weixin.qq.com
Mon, 04 May 2020 05:05:12:DEBUG:urllib3.connectionpool:https://qyapi.weixin.qq.com:443 "POST /cgi-
bin/message/send?access_token=2k1Uoee0-k_7Mt3f-
zW2ald1gxGZnvYTHPuEwVLNtQChGHOU_f40XjGbIvp5-
DGXkckm4hvNXcCJl00126fYQocz0JvdUGRTrexJSJklTTG1D_-dttoMICxpLYvfk9u-eB-VK1k9-
Vhbusr3k_S1oY520Zb1A9ulXkDnUt_LmSTTU-gEm1HUTeckdiBKDNrDEcBmXdxRT2pchXQqzAiDig 
HTTP/1.1" 200 44
Mon, 04 May 2020 05:05:12:INFO:root:msg_to:LiKai;;suject:问题已解决: nginx-80-trigger;;msg:问题已解决: nginx-80-trigger

解决问题时间 05:05:03 on 2020.05.04
Problem name: nginx-80-trigger
Host: 172.20.32.105-mysql-slave
Severity: High
Original problem ID: 1378
   kaivi 恢复操纵标识
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值