博主

昨天 17:29在线

多吃一点点
我身上一切优秀的品质都要归功于书籍。——高尔基
博主 多吃一点点
本网站由 又拍云图标 提供cdn加速/云存储服务器
博主 昨天 17:29 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 1 人

ICP备案图标 渝ICP备2025049634号

公安备案图标 渝公网安备50022202000535号

本网站由

又拍云图标

提供cdn加速/云存储服务器

Powered by Typecho & Sunny

2 online · 395 ms

Title

zabbix 邮件、钉钉、企业微信告警

多吃一点点

·

zabbix

·

Article

一、邮件告警(外部方式)

1.安装发送工具

♾️ text 代码:
yum install mail.rc -y

2.配置zabbix服务端外部邮箱

♾️ text 代码:
vim /etc/mail.rc  //注意邮箱需要开启客户端授权码进行第三方登录
————文件末尾新增————
set from=xxxx@163.com\xxxx@qq.com
set smtp=smtp.163.com\smtp.qq.com
set smtp-auth-user=xxxx@163.com\xxxx@qq.com
set smtp-auth-password=xxxx//授权码
set smtp-auth=login
注:网易邮箱或QQ邮箱的授权码,POP3/SMTP必须打开
2025-07-31T08:16:09.png

3.配置发送脚本

邮件必须在alertscripts目录下,否则识别不出来

目录: /usr/lib/zabbix/alertscripts
2025-07-31T08:16:29.png

创建邮件脚本

♾️ text 代码:
vim mailx.sh

#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

————注释————
$1:收件人邮箱地址;
$2:邮件标题;
$3:邮件内容
2025-07-31T08:16:42.png

目录赋权

♾️ text 代码:
[root@zabbix-server alertscripts]# touch /tmp/mailx.log
[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /tmp/mailx.log
[root@zabbix-server alertscripts]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh 
[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /usr/lib/zabbix

4.测试脚本

♾️ text 代码:
[root@zabbix-server alertscripts]#  ./mailx.sh xxxx@qq.com “name” ”pyy”
2025-07-31T08:17:09.png

5.配置 web 界面

点击 左侧 告警---媒介 右上角---创建媒介类型

脚本参数:

♾️ text 代码:
{ALERT.SENDTO}              //宏变量_代表告警接收者地址
{ALERT.SUBJECT}             //宏变量_告警主题
{ALERT.MESSAGE}             //宏变量_表示告警详细信息
2025-07-31T08:17:25.png
点击 消息模板 编辑
2025-07-31T08:17:35.png♾️ text 代码:
-=【告警通知】=-
事件名称:{EVENT.NAME}
告警地址:{HOST.NAME}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警严重性:{EVENT.SEVERITY}
当前状态:{ITEM.LASTVALUE} {EVENT.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警平台:http://192.168.97.150:8080


-=【恢复通知】=-
事件名称:{EVENT.NAME}
告警地址:{HOST.NAME}
监控项目:{ITEM.NAME}
告警严重性:{EVENT.SEVERITY}
当前状态:{ITEM.LASTVALUE} 
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
告警平台:http://192.168.97.150:8080
     

二、钉钉告警(Webhook方式)

参数:

♾️ text 代码:
Key                                    //宏变量_钉钉地址
SUBJECT    {ALERT.SUBJECT}             //宏变量_告警主题
MESSAGE    {ALERT.MESSAGE}             //宏变量_表示告警详细信息
2025-07-31T08:17:52.png
脚本:

♾️ text 代码:
var dingding = {
  key: null,
  message: null,
  msgtype: "markdown",
  proxy: null,
sendMessage: function () {
    var params = {
       msgtype: dingding.msgtype,
       markdown: {
          title: "告警",
          text: dingding.message
        },
      },
      data,
      response,
      request = new CurlHttpRequest(),
      url =
        "https://oapi.dingtalk.com/robot/send?access_token=" +
        dingding.key;
    if (dingding.proxy) {
      request.setProxy(dingding.proxy);
    }
    request.AddHeader("Content-Type: application/json");
    data = JSON.stringify(params);
    // Remove replace() function if you want to see the exposed key in the log file.
    Zabbix.Log(
      4,
      "[dingding Webhook] URL: " + url.replace(dingding.key, "<BOT KEY>")
    );
    Zabbix.Log(4, "[dingding Webhook] params: " + data);
    response = request.Post(url, data);
    Zabbix.Log(4, "[dingding Webhook] HTTP code: " + request.Status());
    try {
      response = JSON.parse(response);
    } catch (error) {
      response = null;
    }
    if (request.Status() !== 200 || response.errcode !== 0) {
      if (typeof response.errmsg === "string") {
        throw response.errmsg;
      } else {
        throw "Unknown error. Check debug log for more information.";
      }
    }
  },
};
try {
  var params = JSON.parse(value);
  if (typeof params.Key === "undefined") {
    throw 'Incorrect value is given for parameter "Key": parameter is missing';
  }
  dingding.key = params.Key;
  if (params.HTTPProxy) {
    dingding.proxy = params.HTTPProxy;
  }
  dingding.to = params.To;
  dingding.message = params.Subject + "\n" + params.Message;
  dingding.sendMessage();
  return "OK";
} catch (error) {
  Zabbix.Log(4, "[dingding Webhook] notification failed: " + error);
  throw "Sending failed: " + error + ".";

三、钉钉告警(python方式)

1.钉钉告警机器人关键词设置

2025-07-31T08:18:14.png

2、完整复制webhook

2025-07-31T08:18:30.png

3、配置钉钉脚本

安装pthon3.8

♾️ text 代码:
        [root@zabbix-server ~]# yum install python3.8    //安装python
        [root@zabbix-server ~]# whereis python3.8     //查看python3.8位置

进入python目录,配置软连接

♾️ text 代码:
[root@zabbix-server ~]# cd /usr/bin    //进入python目录
[root@zabbix-server bin]#  ln -s /usr/bin/python3.8 python     //配置软连接
2025-07-31T08:18:55.png♾️ text 代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import requests
import json
import sys
import os
import datetime
webhook = "修改为自己机器人的webhook地址即可"
user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={
        "msgtype": "text",
        "text": {
                "content": "%s%s"%(subject,text)
        },
        "at": {
                "atMobiles": [
                        user
                        ],
                        "isAtAll": False
        }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/alertscripts/log/dingding.log"):
        f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","a+")
else:
        f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
        f.close()
else:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送失败"+"\n"+str(text))
        f.close()

2025-07-31T08:19:17.png
赋权目录

♾️ text 代码:
#为脚本添加执行权限
[root@zabbix alertscripts]# chmod +x dingding.py
 
#修改脚本的属主和属组:
[root@zabbix alertscripts]# chown zabbix.zabbix dingding.py

创建日志文件:
[root@zabbix alertscripts]# mkdir -p /usr/lib/zabbix/alertscripts/log/
[root@zabbix alertscripts]# touch /usr/lib/zabbix/alertscripts/log/dingding.log
[root@zabbix alertscripts]# chown zabbix.zabbix -R /usr/lib/zabbix/alertscripts/log/

测试钉钉是否能接收到告警信息

♾️ text 代码:
#py脚本 手机号 关键词 告警信息
./dingding.py xxxxxxx 告警 test
现在已有 7 次阅读,0 条评论,0 人点赞
Comment:共0条
发表
搜索 消息 足迹
你还不曾留言过..
你还不曾留下足迹..
博主 hi 你好 不再显示
博主
未知作品 歌曲封面
博主 立即安装
前往评论 切换字号