Zabbix5系列-钉钉告警 (十五)

一、参考
  • Zabbix5系列
二 、配置钉钉群机器人

2.1 点击群的设置按钮
在这里插入图片描述

2.2 点击智能群助手
在这里插入图片描述

2.3 点击添加机器人
在这里插入图片描述

2.4 点添加
在这里插入图片描述

2.5 选择自定义机器人

在这里插入图片描述

2.6 点添加
在这里插入图片描述

2.7 配置名称和安全设置 并记录下加签密钥
在这里插入图片描述

2.8 记录下webhook地址
在这里插入图片描述

三、配置自定义告警脚本
# 进入zabbix server容器
docker exec -u root -ti zabbix-server /bin/bash
# 安装python3.6
yum install python36
# 安装pip
yum install python3-pip
# 安装requests库
pip3 install requests
# 查看自定义报警脚本路径
cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath=
# 进入自定义报警脚本目录
cd /usr/lib/zabbix/alertscripts
# 创建告警脚本
vi dingding.py

dingding.py参考(脚本来自网络 简单修改了下)

  • 配置webhook链接 api_url = ‘webhook地址’
  • 配置加签密钥 api_secret = ‘加签密钥’
  • 配置是否@所有人 at_all = True
#!/usr/bin/env python3
# coding:utf8
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import json
import sys


# webhook URL
api_url = 'webhook地址'
# secret key
api_secret = '加签密钥'
# is @all
at_all = True


def get_timestamp_sign():
    timestamp = str(round(time.time() * 1000))
    secret = api_secret
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    return timestamp, sign

def get_signed_url():
    timestamp, sign = get_timestamp_sign()
    webhook = api_url + "&timestamp=" + timestamp + "&sign=" + sign
    return webhook

def get_webhook(mode):
    if mode == 0:
        webhook = api_url
    elif mode == 1:
        webhook = get_signed_url()
    else:
        webhook = ""
    return webhook

def get_message(text, user_info):
    message = {
        "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                user_info,
            ],
            "isAtAll": at_all
        }
    }
    return message

def send_ding_message(text, user_info):
    webhook = get_webhook(1)
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    message = get_message(text, user_info)
    message_json = json.dumps(message)
    info = requests.post(url=webhook, data=message_json, headers=header).json()
    code = info["errcode"]
    errmsg = info["errmsg"]
    if code == 0:
        print("send success return:%s %s\n" % (code, errmsg))
    else:
        print("send fail return:%s %s\n" % (code, errmsg))
        exit(3)

if __name__ == "__main__":
    text = sys.argv[3]
    user_info = sys.argv[1]
    send_ding_message(text, user_info)
# 给予执行权
chmod +x dingding.py
# 测试
./dingding.py 18137900000 title text

在这里插入图片描述

四、创建报警媒介类型

4.1 管理 - 报警媒介类型 - 创建媒体类型
在这里插入图片描述
4.2 配置媒介参数
在这里插入图片描述
4.3 切换到Message templates页 添加消息模板
在这里插入图片描述
4.4 添加告警消息模板
主题:

收到告警: {EVENT.NAME}

消息:

收到告警
ID: {EVENT.ID}
主机: {HOST.NAME}
告警: {EVENT.NAME}
时间: {EVENT.DATE} {EVENT.TIME}
级别: {EVENT.SEVERITY}
数据: {EVENT.OPDATA}

在这里插入图片描述
4.5 添加告警恢复模板
主题:

告警恢复: {EVENT.NAME}

消息:

告警已恢复
ID: {EVENT.ID}
主机: {HOST.NAME}
告警: {EVENT.NAME}
时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
级别: {EVENT.SEVERITY}
持续时间: {EVENT.DURATION}

在这里插入图片描述

五、测试

5.1 点击报警媒介后面的测试按钮
在这里插入图片描述
5.2 输入收件人手机号点击测试
在这里插入图片描述
5.3 成功收到消息
在这里插入图片描述

六、配置钉钉告警

6.1 User settings - Profile - 报警媒介 - 添加
在这里插入图片描述

6.2 配置告警
在这里插入图片描述

七、创建动作

7.1 配置 - 动作 - Trigger actions - 创建动作
在这里插入图片描述
7.2 输入名称
在这里插入图片描述
7.3 切换到操作页 添加告警操作和恢复操作
在这里插入图片描述
7.4 告警操作 选择用户组或用户 仅送到钉钉

7.5 恢复操作 选择用户组或用户 仅送到钉钉
在这里插入图片描述

7.6 手动shutdown一个接口测试成功
在这里插入图片描述

附:企业微信告警脚本
#!/usr/bin/env python3
# coding:utf8
import requests
import json
import sys


# webhook URL
api_url = 'webhook地址'
# is @all
at_all = True


def get_message(text, user_info):
    mentioned_mobile_list = []
    if at_all:
        mentioned_mobile_list.append('@all')
    else:
        mentioned_mobile_list.append(user_info)
    message = {
        "msgtype": "text",
        "text": {
            "content": text,
            "mentioned_mobile_list": mentioned_mobile_list
        }
    }
    return message

def send_wechat_message(text, user_info):
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    message = get_message(text, user_info)
    message_json = json.dumps(message)
    info = requests.post(url=api_url, data=message_json, headers=header).json()
    code = info["errcode"]
    errmsg = info["errmsg"]
    if code == 0:
        print("send success return:%s %s\n" % (code, errmsg))
    else:
        print("send fail return:%s %s\n" % (code, errmsg))
        exit(3)

if __name__ == "__main__":
    text = sys.argv[3]
    user_info = sys.argv[1]
    send_wechat_message(text, user_info)
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Halyace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值