文档章节

zabbix通过lykchat发送告警信息配置过程

l
 lykops
发布于 2017/08/04 09:05
字数 909
阅读 11
收藏 0

本文介绍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)

本文转载自:http://blog.csdn.net/liyingke112/article/details/75284676

l
粉丝 2
博文 297
码字总数 7445
作品 2
深圳
运维
私信 提问
Zabbix全方位告警接入-电话/微信/短信都支持

百度告警平台地址: http://gaojing.baidu.com 联系我们: 邮箱:gaojing@baidu.com 电话:13924600771 QQ群:183806029 对于使用zabbix的用户,要接入百度告警非常简单,只需要按以下四步骤...

百度告警
2016/01/13
3.3K
21
zabbix系列之邮件告警(三)

设置邮件告警有两种方式: 1)、通过Linux自带的mail发送告警邮件 2)、通过第三方邮箱发送(如QQ邮箱、163邮箱等)告警邮件 1、修改 zabbx_server.conf 文件,指定脚本路径,没有则添加 [roo...

LYuQuan
2017/12/24
0
0
zabbix设置邮件告警的两种方式(内部mail和脚本)

zabbix设置邮件告警的两种方式(内部mail和脚本) 2017年03月16日 18:03:51 阅读数:12121 说明: Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常。 实现...

linjin200
2018/06/14
72
0
Zabbix-3.2.3实现微信(WeChat)告警

Zabbix-3.2.3实现微信(WeChat)告警 Zabbix-3.2.3实现微信(WeChat)告警  Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbi...

Abcdocker
2017/04/17
0
0
Zabbix 3.2 报警关联邮件

1、 添加所需用户组,建立用户组,调用所需要监控的设备发送报警信息给用户组里的用户点击--管理--创建用户组 2、定义组名,点击--添加 3、用户组建立完成后,添加用户至管理组里面;点击--创...

DR_Bo
2017/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
41分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
14
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部