前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix 随笔:钉钉机器人告警(脚本方式)

Zabbix 随笔:钉钉机器人告警(脚本方式)

作者头像
IT小白Kasar
发布2022-03-03 08:47:39
2.8K1
发布2022-03-03 08:47:39
举报
文章被收录于专栏:个人技术随笔个人技术随笔

本文将带来 Zabbix 6.0 LTS 如何利用 Python 脚本实现钉钉机器人通知告警信息。

正文

本文环境

  • RockyLinux 8.5
  • Zabbix 6.0 LTS
  • Python 3

钉钉配置

登录钉钉软件,点击右上方的 + 号

点击创建按钮(如下图)

填写相关信息,群聊需要 3 人以上

群聊创建完成后,点击下图红框的设置图标(如下图)

选择智能群助手

进入机器人管理,点击添加机器人后面的 … (如下图)

进入机器人管理后,下拉找到自定义(通过 Webhook 接入自定义服务,如下图)

点击添加

填写相关信息。

钉钉机器人需要设置安全条件,如果不符合安全条件,则无法通过钉钉机器人发送消息,这点需要注意

  • 自定义关键词
  • 加签
  • IP 地址(支持网段)

完成机器人添加后记住 Webhook 的地址,下面会用到

添加完成后,群聊里会有相关提示

Zabbix 配置

由于是脚本的关系,所以需要找到 Zabbix 调用脚本的路径

代码语言:javascript
复制
cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath
vim /etc/zabbix/zabbix_server.conf

将注释取消掉,重启 Zabbix 服务

代码语言:javascript
复制
systemctl restart zabbix-server

脚本部分

Python 脚本需要注意格式缩进,如果出现脚本不可用,基本就是格式问题,

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import time
headers = {'Content-Type': 'application/json;charset=utf-8'}
time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
api_url = "您的 Webhook 地址"
def msg(text,user):
  json_text= {
     "msgtype": "markdown",
        "markdown": {
            "title": "Kasar",
            "text": text   + "\n \n @"+ user
        },
        "at": {
            "atMobiles": [
                user
 ],
            "isAtAll": False
        }
    }
  r = requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
  code = r["errcode"]
if __name__ == '__main__':
    text = sys.argv[2]
    user = sys.argv[1]
    msg(text,user)
代码语言:javascript
复制
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=c8a8336f237f35bc7efe68bcb4f8a71344950397b338f9fef1ed6019bbb4ef04"
def msg(text,user):
    json_text= {
     "msgtype": "markdown",
        "markdown": {
            "title":"IT小白Kasar",
            "text": text + "\n \n @"+ user
        },
        "at": {
            "atMobiles": [
                user
 ],
            "isAtAll": False
        }
    }
    r=requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
    code = r["errcode"]
if __name__ == '__main__':
    text = sys.argv[2]
    user = sys.argv[1]
    msg(text,user)

.content .tabs ul { margin: 0; } .tab-content { display: none; } function onTabClick (event) { var tabTitle = $(event.currentTarget).children('span:last-child').text(); $('.article .content .tab-content').css('display', 'none'); $('.article .content .tabs li').removeClass('is-active'); $('#' + tabTitle).css('display', 'block'); $(event.currentTarget).parent().addClass('is-active'); }

本文以 python3 示例
本文以 python3 示例

添加执行权限后执行脚本

代码语言:javascript
复制
chmod +x dingding.py
./dingding.py 1 1 

执行报错,出现文件或者目录没找到,如下图

证明系统不存在该路径,需要安装 python3

代码语言:javascript
复制
yum -y install python3

再次执行,出现问题,出现模块无法找到,如下图

需要通过 pip 安装 request 模块

代码语言:javascript
复制
dnf -y install python3-pip
pip3 install requests

再次执行,且钉钉显示消息

Zabbix 前端配置

创建媒介类型 路径为:Administration(管理)–> Media types(媒介类型)–> Create media type(创建媒介类型)

填写相关信息,名称为 dingding,Type(类型)选择 Script(脚本),脚本参数填写 {ALERT.SENDTO}{ALERT.MESSAGE},这两个为内置宏,且和 python 脚本传参有很大关联性,这里分别对应user = sys.argv[1]text = sys.argv[2]

创建完成后点击刚刚创建的媒介后面的 test(测试)按钮

这里仅仅需要填写 Send to(发送)和 Message(内容),这里也和上面的内置宏一一对应,另外本文采用的安全条件为关键字(test),正文里有 test

如果出现 Media type test successful. 则代表正常,如果失败则要分析具体原因了。

钉钉 APP 里显示测试消息,显示的为正文,所以代表 Subject 是不会带过来的,和脚本有直接关系

用户权限授权 路径为:Administration(管理)–> Users(用户) 本文以 Admin 用户为例,点击用户

找到 Media 选项卡,点击 Add(添加)

Type(类型)选择刚刚创建的 dingding 测试用户随便填写,如果采用了 @ 方式,那就要选择正确信息,另外接收告警的级别、时间段可以自行选择

效果如下

创建动作 路径为:Configuration(配置)–> Actions(动作)–> Trigger actions(触发器动作)

点击 Create action(创建动作)

Action 选项卡主要是设置条件,本文以 Zabbix Servers主机组为例,其余参考官网文档

在 Operations(操作)选项卡主要是告警通知相关的内容,点击 Operation(操作)块里的 add(添加)

在 send Message 这一块属于告警升级的相关内容,这个在后续会提到,本文不讲,本文只针对用户,也就是 send to users 部分选择 Admin 用户,send only to(仅发送)选择 dingding,这块就是调用刚刚创建的媒介,Custom message 和前方的媒介里有关联性,任意配置一项即可。

配置完成

继续刚才的 custom message(自定义消息)部分讲,由于通知需要模板消息,此时在媒介里的 Message templates(消息模板)选项卡可以配置模板。

点击 add 后会出现模板的配置界面,会自带消息模板,这里和动作里的效果是一模一样的,当然这里也可以修改,也可以不配置,在动作里配置,但是必须得有一个是配置

添加完成(问题、问题恢复、问题更新)

创建一个虚拟主机测试,IP 为 10.0.0.1,主机组为 Zabbix servers,类型为 agent,模板为 ICMP Ping

由于是虚拟主机,所以无法 ping 通,会触发告警

钉钉 APP 能看到机器人推送的通知

此时换成能 ping 通的 IP,告警恢复

钉钉 APP 同样收到恢复的通知

写在最后

整个流程看起来很复杂,其实相对来说还好,但是存在格式问题,对于新手而言相对比较麻烦,排错压力比较大,所以建议新手还是使用 JavaScript 脚本的方式去实现,可以在通过 webhook 的方式实现,参考笔者之前的那一篇文章。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 本文环境
      • 钉钉配置
        • Zabbix 配置
          • 脚本部分
            • Zabbix 前端配置
            • 写在最后
            相关产品与服务
            轻量应用服务器
            轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档