[置顶] zabbix通过lykchat发送告警信息配置过程
本文介绍zabbix通过lykchat发送告警信息配置过程。
lykchat代码在https://github.com/lykops/lykchat/
步骤
编写脚本
1)、查看服务器端的配置文件etc/zabbix_server.conf的AlertScriptsPath变量,这就是告警脚本路径。
cat /usr/local/zabbix/etc/zabbix_server.conf | grep ^AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix/scripts
2)、把告警脚本send_alter.py放到/usr/local/zabbix/scripts下,并授予执行权限,chmod a+x send_alter.py。
请看附件中告警脚本例子
登陆zabbix web界面
配置“示警媒介类型”
新增告警类型
配置告警类型
配置用户发送告警信息
用户配置
为用户配置发送告警类型
配置动作
新增动作
配置动作
默认信息和恢复信息的内容:
{
‘IP’ : ‘{HOST.IP}’ ,
‘Hostname’ : ‘{HOSTNAME}’ ,
‘Host’ : ‘{HOST.NAME}’ ,
‘Event_Date’ : ‘{EVENT.DATE} {EVENT.TIME}’ ,
‘Event_Age’ : ‘{EVENT.AGE}’ ,
‘Event_Status’ : ‘{EVENT.STATUS}’ ,
‘Trigger’ : ‘{TRIGGER.NAME}’ ,
‘Status’ : ‘{TRIGGER.STATUS}’ ,
‘Trigger_Level’ : ‘{TRIGGER.SEVERITY}’ ,
‘Event_ID’ : ‘{EVENT.ID}’ ,
‘Trigger_ID’ : ‘{TRIGGER.ID}’ ,
‘Item_Name’ : ‘{ITEM.NAME}’ ,
‘Item_Key’ : ‘{ITEM.KEY}’ ,
‘Item_Value’ : ‘{ITEM.VALUE}’ ,
‘ITEM_LASTVALUE’ : ‘{ITEM.LASTVALUE}’
}
条件
操作
附录
shell脚本
如果使用shell脚本发送告警的话,需要这些调整。要点如下:
请把配置动作中的内容改为
‘{HOST.IP}’
‘{HOSTNAME}’
‘{HOST.NAME}’
‘{EVENT.DATE} {EVENT.TIME}’
‘{EVENT.AGE}’
‘{EVENT.STATUS}’
‘{TRIGGER.NAME}’
‘{TRIGGER.STATUS}’
‘{TRIGGER.SEVERITY}’
‘{EVENT.ID}’
‘{TRIGGER.ID}’
‘{ITEM.NAME}’
‘{ITEM.KEY}’
‘{ITEM.VALUE}’
‘{ITEM.LASTVALUE}’
然后根据参数变量进行修改,可以使用$*把所有的变量输出到一个文件进行调试。
把变量拼接成输出,在通用lykchat的发送信息url。
http://127.0.0.1/sendmsg?username=zabbix&pwd=123456&friendfield=1&friend=微信号&content=内容
告警脚本例子
告警脚本代码send_alter.py,内容如下:
#! /usr/bin/python
# coding:utf-8
# -*- coding : utf-8 -*-
import sys, time, requests
SEND_MESS_ID_LIST = re.split("," , sys.argv[1])
# web页面的发送者可以同时支持多个微信号,通过逗号分割。在web页面的管理-用户-用户中配置
VAR_LIST = sys.argv[3:]
EVENT_MESSAGE = {}
for VAR in VAR_LIST :
VAR = str(VAR).replace("\r\n" , "")
DICT = eval(VAR)
EVENT_MESSAGE.update(DICT)
# 参数过来的是数组,所以需要转化为字典
IP = EVENT_MESSAGE["IP"]
HOST = EVENT_MESSAGE["Host"]
TRIGGER = EVENT_MESSAGE["Trigger"]
STATUS = EVENT_MESSAGE["Status"].lower()
TRIGGER_ID = EVENT_MESSAGE["Trigger_ID"]
ITEM_NAME = EVENT_MESSAGE["Item_Name"]
ITEM_KEY = EVENT_MESSAGE["Item_Key"]
EVENT_ID = EVENT_MESSAGE["Event_ID"]
ITEM_VALUE = EVENT_MESSAGE["Item_Value"]
EVENT_AGE = EVENT_MESSAGE["Event_Age"]
EVENT_DATETIME = EVENT_MESSAGE["Event_Date"].replace(r"." , "-")
TRIGGER_LEVEL = EVENT_MESSAGE["Trigger_Level"]
if TRIGGER_LEVEL == "Not classified" :
TRIGGER_LEVEL = "Not_classified"
if STATUS == "ok" :
STATUS_CN = "恢复"
else :
STATUS_CN = "故障"
SEND_MESSAGE_LEVEL = ["High" , "Disaster"]
# 通过短信发送的报警信息的事件级别列表
SEND_MAIL_LEVEL = ["Warning" , "Average" , "High" , "Disaster"]
# SEND_MAIL_LEVEL = ["Not_classified" , "Information" , "Warning" , "Average" , "High" , "Disaster"]
# 通过邮件发送的报警信息的事件级别列表
TRIGGER_LEVEL_LIST = {"Not_classified" : "未定义" , "Information" : "通知" , "Warning" : "警告" , "Average" : "一般严重" , "High" : "严重" , "Disaster" : "灾难"}
TRIGGER_LEVEL_CN = TRIGGER_LEVEL_LIST[TRIGGER_LEVEL]
# 警告级别的中文
MESSHEADER_QINZHUI_LIST = {"Not_classified" : "注意" , "Information" : "注意" , "Warning" : "处理" , "Average" : "尽快处理" , "High" : "立即处理" , "Disaster" : "立即处理灾难"}
MESSHEADER_QINZHUI = MESSHEADER_QINZHUI_LIST[TRIGGER_LEVEL]
# 告警信息标题前缀
TIMEARRAY = time.strptime(EVENT_DATETIME, "%Y-%m-%d %H:%M:%S")
EVENT_TIMESTAMP = int(time.mktime(TIMEARRAY))
NOW_TIMESTAMP = time.time()
NOW_TIMESTAMP = re.split("\." , str(NOW_TIMESTAMP))[0]
NOW_DATETIME = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(NOW_TIMESTAMP)))
NOW_TIME = time.strftime("%H:%M", time.localtime(int(NOW_TIMESTAMP)))
# 转化时间
EVENT_TIEM = time.strftime("%H:%M", time.localtime(EVENT_TIMESTAMP))
# 故障发送时间
TIME_INTERVAL = int(NOW_TIMESTAMP) - int(EVENT_TIMESTAMP)
# 这次故障时间和现在时间差
if IP == "127.0.0.1" :
IP_END = ""
else :
IP_END = "-" + re.split("\." , IP)[-1]
def send_lykchat(SEND_MESS_ID) :
TRIG_MESS = HOST.replace(" " , "") + r"的" + TRIGGER.replace(" " , "")
VALUE_MESS = ITEM_VALUE.replace(" " , "")
if STATUS == "ok" :
SEND_CONTEXT = TRIG_MESS + r"在" + NOW_TIME + r"恢复,故障持续" + str(TIME_INTERVAL / 60) + "分钟" + r",值为" + VALUE_MESS
else :
SEND_CONTEXT = MESSHEADER_QINZHUI + ":" + TRIG_MESS + r"在" + EVENT_TIEM + r"发生" + TRIGGER_LEVEL_CN + r"故障,已持续" + str(TIME_INTERVAL / 60) + "分钟" + r"值为" + VALUE_MESS
SEND_CONTEXT = SEND_CONTEXT + "\nIP地址 : " + IP + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"主机名 : " + HOST + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"故障级别 : " + TRIGGER_LEVEL_CN + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"发生时间 : " + EVENT_DATETIME + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"持续时长 : " + str(TIME_INTERVAL / 86400) + "天" + str((TIME_INTERVAL % 86400) / 3600) + "小时" + str((TIME_INTERVAL % 3600) / 60) + "分钟" + str(TIME_INTERVAL % 60) + "秒\n"
SEND_CONTEXT = SEND_CONTEXT + r"目前状态 : " + STATUS_CN + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"触发器名 : " + TRIGGER + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"当前值 : " + ITEM_VALUE + "\n"
SEND_CONTEXT = SEND_CONTEXT + r"发送时间: " + NOW_DATETIME + "\n\n"
# 发送邮件正文
try :
url = 'http://127.0.0.1/sendmsg?username=zabbix&pwd=123456&friendfield=1&friend=' + str(SEND_MESS_ID) + '&content=' + str(SEND_CONTEXT)
requests.get(url)
except :
pass
for SEND_MESS_ID in SEND_MESS_ID_LIST :
send_lykchat(SEND_MESS_ID)
[置顶] zabbix通过lykchat发送告警信息配置过程的更多相关文章
- zabbix 使用邮件发送告警信息
配置系统mail命令,使其可以发送外网邮件 mail 命令配置 修改zabbix_server配置文件,使其可以执行告警脚本 [root@rexen etc]# vim /usr/local/zabb ...
- [置顶]
个人微信号发送zabbix告警信息
之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...
- [置顶]
zabbix告警信息-lykchat信息发送系统
lykchat信息发送系统 lykchat信息发送系统是Python3开发的,通过模拟微信网页端,基于个人微信号,为系统管理人员提供信息发送工具. 实现的功能有用户登录管理.微信登陆管理和微信信息发送 ...
- [置顶]
zabbix发送告警
之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...
- zabbix使用企业微信发送告警信息
用qq邮箱发送告警信息一点都不方便,看到网上说也可以使用微信发送告警信息,所以就试了一下. 首先先试着在虚拟主机上给微信发送信息. 我们需要注册企业微信,注册时有一个地方需要注意,就是注册时选择组织, ...
- Zabbix使用微信发送告警(附Python代码)
介绍 本文将介绍如何把zabbix告警接入到微信,通过微信企业号将告警信息发送到运维人员的微信上.本文适合于已经实现了邮件告警的小伙伴,因为需要在已经能实现告警的基础上进行,如果还不知道如何配置zab ...
- [置顶] oracle 快速查询数据库各种信息、及转换对应java代码
1 查询表中数据量 select 'select '||''''||t.TABLE_NAME||''''||' as table_name, count(*) from '|| t.TABLE_NAM ...
- [置顶] c# asp.net 修改webconfig文件 配置
c# asp.net 修改webconfig文件 配置 #region 修改config文件 /// <summary> /// 修改config文件(AppSetting节点) /// ...
- [置顶] 关于redhat系统yum源的配置1
安装过Linux软件的用户就知道,有时我们安装一个软件,需要依赖其他软件,所以必需找全所有的软件,这是一个极其麻烦的事情,有没什么方式可以让它自己去找依赖呢? 答案当然是肯定,这就需要我们配置一个神器 ...
随机推荐
- Nginx负载均衡的实现(初级)
不用nginx.conf,新建一个 fzjh.conf (名称自定义) 内容如下: user nobody; # 声明用户为nobody worker_processes 4; # 开启的nginx ...
- 【bzoj2079】[Poi2010]Guilds 构造结论题
题目描述 Zy皇帝面临一个严峻的问题,两个互相抵触的贸易团体,YYD工会和FSR工会,他们在同一时间请求在王国各个城市开办自己的办事处.这里有n个城市,其中有一些以双向马路相连,这两个工会要求每个城市 ...
- [AT2699]Flip and Rectangles
题目大意:有一个$n\times m$的$01$矩阵,可以把任意行或列反转,问最大的全为一的子矩阵的面积 题解:有一个结论:若一个子矩形$S$中的任意一个$2\times 2$的子矩形都含有偶数个$1 ...
- DP———6.两个状态之间的 处理
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- .com和.cn域名的区别所在,各个域名后缀含义
很多人在注册域名的时候不明白域名后缀的含义,在这里就介绍两种最为常用的域名,介绍下他们的区别以及适用的范围.需要先查询是否被注册,我们经常去的就是西部数据和万网,查询并注册未被注册的域名,一般无论是什 ...
- Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
生日蛋糕 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...
- [网络流24题] COGS 750 栅格网络流
750. 栅格网络流 ★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...
- Mybatis注解的使用
一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...
- 再议gluPerspective和gluLookAt的关系
http://www.cnblogs.com/chengmin/archive/2011/09/12/2174004.html 看了Opengl的相关程序,发现有些东西还是特别迷茫,尤其是gluLoo ...
- 动态符号链接的细节 与 linux程序的加载过程
转: http://hi.baidu.com/clivestudio/item/4341015363058d3d32e0a952 值得玩味的一篇分析程序链接.装载.动态链接细节的好文档 导读: by ...