Zabbix钉钉机器人告警

news2024/11/27 10:31:16

目录

一.在钉钉群里添加机器人

二.配置钉钉告警脚本

1.安装python依赖模块python-requests

2.配置钉钉告警配置脚本zabbix_ding.conf

3.创建告警日志并且授权。

4.配置钉钉告警执行脚本dingding.py

5.测试

三.配置zabbix告警

1.创建媒介

2.给用户添加报警媒介

3.配置动作

 4.测试


一.在钉钉群里添加机器人

通过自定义webhook接入自定义服务

注意:webbhook:记住webhhook地址和;

安全设置:设置加签,只有信息内容包含签才会被机器人发送。

二.配置钉钉告警脚本

1.安装python依赖模块python-requests

yum -y install python3 python3-requests

2.配置钉钉告警配置脚本zabbix_ding.conf

在/etc/zabbix下创建zabbix_dinf.conf

[root@server01 ~]# vim /etc/zabbix/zabbix_ding.conf
[config]
log_path=/var/log/zabbix/zabbix_ding.log
webhook=https://oapi.dingtalk.com/robot/send?access_token=2d691339c865c548c6f2d19af32094eefd054e63d520815f39098bb373fd3516
secret=SEC3e31084bf8b8fbe4897918035a6049359c125bb3a204048045ce68b034c2596d

3.创建告警日志并且授权。

[root@server01 ~]# touch /var/log/zabbix/zabbix_ding.log 
[root@server01 ~]# chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log 

4.配置钉钉告警执行脚本dingding.py

注意: 系统需要同步时间

  • 在/usr/lib/zabbix/alertscripts目录中执行的脚本dingding.py的内容
[root@server01 ~]# cd /usr/lib/zabbix/alertscripts/
[root@server01 alertscripts]# vim dingding.py 
#!/usr/bin/env python3
# coding:utf8
#
import configparser
import os
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import json
import sys

config = configparser.ConfigParser()
config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
log_path = config.get('config', 'log_path')
api_url = config.get('config', 'webhook')
api_secret = config.get('config', 'secret')
log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


# 钉钉机器人文档说明
# https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
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:  # only 关键字
        webhook = api_url
    elif mode == 1 or mode == 2:  # 关键字和加签 或 # 关键字+加签+ip
        webhook = get_signed_url()
    else:
        webhook = ""
        print("error! mode:   ", mode, "  webhook :  ", webhook)
    return webhook


def get_message(text, user_info):
    # 和类型相对应,具体可以看文档 :https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    # 可以设置某个人的手机号,指定对象发送
    message = {
        "msgtype": "text",  # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
        "text": {
            "content": text  # 消息内容
        },
        "at": {
            "atMobiles": [
                user_info,
            ],
            "isAtAll": False  # 是否是发送群中全体成员
        }
    }
    return message


# 消息发送日志
def log(info):
    if os.path.exists(log_path):
        log_file = open(log_path, "a+")
    else:
        log_file = open(log_path, "w+")
    log_file.write(info)


def send_ding_message(text, user_info):
    # 请求的URL,WebHook地址
    # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
    webhook = get_webhook(1)
    # 构建请求头部
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    # 构建请求数据
    message = get_message(text, user_info)
    # 对请求的数据进行json封装
    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:
        log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
    else:
        log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
        print(log_time + ":消息发送失败 返回信息:%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)
  • 在zabbix_server.conf中配置告警脚本的路径
[root@server01 ~]# vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
  • 设置脚本所有权和执行权
[root@server01 ~]# chown zabbix.zabbix   -R /usr/lib/zabbix/alertscripts/
[root@server01 ~]# cd /usr/lib/zabbix/alertscripts/
[root@server01 alertscripts]# chmod +x dingding.py 
[root@server01 alertscripts]# ll
总用量 4
-rwxr-xr-x 1 zabbix zabbix 3334 11月 15 17:50 dingding.py

5.测试

[root@server01 alertscripts]# ./dingding.py  user subject okok!

三.配置zabbix告警

1.创建媒介

管理--->报警媒介类型--->创建报警媒介类型

脚本参数:{ALERT.SENDTO}
                  {ALERT.SUBJECT}
                  {ALERT.MESSAGE}

创建消息模板:添加问题模板和问题恢复模板。

消息模板

主题:服务器报警
消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}


主题:服务器已恢复
消息:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

测试媒介:

可以看出机器人已发送测试消息。

2.给用户添加报警媒介

管理-->用户-->Admin

添加后需要更新

3.配置动作

这里需要有触发器才能配置动作

配置--->动作

  •  添加具体操作

操作:

还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:

[root@server02 ~]# visudo          #相当于“vim /etc/sudoers”
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)   ALL
    zabbix    ALL=(ALL)   NOPASSWD: ALL     #添加的一行,表示不需要输入密码
​
[root@server02 ~]#  vim /etc/zabbix/zabbix_agentd.conf 
    EnableRemoteCommands=1          #允许接收远程命令  修改原有的值,不要在末尾追加
    LogRemoteCommands=1             #把接收的远程命令记入日志
​
[root@server02 ~]#  systemctl restart zabbix-agent.service

恢复操作:

 4.测试

这里我们监控的是客户端的22端口,将22端口停掉。机器人会发出警告。

[root@server02 ~]# systemctl  stop sshd

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

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

相关文章

day28_JQuery

今日内容 零、 复习昨日 一、正则表达式 二、JQuery 零、 复习昨日 js已经学完,js是让页面动态变化 1) 基本语法(变量,运算,逻辑,函数) 2) 事件(给标签绑定不同的事件) 3) dom(改变标签内容,属性,样式)一、引言 1.1 jQuery概述 原生js获得dom对象: var obj document.getElem…

2018年五一杯数学建模A题徐州潘安湖风景区游览路线设计解题全过程文档及程序

2019年五一杯数学建模 A题 徐州潘安湖风景区游览路线设计 原题再现 徐州是一个老工业基地和资源型城市,煤炭开采历史长达130年。长期煤炭开采在徐州累计形成采煤塌陷区达数十万亩。位于徐州市贾汪区西南部、紧邻马庄的潘安湖湿地公园原来就是徐州最大的、塌陷最严…

你知道如何科学的学习吗?-关于个人成长的思考

背景 最近在翻看自己工作后的笔记,从有道云笔记到印象笔记,到本地笔记,到自己使用github搭建的博客,到语雀笔记,使用了不同的平台工具;零零总总记录了许多学习笔记、个人成长笔记、职业规划等内容。现在看…

十、http客户端Feign

目录 一、使用Feign客户端 1、修改pom文件 2、在启动类OrderApplication中加入注释 3、创建客户端接口 4、装配UserClient,并且进行远程调用 5、发送请求,查看服务调用情况 二、定义Feigin的配置 方式一:配置文件方式 (1&…

项目Git分支管理规范

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 一、分支管理 项目中,一般会创建三个常用分支: develop:开发环境的稳定分支,公共开发环境基于该分支构建。pre-release:测试…

单脉冲测角-和差比幅法

和差比幅法单脉冲测角 单脉冲测角的类型阵列接收模型和差波束构造方法和差比幅测角仿真 单脉冲测角的类型 传统的单脉冲测向方法主要有3种,分别是半阵法、加权法和和差比幅法。其实这3种方法都需要形成和波束和差波束,只是波束形成的方法不同&#xff0…

批量处理文件夹及子文件夹下文件名

从此烟雨落京城,一人撑伞两人行。 问题描述 下载的资源被打过标记,不能直接使用,甚是痛苦 问题: 所有文件的文件名都加入了【更多it教程 微信号:…】字段,包括当前文件夹和子文件夹的全部文件&#xff0c…

【Spring】bean的基础配置

bean的别名 当在Spring config文件中定义name作为别名后&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

4. 【自动驾驶与机器人中的SLAM技术】点云中的拟合问题和K近邻

目录 1.在三维体素中定义 NEARBY14&#xff0c;实现 14 格最近邻的查找。2.推导arg max||Ad||22的解为ATA的最大特征向量或者奇异向量。3. 将本节的最近邻算法与一些常见的近似最近邻算法进行对比&#xff0c;比如nanoflann&#xff0c;给出精度指标和时间效率指标。4. 也欢迎大…

创建一个用户test且使用testtab表空间及testtemp临时表空间并授予其权限,密码随意

文章目录 1、连接到数据库2、创建表空间3、创建用户4、授予权限5、测试 1、连接到数据库 sqlplus / as sysdba2、创建表空间 创建testtab表空间 CREATE TABLESPACE testtab DATAFILE /u01/app/oracle/oradata/orcl/testtab.dbf SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE …

【以图会意】文件系统从外存到内存到用户空间

首先&#xff0c;在文件目录中&#xff0c;装有很多块FCB&#xff0c;由文件名和i指针两部分构成&#xff0c;指针指向文件所在的索引结点&#xff0c;包含了例如&#xff1a;文件存储权限&#xff0c;文件长度等一系列文件的信息&#xff0c;最重要的当然是物理地址&#xff0…

《变形监测与数据处理》笔记/期末复习资料(择期补充更新)

变形&#xff1a; 变形是物体在外来因素作用下产生的形状、大小及位置的变化&#xff08;随时间域和空间域的变化&#xff09;&#xff0c;它是自然界普遍存在的现象。 变形体&#xff1a; 一般包括工程建筑物、构筑物、大型机械设备以及其他自然和人工对象等。 变形体和变形…

AW2013芯片讲解

文章目录 前言一、AW2013芯片介绍二、AW2013从机地址三、AW2013读写时序AW2013写时序AW2013读时序 四、AW2013的INT引脚五、LED作用和配置描述LED控制PWM控制模式简短编程模式 六、AW2013寄存器讲解总结 前言 本篇文章将带大家学习AW2013芯片的使用。 一、AW2013芯片介绍 AW…

Mistral 7B 比Llama 2更好的开源大模型 (三)

Mistral 7B 比Llama 2更好的开源大模型 Mistral 7B是一个70亿参数的语言模型,旨在获得卓越的性能和效率。Mistral 7B在所有评估的基准测试中都优于最好的开放13B模型(Llama 2),在推理、数学和代码生成方面也优于最好的发布34B模型(Llama 1)。Mistral 7B模型利用分组查询注…

Linux(1):开始

计算机组成概述 计算机&#xff1a;接受用户输入指令与数据&#xff0c;经由中央处理器的数学与逻辑单元处理后&#xff0c;以产生或存储有用的信息。 主要可以分为3个部分&#xff1a;输入单元、主机单元、输出单元。 中央处理器&#xff08;Central Processing Unit, CPU&a…

unity shaderGraph实例-扫描效果

文章目录 效果展示整体结构各区域内容区域1区域2区域3区域4区域5区域6GraphSetttings注意事项使用方法 效果展示 整体结构 各区域内容 区域1 用场景深度减去顶点的View空间的视野深度&#xff08;Z值&#xff09;&#xff0c;这里Z值需要乘-1是因为从相机看到的物体顶点的视野…

UI设计是什么意思?一文给你讲清楚

随着互联网的快速发展&#xff0c;用户界面UI设计在中国也逐渐发展&#xff0c;用户界面UI设计的目的不仅是让用户&#xff0c;有视觉享受&#xff0c;而且解决用户如何与互联网设备交互&#xff0c;因此&#xff0c;用户界面UI设计是通过用户使用习惯、操作逻辑、界面交互和视…

【数据结构高阶】二叉搜索树

接下来我们来开始使用C来详细讲解数据结构的一些高阶的知识点 本期讲解的是二叉搜索树&#xff0c;对于初阶二叉树有所遗忘的同学可以看到这里&#xff1a; 【精选】【数据结构初阶】链式二叉树的解析及一些基本操作 讲解二叉搜索树主要是为了后面的map和set做铺垫&#xff…

安装pycharm选择路径时,点击next无反应

安装的时候断网就可以解决该问题。