触发器可根据监控项获取到的值来进行一些操作,如监控项获取到的values为0,触发器可判断为正常,如果获取到了1,就触发报警。

定义报警方式比较简单,但是用shell脚本实现起来,总是有格式问题,所以我用python语言写了简单的程序[发邮件,发到微信号上],zabbix运行python程序时,传入几个参数,即可根据参数内容定义发送的介质。

环境信息

zabbix server:
hostname=Zabbix server ip:192.168.100.7 zabbix agent: hostname=host3 ip:192.168.100.3

目标

对目前存在的监控创建触发器,根据监控项的值来判断要做的操作(查看这个监控项的创建过程:https://www.cnblogs.com/xiaodai12138/p/10159217.html)。

nginx_status    当nginx正常运行时返回0,如果不正常则反馈非0的数字

个性化发信配置过程概述

1.一个监控项

2.触发器匹配监控项的值,判断值符合触发条件,则触发报警。   #什么时候该发快递了

3.定义报警媒介类型               #一个快递单,上面固定了快递运输方式,但是发件人收件人,发的东西不是快递单定义的,但是快递单子上已经有了那几个空行,需要有人在空行里面填写发件人等信息。

4.定义用户报警媒介               #一个用户,他随时准备发快递,并且是他知道该发送给谁的。

5.定义触发器触发后的动作    #第二2项触发,发快递,自己包装快递内容,让谁发送这个快递(那个人知道快递该发给谁),并告诉那个人,你要把快递用顺丰(多个报警媒介类型,可定义不同的发信方式)发走。

创建触发器

#根据监控项的值做判断,触发错误

对nginx_status进行监控

下图是点击上图add后出现的页面,添加触发条件页面

创建完后保存即可。

报警媒介类型

#定义发信方式

*编辑server端配置文件,添加下方内容,并重启server端

#发信方式,我们使用脚本发信,脚本更灵活,没有限制,zabbix只需要将参数传给脚本,而不需要管脚本怎么做。

[root@ zabbix]# cat etc/zabbix_server.conf |grep ^AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix/shells/

#定义使用邮箱发信报警信息,那么使用邮箱发信,需要动态定义的必须有3个东西分别是:接收方,标题,内容,在下图中对应的分别是{ALERT.SENDTO},  {ALERT.SUBJECT},{ALERT.MESSAGE}

#使用此报警媒介类型,最终会执行send_mail.py脚本,并按照由上至下顺序给脚本传入3个位置参数,脚本内容如下

#send_mail.py  连接个人163邮箱,发送邮件至位置参数中的邮箱

#文中有部分区域,是需要自己填写的,填写你的发件邮箱。还有一些头部的信息。

#脚本需要chmox  +x 给可执行权限。

 [root@ shells]# vim /usr/local/zabbix/shells/send_mail.py 

 #!/usr/bin/python3
import smtplib,sys
from email.mime.text import MIMEText
from email.header import Header
server=smtplib.SMTP(host='smtp.163.com')
server.set_debuglevel()
server.login(user='1821114****@163.com',password='twgdhbtz****') send_to=sys.argv[]
title=sys.argv[]
input_msg=sys.argv[] msg=MIMEText(input_msg,'plain','utf-8')
msg['Subject'] = Header(title, 'utf-8')
msg['From'] ='from_zabbix<1821114****@163.com>'
msg['To'] = send_to server.sendmail('1821114****@163.com',send_to,msg.as_string())
server.quit()

send_mail.py

用户报警媒介

#定义一个用户,定义这个用户的联系人,凡是需要此用户发信的时候,都发信给对应联系人地址。

动作

#触发器被触发后,做什么"动作"

#实际作用:定义错误内容,关联发信方,使用哪种方式发信。

#默认定义的动作,是对所有的触发器生效的,如果想让某个触发器触发某个动作,需要在动作内根据粗发起名称做条件判断,本文不讲这个。

保存后让触发器条件不通过,从而触发动作。

[root@host3 [::]~]#service nginx stop
停止 nginx: [确定]

触发后,脚本执行成功。

然后启动nginx,在观察下错误状态。

[root@host3 [::]~]#service nginx start
正在启动 nginx: [确定]

恢复了

查看是否收到错误邮件和恢复邮件。

#3封错误邮件,每过1分钟发一次,还有一个恢复通知邮件。

到此,正常情况,你已经可以通过邮件发信了(如果不行,可以留言),我在使用邮件发信时,遇到了个问题,就是,我发邮件太频繁了,被屏蔽了,说我是垃圾邮件,那这种情况怎么处理,自建邮件服务成本太高,又不想去做邮箱提供商那所谓的充值提高信誉啥的,那就用微信来接收消息吧,主流聊天工具,每天看微信看得比邮箱次数还多,还能更快发现错误呢(需要一定的技术能力)。

更改报警媒介类型

#send_wechat.py脚本工作模式:获取zabbix传入的值,整合成为一个字符串,并放入mq中。

#放入mq中的话实现了解耦效果,没有更多的依赖性,zabbix只管放,另一个程序只管读,读取mq中内容并发送到微信好友微信上。

#标红区域修改过,避免机密信息泄露

#脚本需要chmox  +x 给可执行权限。

 [root@ shells]# vim /usr/local/zabbix/shells/send_wechat.py 

 #!/usr/bin/python3
import pika,time,sys
title=sys.argv[]
input_msg=sys.argv[]
messages="""Zabbix title:%s
messages:%s
"""%(title,input_msg) username = 'xiaodai12138'
pwd = 'twgdhbtzhy****'
user_pwd = pika.PlainCredentials(username, pwd)
connect=pika.BlockingConnection(pika.ConnectionParameters(
'47.94.133.***',credentials=user_pwd
))
channel=connect.channel()
channel.queue_declare(queue="zabbix_warning",durable=True)
channel.basic_publish(exchange="",
routing_key="zabbix_warning",
body=messages,
properties=pika.BasicProperties(delivery_mode=),
)
connect.close()

读取mq中内容发送到微信上的程序内容,我们简称wechat.py

#红色区域修改过

#python itchat模块,使用前需要使用  itchat.auto_login(hotReload=True) 来登录微信,执行到此时,你的桌面会显示出来一个二维码,用你的微信扫描二维码即可登录,同时,你电脑端登录的微信将会被挤下去。

#解耦的优点又来了,当你用微信扫描二维码,然后此程序会一直运行着,等待mq中有数据,如果有数据了,就自动发送,不用再次扫描二维码了,如果你直接让zabbix执行发送信息到微信的话,zabbix每次报警都会执行一次你的程序,你每次都要扫描二维码,如果不扫就登录不上,而且我还没试过在linxu上放下面这个程序。

#此程需要一直运行着,你随便把这个程序放在哪儿,没有限制,只要保证这个程序不down,当zabbix上有报警时,这个程序就会发送到微信上面。

import  pika,time
import itchat
##wechat
itchat.auto_login(hotReload=True)
users=itchat.search_friends(name='梦醒龙') #搜索朋友
username_chat=users[]['UserName'] #获取朋友在微信底层中存在的用户名
#mq
username = 'xiaodai12138'
pwd = 'twgdhbtzhy****'
user_pwd = pika.PlainCredentials(username, pwd)
connect=pika.BlockingConnection(pika.ConnectionParameters(
'47.94.133.***',credentials=user_pwd
)) channel=connect.channel()
channel.queue_declare(queue="zabbix_warning",durable=True) def callback(ch, method, properties, body):
warning_messages=body.decode('utf-8')
print("recv:",warning_messages)
print(username_chat)
itchat.send(warning_messages, toUserName=username_chat) #发送消息给朋友
print(itchat.get_friends(username_chat))
ch.basic_ack(delivery_tag=method.delivery_tag) channel.basic_qos(prefetch_count=)
channel.basic_consume(callback,
queue='zabbix_warning',
)
print(' [*] Waiting for messages.')
channel.start_consuming()

运行wechat.py,停止nginx,过1分钟后启动nginx,查看效果。

#会显示二维码

扫描登录后重启nginx,然后等待查看报警通知。

zabbix 定义触发器,并使用邮件,微信消息报警。的更多相关文章

  1. zabbix入门之定义触发器

    zabbix入门之定义触发器 触发器的概念 触发器的定义:界定某特定的item 采集到数据的非合理区间或非合理状态.通常为逻辑表达式. 逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下: ...

  2. 02.Zabbix⾃定义监控项

    1.zabbix⾃定义监控初试 如何获取系统中想监控对象的值,获取后⼜如何将该值传递给Zabbix-Server 1.1.监控系统中的对象 #(系统监控命令 + awk + 筛选条件 = 监控的状态值 ...

  3. zabbix实现企业微信监控报警

    一.zabbix基本说明 简介:zabbix基于Web界面的分布式系统监控的企业级开源软件.可以监控各种系统与设备,网络参数,保证服务器设备安全运营:提供灵活的通知机制.如果检测到的指标不达标,就实现 ...

  4. zabbix学习系列之QQ消息报警

    安装依赖包 环境 Zabbix: 3.2 OS:Centos 安装依赖包 yum install lrzsz chrony gcc gcc-c++ git openssl-devel perl-Ext ...

  5. zabbix系列(三)zabbix3.0.4微信告警配置详解

    一.准备工作 申请微信公众号,并且是可以有发送消息的接口.添加有个脚本去调用微信的api. 之后可以参考下zabbix 的搭建,然后了解下脚本报警,之后再考虑报警方式的多样化. 个人微信一个 个人邮箱 ...

  6. zabbix 配置外部邮件server发送邮件报警

    一.安装配置msmtp 1.下载msmtp wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.30.tar.bz2?big_mirror=0 ...

  7. C#开发微信门户及应用(2)--微信消息的处理和应答

    微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为计划的安排事情之一了.本系列文章希望从一个循序渐进的角度上,全面介绍微 ...

  8. 转 C#开发微信门户及应用(2)--微信消息的处理和应答

    微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为计划的安排事情之一了.本系列文章希望从一个循序渐进的角度上,全面介绍微 ...

  9. iOS 微信消息拦截插件系列教程-(总目录)

    微信iOS消息拦截插件教程 标签: 越狱开发 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 iOS逆向高级开发群:375024882 1 ...

随机推荐

  1. Apache老版本下载地址

    有时候我们想做测试或者使用旧版本软件时,往往发现官方网站已经下架,以Apache为例: Apache旧版本下载地址:http://archive.apache.org/dist/httpd/ .... ...

  2. Vue框架之初识

    介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式的ViewModel层,它连接视图和数据绑定模型通过两种方式.实际的DOM操作和输出格式被抽象的方式到 ...

  3. 【DRF框架】视图组件

    基于mixins视图类 from rest_framework import mixins # 创建视图 class CreateModelMixin(object) def create(self, ...

  4. Linux三剑客及使用介绍

    Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率.Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为"标准 ...

  5. 基于beautifulSoup进行电影网站排名的获取与格式化输出

    要求 编写代码完成以下任务: ① 将地址"http://www.cbooo.cn/year?year=2019"源代码使用任意方法保存到指定文件中(文件类型不限). ② 使用文件流 ...

  6. Windows——Office使用激活工具激活后仍提示激活

    问题: Office使用激活工具激活后仍提示激活 分析: 造成该问题的原因通常是未删除操作系统预置Office导致的, 解决方案: 调出运行,输入regedit打开注册表编辑器, 依次打开   HKE ...

  7. 用js刷剑指offer(二叉树中和为某一值的路径)

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  8. Docker那些事儿之镜像创建

    之前已经了解了docker的基本使用方式,简单的上手,也能让大部分人了解到这个技术的使用方法,今天继续说明docker如何构建自己所需要的镜像,开发人员掌握使用基础即可,有兴趣的可以自行深入研究 前言 ...

  9. python基础--文件控制

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  10. The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation

    链接: https://codeforces.com/gym/102394/problem/I 题意: DreamGrid has an interesting permutation of 1,2, ...