zabbix添加钉钉告警机器人使用bash和python两种脚本

news2024/11/22 14:46:11

zabbix添加钉钉告警机器人使用bash和python两种脚本

查看脚本目录

vi /etc/zabbix/zabbix_server.conf

# 脚本存放路径
AlertScriptsPath=/usr/lib/zabbix/alertscripts

编写脚本(二选一)

bash脚本
  • 编写脚本
cd /usr/lib/zabbix/alertscripts
vi zabbix_dingding_robot.sh
  • 脚本zabbix_dingding_robot.sh
#!/bin/bash
# Author: xzlAwin
# Email: xzlawin@163.com
# Date: 2024.07.23
# 描述: zabbix使用钉钉机器人告警脚本

# 脚本运行时,获取参数
to=$1
subject=$2
text=$3

# 加签验证密钥
secret="填写自己密钥"
# Webhook
webhook="https://oapi.dingtalk.com/robot/send?access_token=填写自己的token"

# 获取当前时间戳,单位ms
timestamp=$(date +%s%3N)
echo $timestamp

# 正确的格式
stringToSign="$timestamp
$secret"

# 使用openssl进行HMAC-SHA256签名
# 注意:echo -e 用于解释转义字符(如\n),但某些版本的echo可能需要-E选项
# 使用echo或printf确保字符串中的换行符正确传递
hmacsha256=$(echo -n "$stringToSign" | openssl dgst -sha256 -hmac "$secret" -binary | base64)

# 输出hmacsha256加密
echo "hmacsha256: $hmacsha256"

# shell没有encodeURIComponent函数,AI生成
encodeURIComponent() {
    # 使用printf和一些字符转义来模拟encodeURIComponent
    # 这里只处理了一些基本的转义,并不是完全符合encodeURIComponent的标准
    local string="${1}"
    local strlen=${#string}
    local i=0
    local output=""

    while [[ $i -lt $strlen ]]; do
        c=${string:$i:1}
        if [[ "$c" = "-" || "$c" = "_" || "$c" = "." || "$c" = "~" ]]; then
            output+="${c}"
        elif [[ "$c" = "/" ]]; then
            output+="%2F"
        elif [[ "$c" = "?" ]]; then
            output+="%3F"
        elif [[ "$c" = ":" ]]; then
            output+="%3A"
        elif [[ "$c" = "#" ]]; then
            output+="%23"
        elif [[ "$c" = "%" ]]; then
            output+="%25"
        elif [[ "$c" = "&" ]]; then
            output+="%26"
        elif [[ "$c" = "+" ]]; then
            output+="%2B"
        elif [[ "$c" = "=" ]]; then
            output+="%3D"
        elif [[ "$c" = "{" ]]; then
            output+="%7B"
        elif [[ "$c" = "}" ]]; then
            output+="%7D"
        elif [[ "$c" = "\\" ]]; then
            output+="%5C"
        elif [[ "$c" = " " ]]; then
            output+="%20"
        else
            printf -v ord "%d" "'$c"
            if [[ $ord -ge 48 && $ord -le 57 ]] || # 0-9
               [[ $ord -ge 65 && $ord -le 90 ]] || # A-Z
               [[ $ord -ge 97 && $ord -le 122 ]]; then # a-z
                output+="${c}"
            else
                printf -v o "%02x" "'$c"
                output+="%${o}"
            fi
        fi
        i=$((i+1))
    done

    echo -n "${output}"
}

# 调用encodeURIComponent函数,获得签名
sign=$(encodeURIComponent $hmacsha256)
# 输出签名
echo "${sign}"

url="$webhook&timestamp=$timestamp&sign=$sign"
# 输出完整的url
echo $url

# 调用钉钉消息通知接口
curl $url -H 'Content-Type: application/json' \
-H 'Content-Type: application/json' \
-H 'Charset: utf-8' \
-d '
{
    "msgtype": "text",
    "text": {
        "content": "'"$text"'"
    },
    "at":{
        "atMobiles": [ "'"$1"'" ],
        "isAtAll": false
    }
}'

python脚本
  • 编写脚本
cd /usr/lib/zabbix/alertscripts
vi zabbix_dingding_robot.sh
  • 脚本zabbix_dingding_robot.sh
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author: xzlAwin
# Email: xzlawin@163.com
# Date: 2024.07.23
# 描述: zabbix使用钉钉机器人告警脚本

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

# 脚本运行时,获取参数
to=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]

# 加签验证密钥
secret="填写自己的密钥"
# Webhook
webhook="https://oapi.dingtalk.com/robot/send?access_token=填写自己的token"

def func_sign():
    # 获取当前时间戳,单位ms
    timestamp = str(round(time.time() * 1000))
    print(timestamp)

    # 字符串转换utf-8编码
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    # hmacsha256加密
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    print(sign)
    url=webhook+'&timestamp='+str(timestamp)+'&sign='+sign
    return url

def func_sendMessage(url):
    headers = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    message = {
        "msgtype": "text",  # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
        "text": {
            "content": text  # 消息内容
        },
        "at": {
            "atMobiles": [
                to,
            ],
            "isAtAll": False  # 是否是发送群中全体成员
        }
    }
    data = json.dumps(message)
    response = requests.post(url=url, data=data, headers=headers)
    res_json = response.json()
    print(response.json())
    print(type(response.json))
    errcode = res_json['errcode']
    errmsg = res_json['errmsg']
    if errcode == 0:
        print('消息发送成功!')
    else:
        print('消息发送失败!',errcode, errmsg)
        exit(3)

if __name__ == '__main__':
    url = func_sign()
    func_sendMessage(url)
  • 将脚本zabbix_dingding_robot.sh复制到目录 /usr/lib/zabbix/alertscripts
# zabbix脚本存放目录
cd /usr/lib/zabbix/alertscripts
chmod +x zabbix_dingding_robot.sh
# 或者
chmod +x zabbix_dingding_robot.py

登录钉钉,创建内部群和钉钉机器人

在这里插入图片描述

在这里插入图片描述### 创建报警媒体类型

  • 创建报警媒体类型,[管理] → [报警媒介类型] → [创建媒介类型]
    在这里插入图片描述
    在这里插入图片描述
# 脚本参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

给用户添加授权

  • 给用户添加授权,[管理] → [用户] → [报警媒介]
    在这里插入图片描述
    在这里插入图片描述

创建动作

  • 创建动作,[配置] → [动作] → [创建动作]
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 报警参数
# 默认标题
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
# 消息内容
告警主机: {HOSTNAME}
告警 IP: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID : {EVENT.ID}
  • 恢复参数
# 默认标题
恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}已恢复!
# 消息内容
告警主机: {HOSTNAME}
告警 IP: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID: {EVENT.ID}
  • 确认操作
# 默认标题
已确认: {TRIGGER.NAME}
# 消息内容
用户: {USER.FULLNAME}
确认时间: {ACK.DATE} {ACK.TIME} 
确认消息: {ACK.MESSAGE}
当前问题状态: {EVENT.STATUS}

测试

  • 钉钉告警发送成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

00 RabbitMQ:前言

00 RabbitMQ:前言 1. 前言1.1. 举个🌰:快递案例1.1.1. 过程对比1.1.2. 延伸到程序中 1.2. 举个🌰:订单案例1.2.1. 流程1.2.2. 耦合1.2.3. 响应时间1.2.4. 并发压力1.2.5. 系统结构弹性 1.3. 总结 1. 前言 1.1. 举个&a…

机器人开源调度系统OpenTCS-6最新版本地源码运行

OpenTCS 项目使用 Gradle 而不是 Maven,那么需要使用 Gradle 来导入和构建项目。在 IntelliJ IDEA 中导入和运行使用 Gradle 的项目,可以按照以下步骤进行操作: 克隆 OpenTCS 源码 首先,克隆 OpenTCS 的源码到本地。您可以使用以…

2. 深度学习的项目流程(批量化打包数据、构建模型、训练模型、波士顿房价预测、激活函数、多层感知机)

深度学习流程 1. 深度学习基本流程1.1 流程图1.2 代码实现1.3 基本概念 2. 深度学习项目流程2.1 批量化打包数据2.2 构建模型2.3 训练模型(1)筹备训练(2)开始训练 2.4 模型推理 3. 深度学习实现波士顿房价预测3.1 数据读取、切分、…

Visio绘制的Sigmoid激活函数结构图,可导出高清图片,可修改,无水印。

Visio绘制的Sigmoid激活函数结构图,可导出高清图片,可修改,无水印。 方便用于小论文写作,方便用于毕业设计。 Visio版本为2021版,可用更高版本打开。 下载地址:地址 图片展示:

对递归的一些理解。力扣206题:翻转链表

今天在刷力扣的时候,在写一道翻转链表的题目的过程中,在尝试使用递归解决该问题的时候,第一版代码却每次都返回的是null,这个错误让我尝试去debug了一下,最终找出了问题,并且让我对递归有了一些更深的理解&…

Windows下帆软BI(finebi)单机部署移植(Tomcat)攻略

一、基础环境 操作系统:Windows 10 64bit 帆软BI 版本:V9.0/V10.0 HTTP工具:Tomcat 外置数据库:Oracle 11g 实验内容:将已经部署好的帆软BI从一台电脑移植到另一台电脑 二、前期准备 1、做好外置数据库移植&…

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯 STM32CUBEIDE(不是STM32CUBEMX)开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开…

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现GA-Transformer-LSTM多变量回归预测,遗传优化算法&#…

Vue3--

一、pinia (集中式状态(数据)管理) 1、准备一个效果 2、存储读取数据 3、修改数据三种方式 4、storeToRefs 5、getters 当state中的数据,需要经过处理后在使用时,可以使用getters配置 6、$subscribe的使用…

QT总结——图标显示坑

最近写代码遇到一个神仙大坑,我都怀疑我软件是不是坏了,这里记录一下。 写qt工程的时候我们一般会设置图标,这个图标是窗体的图标同时也是任务栏的图标,但是我发现生成的exe没有图标,这个时候就想着给他加一个图标&…

Linux(CentOS)的“应用商城” —— yum

Linux(CentOS)的“应用商城” —— yum 关于 yum 和软件包Linux 系统(CentOS)的生态yum 相关操作yum 本地配置yum 安装 lrzsz.x86_64 关于 yum 和软件包 首先 yum 是软件下载安装管理的客户端,类似各种手机里的“应用…

OpenAI发布GPT-4 Mini的深度分析及中国大模型的弯道超车机会

引言 在OpenAI封禁中国IP访问其API后,紧接着推出了GPT-4 Mini,这是一个引发广泛关注和讨论的新举措。此举不仅让人们质疑OpenAI的战略方向,更引发了对中国大模型是否能弯道超车的讨论。本文将详细分析GPT-4 Mini的特点、市场影响及中国大模型…

eclipse中的classbean导入外部class文件,clean项目后删除问题

最近被eclipse搞得头疼,下午终于解决 eclipse创建的java项目中,类的输出目录是classbean。由于项目需要,classbean目录下已经导入了外部的类,但每次clean项目时,会把class删掉。 广泛查询,eclipse不清空c…

jenkins删除历史构建记录

1、 登录jenkins,进入【Manage Jenkins】-【Script Console】,输入: def jobName "Test" //删除的项目名称 def maxNumber 60 // 保留的最小编号,意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullN…

javascript鼠标跟随星星动画特效

鼠标跟随星星动画特效https://www.bootstrapmb.com/item/14781 创建一个鼠标跟随的星星动画特效在JavaScript中通常涉及到HTML、CSS和JavaScript的结合。以下是一个简单的步骤说明和示例代码,用于创建一个基本的鼠标跟随星星动画: HTML (index.html) ht…

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前,我们需要回答两个关键问题:建模的目标用户是谁?他们的具体需求是什么?在一个典型的时序数据管理方案中,数据采集和数据应用是两个主要环节。如下图所示: 对于数据采集工程师…

大数据-44 Redis 慢查询日志 监视器 慢查询测试学习

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)

项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:java 前端技术:JavaScript、VUE.j…

好玩新游:辛特堡传说中文免费下载,Dungeons of Hinterberg 游戏分享

在游戏中,你将扮演Luisa,一个被现实生活拖得疲惫不堪的法律实习生。她决定暂时远离快节奏的公司生活,踏上征服辛特堡地下城的旅程…她会在第一天就被击退,还是能成为顶级猎魔人呢?只有一个办法可以找到答案... 体验刺激…

MATLAB练习题——矩阵(2)

逻辑运算 a [5 0.2 0 -8 -0.7 ],在进行逻辑运算时,a 相当于什么样的逻辑量。 相当于 a[1 1 0 1 1] 角度运算 在 sin(x)运算中,x 是角度还是弧度? 在 sin(x)运算中,x 是弧度,MATLAB 规定所有…