当前位置: 首页 > news >正文

zabbix6.4连接钉钉发出警告

zabbix6.4配置钉钉告警

注册钉钉

建一个内部群

添加自定义机器人

配置zabbix服务端

打开脚本告警的配置

# vim /etc/zabbix/zabbix_server.conf

                AlertScriptsPath=/usr/lib/zabbix/alertscripts

准备脚本

安装一个依赖包

# dnf -y install python3-requests

#  vim /usr/lib/zabbix/alertscripts/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)

 

 给脚本执行权限

# chmod +x /usr/lib/zabbix/alertscripts/dingding.py

# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/

将脚本和zabbix关联

[config]
log_path=/var/log/zabbix/zabbix_ding.log
webhook=https://oapi.dingtalk.com/robot/send?access_token=3f528d1610fdc8b11857bdece51feca12d74e6044c35ebf048f1f034791054f5
secret=SECc4999c84f17f80a7241e79599450a18c0a0faac38374640049a06ebd2c8ac8af

#重启zabbix-server
# systemctl restart zabbix-server 

测试脚本

# cd /usr/lib/zabbix/alertscripts/
#  ./dingding.py user subject messages

整合zabbix和钉钉告警 

添加告警媒介

中文消息模板 

默认接收人:
故障级别:{TRIGGER.STATUS}。服务器:【{HOSTNAME1} 】 发生:{TRIGGER.NAME} 故障! 
注:默认接收人:相当于邮件的主题
默认信息:邮件的主题
告警主机:{HOSTNAME1} 
告警时间:{EVENT.DATE} {EVENT.TIME} 
告警等级:{TRIGGER.SEVERITY} 
告警信息:{TRIGGER.NAME} 
告警项目:{TRIGGER.KEY1} 
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 
事件ID :{EVENT.ID}

给用户添加报警媒介 

创建新的监控项 

创建根目录的使用率监控项

 

创建触发器 

查看最新数据 

设置触发器动作 

#df -h

#dd if=/dev/zero of=/opt/a.txt count=5 bs=1000M //增大根目录内存占比

#dd if=/dev/zero of=/opt/a.txt count=1 bs=1 //释放添加进去的内存,也可以直接删除a.txt文件

# df -h 

出现警告并且通过钉钉发生警告信息

 

内存使用率的设置

1.查看服务器内存使用

 

#free -m

#free -m | awk '/Mem/{print $2}'

#free -m | awk '/Mem/{print $3}'

#free -m | awk '/Mem/{print $3/$2*100}'

2.创建

 # vim /etc/zabbix/zabbix_agentd.d/memory_used.conf 

UserParamter=memory.used,free -m | awk '/Mem/{print $3/$2*100}'

3.重启客户端服务器

#systemctl restart zabbix-agent

4.创建监控器 

5.创建触发器 

6.添加触发器动作

7.改变内存使用率触发器范围,触发警告

通过钉钉发出警告

8.恢复内存使用率触发器的值,解决告警,推送消息

图形

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【计算机网络】TCP协议(下)
  • 基于stm32f407的pwm输出以及初始化(84mhz)
  • 电影、视频拍摄基础知识 | 所有岗位及职能描述、任职要求速览
  • LC1860C 后来怎么样了
  • 浅谈人工智能之python调用通义千问API
  • 深入解析MySQL索引的使用及优化
  • gitlab 启动/关闭/启用开机启动/禁用开机启动
  • 前端HTML基础笔记
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
  • 8. GIS数据分析师岗位职责、技术要求和常见面试题
  • 深度学习中常见的权重参数初始化方法
  • argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常
  • C++手记
  • C语言深度剖析--不定期更新的第五弹
  • HCIA--实验十一:单区域OSPF路由实验
  • [case10]使用RSQL实现端到端的动态查询
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Git学习与使用心得(1)—— 初始化
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • nginx 负载服务器优化
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 程序员该如何有效的找工作?
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 前端攻城师
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 原生Ajax
  • ​Linux·i2c驱动架构​
  • # Kafka_深入探秘者(2):kafka 生产者
  • $.each()与$(selector).each()
  • (1)STL算法之遍历容器
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (七)glDrawArry绘制
  • (学习总结16)C++模版2
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (源码分析)springsecurity认证授权
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (自适应手机端)行业协会机构网站模板
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 事件模型教程(二)
  • .Net实现SCrypt Hash加密
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @SpringBootConfiguration重复加载报错
  • @vue/cli 3.x+引入jQuery
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor