zabbix 5.0配置钉钉markdown告警

钉钉告警消息类型常用的为text,但markdown的样式要比text的好看,所以想使用markdown格式来进行告警推送。

先看看对比图,

text消息类型:

markdown消息类型:

一、阅读本文需具备的知识

本文默认读者

1、对zabbix有一定的了解:知道zabbix的安装方式,启动方式,配置,能够完成一般告警的配置

2、知道钉钉机器人的创建

3、markdown语法

如果上述有不懂的话,一搜一大把,本文重点说说我将text格式切到markdown格式遇到的问题

二、我之前的text消息类型发送思路

由于我创建的机器人使用的是加签的方式,故使用python语言开发告警脚本。

说到python那么必然就需要虚拟环境,所以我考虑的是,zabbix调用shell脚本,并将告警消息以参数的方式传给脚本。

shell脚本source加载虚拟环境,并将传给shell给脚本的参数继续传递给python脚本。

这在消息类型为text之前都是好好的,改成markdown之后,就会出现告警内容只有第一个空格之前字符串的情况。

三、解决办法

简单粗暴:不使用虚拟环境的python,直接使用CentOS7系统上的python,zabbix也不调用shell脚本了,直接调用python脚本,就能正确的传参了。

四、参考配置

python代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import requests
import json
import sys
import time
import hmac
import hashlib
import base64
import urllib.parse


def msg(content):
    # 根据实际修改1:钉钉机器人地址
    dingding_url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxx'
    # 根据实际修改2:钉钉的加签
    secret = 'xxxxxxxxxx'

    # 加签算法,钉钉文档里的
    timestamp = str(round(time.time() * 1000))
    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))

    headers = {'Content-Type': 'application/json;charset=utf-8'}
    api_url = dingding_url + "&timestamp={}&sign={}".format(timestamp, sign)

    json_text = {
        "msgtype": "markdown",
        "markdown": {
            "title": "zabbix",
            "text": content
        }
    }

    requests.post(api_url, json.dumps(json_text), headers=headers)


if __name__ == '__main__':
    input_message = sys.argv[1]
    msg(input_message)

告警模板

<font color=#FF0000 size=5 face="黑体">【告警】zabbix通知</font>
------
**主机名: {HOST.NAME}**  
**主机IP: {HOST.IP}**
> - 监控项目: {ITEM.NAME}
> - 监控取值: {ITEM.LASTVALUE} 
> - 告警等级: {TRIGGER.SEVERITY}
> - 当前状态: {TRIGGER.STATUS}
> - 告警信息: {TRIGGER.NAME}
> - 告警时间: {EVENT.DATE} {EVENT.TIME}
> - 事件ID: {EVENT.ID}



  

<font color=#006400 size=5 face="黑体">【恢复】zabbix通知</font>
------
**主机名: {HOST.NAME}**  
**主机IP: {HOST.IP}**
> - 监控项目: {ITEM.NAME}
> - 监控取值: {ITEM.LASTVALUE}
> - 告警等级: {TRIGGER.SEVERITY}
> - 当前状态: {TRIGGER.STATUS}
> - 告警信息: {TRIGGER.NAME}
> - 告警时间: {EVENT.DATE} {EVENT.TIME}
> - 恢复时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
> - 持续时间: {EVENT.AGE}
> - 事件ID: {EVENT.ID}



<font color=#800000 size=5 face="黑体">【确认】zabbix通知</font>
------

**主机IP: {HOSTNAME1}**  
**确认人: {USER.FULLNAME}**
> - 确认时间: {ACK.DATE} {ACK.TIME} 
- 确认信息如下:
> "{ACK.MESSAGE}"
> - 问题ID: {EVENT.ID}
- 当前的问题是:
> {TRIGGER.NAME}

猜你喜欢

转载自blog.csdn.net/CHEndorid/article/details/122624344