zabbix 钉钉微信企微告警(动作操作消息内容模板)

news2024/11/20 12:39:16

一、环境配置

1、配置zabbix服务端

2、配置监控主机&监控项&监控模板

zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客

二、触发器

触发器的本质就是一个条件判断,对于不同的监控数据来说,我们要设置不同的触发器。如一个监控项不关联触发器,将不会提示错误,也不会触发告警动作。

触发器(trigger):

        触发器实际是一个条件判断表达式,如判断硬盘使用率超过80%

        当触发条件发生后,会触发事件,用于某个动作

动作 (action):

        触发器的条件被触发时候的具体操作

        可以是发送邮件、执行远程命令。可以单独设置,也可以相互配合。

1、创建触发器

2、触发器表达式

表达式格式:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

{主机名:监控key.函数(参数)}<表达式>常数

 这个表达式在zabbix中是不需要手动编写的,可以在zabbix配置页面选择

3、表达式函数

  • 大多数函数使用秒作为参数,使用#代表不同含义
  • avg,count,last,min and max 函数支持额外的第二个参数time_shift(时间偏移量)这个参数允许从过去一段时间内引用数据

三、配置报警媒介

发送通知有多种方式:邮件、短信、钉钉、微信、企微、飞书等。

发送通知就是发送消息,消息的载体我们称为媒介,所以要执行发送通知动作,需要先创建一个报警媒介(当现有媒介不能满足需求的时候)。

1、媒介之邮件

2、媒介之钉钉告警&微信等

钉钉&微信&飞书等都是通过 类型为脚本 的方式设置媒介类型

脚本参数参考如下:

{ALERT.SENDTO}        消息的接收者

{ALERT.SUBJECT}      消息主题  

{ALERT.MESSAGE}        告警信息

四、告警信息模板

信息模板,根据不同的消息类型信息模板的内容也有不同。

1、配置模板

 2、内容参数说明

故障信息参数:

#####默认标题

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

#####消息内容

告警主机: {HOSTNAME1}

主机IP: {HOST.IP}

告警时间: {EVENT.DATE} {EVENT.TIME}

告警等级: {TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

监控取值: {ITEM.LASTVALUE}

告警项目: {TRIGGER.KEY1}

问题详情: {ITEM.NAME}:{ITEM.VALUE}

当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID: {EVENT.ID}

故障恢复信息参数:

#####默认标题

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME} 已恢复 !

#####消息内容

告警主机: {HOSTNAME1}

主机IP: {HOST.IP}

恢复时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}

持续时间: {EVENT.AGE}

告警等级: {TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

监控取值: {ITEM.LASTVALUE}

告警项目: {TRIGGER.KEY1}

问题详情: {ITEM.NAME}:{ITEM.VALUE}

当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID: {EVENT.ID}

五、配置用户群组及用户

用户与报警媒介相关联,只有用户对服务器群组有读取权限才能发送告警通知。

通过用户群组配置相关服务器群组读、写权限,用户继承群组权限。

1、用户群组

2、用户

六、配置动作

1、动作

2、动作步骤配置说明

默认的步骤是1-3,也即是从1开始到3结束。一旦故障发生,就执行脚本,发送给群组成员的用户。即使是故障持续1小时,也只发送3此告警,时间间隔为0秒

如果改成1-0  , 0表示无限制, 无限制发送告警

间隔时间是默认持续时间60秒,也就是1分钟1次,如持续1小时发送60次告警。

如设置成3-5,也就是持续3次也就是默认3*60=180秒后才发送告警给用户。

七、脚本

1、钉钉脚本

#!/usr/bin/python
# -*- 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= 这里填写钉钉机器人地址"          #填入刚刚复制的webhook
api_url = sys.argv[1]
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                "15901402212"       #填入号码会@相应号码的人
            ],
            "isAtAll": True        # True会@所有人
        }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content

if __name__ == '__main__':
    text = sys.argv[2]
    msg(text)

2、企微脚本

[root@zabbix-server alertscripts]# cat EN-WeChat.py 
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
 
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = sys.argv[1]
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
 
if __name__ == '__main__':
    text = sys.argv[2]
    msg(text)

3、微信脚本

注:需要建立相关redis服务、微信告警服务等,直接使用脚本是不成功的。

[root@zabbix-server alertscripts]# cat weixin.sh 
#!/bin/bash
cd /etc/zabbix/alertscripts/
to=$1
str=$2
body=$3
host=`echo $str |awk -F [:]  '{print $2}'`
key=`cat /proc/sys/kernel/random/uuid`
echo $0 >> /etc/zabbix/alertscripts/1.log
echo $to >> /etc/zabbix/alertscripts/1.log
echo $str >> /etc/zabbix/alertscripts/1.log
echo $body >> /etc/zabbix/alertscripts/1.log
echo $host >> /etc/zabbix/alertscripts/1.log
echo $key >> /etc/zabbix/alertscripts/1.log
#/bin/sh /etc/zabbix/alertscripts/send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'zabbix' $1 "$key" 0 "$str"
./send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'yunwei-zabbix' $1 "$key" 0 "zabbix-test9" "告警内容:test-11199"


[root@zabbix-server alertscripts]# cat send-alarm.sh
#!/bin/sh

redisclient="/usr/bin/redis-cli"
#redisclient="/data/server/redis/bin/redis-cli"
#redisclient="/usr/bin/redis-cli"
redis_slave_server=""
redis_slave_port=""
redis_master_server=""
redis_master_port=""

function UpdateRedisSlaveAddr(){
  local s_addr=$1
  local s_port=$2
  for ser in "${sentinel_addr[@]}"
  do
    local info=`${redisclient} -h $s_addr -p $s_port SENTINEL slaves mymaster`
    redis_slave_server=`echo $info | awk -F" " '{print $4}'`
    redis_slave_port=`echo $info | awk -F" " '{print $6}'`
    if [ -n "$redis_slave_server" ]
    then
      break
    fi
  done
}

function UpdateRedisMasterAddr(){
  local s_addr=$1
  local s_port=$2

  for ser in "${sentinel_addr[@]}"
  do
    local info=`${redisclient} -h $s_addr -p $s_port SENTINEL get-master-addr-by-name mymaster`
    redis_master_server=`echo $info | awk -F" " '{print $1}'`
    redis_master_port=`echo $info | awk -F" " '{print $2}'`
    if [ -n "$redis_master_server" ]
    then
      break
    fi
  done
}

#{"notifyType":3,"level":1,"host":"10.0.333333333","subType":"cost","detail":"告警时间:2018-06-07 17:45:918\n广告主:测试更新流\n计划:测试审核Bann555554er\n订单:test\n告警内容:目标值已达到10.0%(7990)目标值已达到10.0%(7990)","department":1,"title":"order 190999 cost 告警","key":"20180621113123","status":0}
 
if [ $# != 8 ]
then
  echo "Parameter Erorr!"
  echo "eg: $0 NOTIFYTYPE  LEVEN SUBTYPE DEPARTMENT KEY STATE TITLE DETAIL"
  exit
fi

date=`date`

notify_type=$1
level=1
sub_type=$3
depart=$4
key=$5
state=$6
title=$7
detail=$2
host=`hostname`
echo $detail >> /data/z.log;
echo $detail > /etc/zabbix/alertscripts/detail.log
sed -i 's/\r//g' /etc/zabbix/alertscripts/detail.log
detail_file=/etc/zabbix/alertscripts/detail.log
#	keyword4=`ec | awk -F '告警内容:' '{print $2}' | awk -F '\\\r\\\n' '{print $1}' | awk -F ': ' '{print $2}'`
	keyword4="`cat $detail_file | awk -F '告警内容:' '{print $1}' |awk -F ':' '{print $3}'`"
	keyword3="`cat $detail_file | awk -F '告警时间:'  '{print $2}' | awk -F '告警' '{print $1}'`"
	keyword1="`cat $detail_file | awk -F '告警等级:' '{print $2}' | awk '{print $1}'`"
	keyword5="`cat $detail_file | awk -F '告警信息:'  '{print $2}' | awk -F '告警' '{print $1}'`"
	keyword2="`cat $detail_file | awk -F '当前状态:' '{print $2}' | awk '{print $1}' | awk -F ':' '{print $1}'`"
	
#detail_info="\"keyword1\":\"${keyword1}\",\"keyword2\":\"${keyword2}\",\"keyword3\":\"${keyword3}\",\"keyword4\":\"${keyword4}\",\"keyword5\":\"${keyword5}\""
detail_info="\"detailLevel\":\"${keyword1}\",\"detailType\":\"${keyword2}\",\"detailTime\":\"${keyword3}\",\"detailPostion\":\"${keyword4}\",\"detailBusiness\":\"${keyword5}\""
#detail="\"\""
####info####
#故障等级:{{keyword1.DATA}}
#故障类型:{{keyword2.DATA}}
#故障时间:{{keyword3.DATA}}
#故障定位:{{keyword4.DATA}}
#所属业务:{{keyword5.DATA}}
############	


#info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":\"$detail\",\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
#info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":$detail,$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
echo $info >> /data/z.log

sentinel_addr=(192.168.1.165 192.168.1.166 192.168.1.146)
UpdateRedisMasterAddr $sentinel_addr  26502
echo "Get Master: $redis_master_server $redis_master_port"

key="alarm:list"
echo "lpush $key $info"
result=`${redisclient} -h $redis_master_server -p $redis_master_port lpush $key  "$info"`
echo $result >> /data/z.log

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

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

相关文章

小剧场短剧影视小程序源码分享,搭建自己的短剧小程序

拥有一个属于自己的短剧小程序&#xff0c;是现代人追求创作梦想和与观众互动的新方式。近年来&#xff0c;小剧场短剧影视小程序的兴起为广大创作者提供了展示才华和与观众互动的平台。如果你也渴望搭建一个自己的短剧小程序&#xff0c;那么你来对地方了&#xff01;在本文中…

一个Python终端增强开源库

迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 简介 rich 是由 Will McGugan 开发的一个开源库&#xff0c;旨在提供更好的终端文本渲染和样式处理能力。它提供了丰富的文本格式化选项&#xff0c;包括颜色、粗体、斜体、下划线、对齐等。rich 不仅适用于命令行界面的美化&…

MYSQL 窗体汇总函数

如果我们想要汇总当天数据&#xff0c;当月数据&#xff0c;当年数据的。如果不懂窗体函数&#xff0c;可能会比较费劲&#xff0c;那小编就说了&#xff0c;我用java处理同样可以达到效果啊。可问题是。明明有现成的函数&#xff0c;为啥要用java处理&#xff0c;当然同时&…

【zlm】 webrtc源码讲解

目录 前端WEB 服务器收到请求 服务端的处理 播放 拉流 参考文章 前端WEB 服务器收到请求 POST /index/api/webrtc?applive&streamtest&typeplay HTTP/1.1 HttpSession::onRecvHeaderHttpSession::Handle_Req_POSTHttpSession::Handle_Req_POSTif (totalConte…

iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机?

iPhone苹果手机15机型区域版本识别代码 CH代码为国行 LL代码为美版 ZP代码为港版 iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机&#xff1f; 1、打开苹果iPhone15手机桌面上的「设置」&#xff1b; 2、在iPhone苹果15手机设置内找到「通用」并点击打开&…

MySQL修改时间添加时间自动更新

第一种: database.php设置 false改为true;然后看是使用的什么框架 如果是tp5需要数据库是create_time和update_time字段 laravel的话,需要的是created_at和updated_at字段 如果想自定义的话,就在model文件里加上 protected $createTime create_at;// 默认的字段为create_t…

腾讯mini项目-【指标监控服务重构】2023-08-01

今日已办 合并 Traefik 和 Profile 的 Trace 对 Traceparent Header 理解有误 Trace Context (w3.org) 故需要解析 TraceHeader 才能获取trace_id、parent_id func (profileCtx *ProfileContext) UnpackKafkaMessage(ctx context.Context) (needBreak bool, tpsStatus strin…

浅谈C++|模板篇

一.模板模板概念 模板就是建立通用的模具&#xff0c;大大提高复用性 模板的特点&#xff1a; 1.模板不可以直接使用&#xff0c;它只是一个框架 2.模板的通用并不是万能的 C另一种编程思想称为泛型编程&#xff0c;主要利用的技术就是模板。 C提供两种模板机制:函数模板和类模…

机器学习(14)---逻辑回归(含手写公式、推导过程和手写例题)

逻辑回归 一、逻辑回归概述二、模型、策略和优化&#xff08;手写&#xff09;三、w和b的梯度下降公式推导四、例题分析4.1 题目4.2 解答 一、逻辑回归概述 1. 逻辑回归也称作logistic回归分析&#xff0c;是一种广义的线性回归分析模型&#xff0c;属于机器学习中的监督学习。…

《Web安全基础》07. 反序列化漏洞

web 1&#xff1a;基本概念1.1&#xff1a;序列化&反序列化1.2&#xff1a;反序列化漏洞1.3&#xff1a;POP 链 2&#xff1a;PHP 反序列化2.1&#xff1a;序列化&反序列化2.2&#xff1a;魔术方法 3&#xff1a;JAVA 反序列化3.1&#xff1a;序列化&反序列化3.2&a…

vue移动端页面适配

页面的适配&#xff0c;就是一个页面能在PC端正常访问&#xff0c;同时也可以在移动端正正常访问。 现在我们可以通过弹性布局【Flexible布局】、媒体查询和响应式布局。除此之外&#xff0c;还可以通过rem和vw针对性地解决页面适配问题。 响应式布局 响应式布局的核心&…

【C++】day6学习成果

#include <iostream>using namespace std;template<typename T> class MyVector { private:T *p; //动态数组的首地址 用来保存数据int Size; //动态数组的元素个数int max1size; //动态数组的最大长度 public://无参数 - 构造一个空的ve…

react路由01——react-routerV6 中路由传递参数的几种方式

react路由01——react-routerV6 中路由传递参数的几种方式 1. 前言1.1 关于react- router&#xff0c;上官网1.2 react脚手架demo 2. 路由简单配置——无参数3. 路由传参方式3.1 params参数3.1.1 params参数——useParams钩子3.1.2 params参数——useMatch钩子 3.2 search参数3…

FFmpeg深入学习

文章目录 前言一、FFmpeg 基础指令二、FFmpeg 应用之视频播放器1、音视频播放流程2、音视频同步 三、FFplay 播放器1、FFmpeg 播放器的整体框架2、ffplay 的初体验及快捷键3、ffplay 模块划分4、ffplay 原理及流程 四、FFmpeg 编解码及转码1、FFmpeg 转码全流程简介2、FFmpeg 转…

某网站小说CSS反爬实战分析

由于是刚开始编写js逆向类型的文章&#xff0c;难免会有不详细之处&#xff0c;敬请谅解 本次的目标是hongshu网的小说接口&#xff0c;我们进入官网随意找到一篇小说后&#xff0c;打开网络请求&#xff0c;分析接口 如图&#xff0c;可以看到有个bookajax.do 的接口让人值得…

Postman使用_断言测试

断言测试可以在Collection、Folder和Request的 pre-request script 和 test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#xff0c;只有测试符合自定义的要求后才能通过。 pm对象提供了测试相关功能…

STM32 CAN使用记录:bxCAN基础通讯

文章目录 目的关键配置与代码轮询方式中断方式收发测试 示例链接总结 目的 CAN是非常常用的一种数据总线&#xff0c;被广泛用在各种车辆系统中。这篇文章将对STM32中CAN的使用做个示例。 CAN的一些基础介绍可以参考下面文章&#xff1a; 《CAN基础概念》https://blog.csdn.n…

uniapp运行到IOS真机提示 错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配

参考文章&#xff1a;请查看是否设备未加入到证书列表或者确认证书类型是否匹配 ios开发描述文件必须绑定调试设备&#xff0c;只有授权的设备才可以直接安装基座&#xff0c;所以在申请开发描述文件之前&#xff0c;先添加调试的IOS设备。 前往网站https://developer.apple.…

帧结构的串行数据接收器——Verilog实现

用Verilog 实现一个帧结构的串行数据接收器&#xff1b; 串行数据输入为&#xff1a;NRZ数据加位时钟&#xff08;BCL&#xff09;格式&#xff0c;高位在前 帧结构为&#xff1a;8位构成一个字&#xff0c;64字构成一个帧。每帧的第一个字为同步字。同步字图案存储在可由CPU读…

【自动驾驶决策规划】POMDP之Introduction

文章目录 前言Markov PropertyMarkov ChainHidden Markov ModelMarkov Decision ProcessPartially Observable Markov Decision ProcessBackground on Solving POMDPsPOMDP Value Iteration Example 推荐阅读与参考 前言 本文是我学习POMDP相关的笔记&#xff0c;由于个人能力…