设为首页 收藏本站
查看: 1550|回复: 0

[经验分享] zabbix邮件报警及自定义脚本实战

[复制链接]
YunVN网友  发表于 2019-1-19 11:41:53 |阅读模式
一、概要
  1、说明
本文是继与的又一后续补充篇,众所周知作为监控系统主要就是数据采集,监控数据存储,再根据监控数据进行判断产生事件,进行报警通知管理员,同时通过展示接口进行数据的展示;本文主要关注zabbix的报警系统的实现及自定义脚本发送报警;
2、知识回顾
1)zabbix逻辑组件:
主机组(host groups)
主机(hosts)
应用(applications)
监控项(items)
触发器(triggers)
事件(events)
动作(actions):条件(conditions)和操作(operations)
媒介(media):发送通知通道;
通知(notifications)
远程命令(remote command)
报警升级(escalation)
模板(template)
图形(graph)
屏幕(screens)
幻灯(side show)
2)zabbix架构:

根据以上的组件及架构说明:
zabbix监控系统包括zabbix-server(服务端)用来收集分析展示监控数据,同时定义各监控项数据的触发条件,用于报警;zabbix-agent(监控端)用于收集所在设备上的监控数据(可自定义监控什么),监控数据既可以主动也可以被发送到zabbix-server进行处理;同时也可以执行远程命令;在zabbix-server与zabbix-agent之间添加了zabbix_proxy这个代理监控服务,使用得zabbix监控系统支持分布式监控系统;
  3、实验重点与环境
对于部署好了zabbix-server与agent并应用了对应的模块监控后,在web GUI上我们可以看到各监控的数据,对于出故障的服务我们需要提供报警通知管理的功能;因此本文主要讲述如何完善和自定义邮件报警功能;
zabbix-server: CentOS7.2_x64    172.16.3.152
zabbix-agent:  CentOS7.2_x64     172.16.3.216     httpd服务
测试当httpd服务故障时第一步尝试远程重启httpd服务,如果不能解决发送邮件给管理员,恢复时发送恢复邮件!通过对http服务的状态感知报警系统的配置与作用!

二、zabbix报警系统
  1、说明
zabbix报警系统是基于其他zabbix组件,并非是独立的,关系如下图所示:

  如上图所示,zabbix server通过item(可自定义) 从zabbix agent获取被监控端的各项数据,通过触发器trigger定义生成事件状态,满足条件后通过action处理,或发送邮件,或对目标主机远程执行命令!
2、发送报警信息的前提
a)配置发送信息的信道
管理-->管理媒介类型-->创建媒介类型-->如图:

  注意:在zabbix server上默认要安装有postfix服务无需要额外配置即可;以此为接下来的邮件发送测试服务器!实际当中这里配置购买的邮箱服务;自行搭建的服务器需要有备案的公网ip和邮箱服务的相关认证!
  b)添加收件人
管理 --> 用户 --> 报警媒介 --> 添加 --> 类型(localmail) --> 收件人"root@localhost" -->添加-->更新


  c)监控项item与触发器trriger
如有item需要有被监控端这里添加主机node2.san.com(172.16.3.216)如何通过web GUI添加,能主如何安装agent请参考之前文章;添加好被监控主机并应用监控模板即包含常规的application item以及trriger;

三、添加item监控项与触发器
  任务如下:
测试当httpd服务故障时第一步尝试远程重启httpd服务,如果不能解决发送邮件给管理员,恢复时发送恢复邮件!
1、添加httpd的监控项
本次针对node2.san.com 上安装httpd服务,通过httpd服务的监控完成,故障发生与恢复时产生的事件进行发送报警邮件
默认Linux监控模块没有自带监控httpd(apache),所以这里需要针该主机创建监控httpd tcp 80端口的item监控项;
配置-->主机-->node2.san.com-->监控项-->创建监控项 -->名称"web server status" -->键值"net.tcp.listen[80]" (可以选择其他的方式) 如图:

有了监控项(item)就有了从agent获取httpd状态的数据,以及默认的图形;
监测中-->最新数据-->找到node2.san.com中的 web server status -->图形   如图:

  光有item项及收获的数据还不行,需要对这些数据进行定义触发器,当满足条件时发出报警;如定义针对httpd状态的触发器,当状态不是1时(即80端口down异常) 做出action动作,或远程执行命令,或发出邮件等信息报警通知管理员!
  2、添加httpd的触发器trriger
配置-->主机-->node2.san.com-->触发器-->创建触发器-->名称"web server down" -->严重性"严重" -->表达式-->添加 -->监控项选择"选择web server status" -->功能"最新的T值 = N" -->最后一个T值 "计数" 并填写1   -->插入 如图:

最终表达式如下: {web service:net.tcp.listen[80].last(#1)}=0
如图:

  有了监控数据项,也有了对应的触发器,现在只剩下当触发器被触发时如何做了,换句话说就是httpd最后一次值是0时(即httpd服务down)如何做?这里就需要定义action动作了,action分两种,一种是远程执行命令,如重启httpd服务;一种是发邮件等信息通知到管理员!
3、添加action动作
动作:
配置-->动作-->创建动作-->名称 填写"Email" -->新的触发条件 "添加" -->选择web server down 触发器 如图:

操作:
配置-->操作-->默认操作步骤持续时间 "60"  -->默认接收人 "故障{TRIGGER.STATUS}:{HOSTNAME1}:{TRIGGER.NAME}" -->默认信息
"报警主机:{HOSTNAME1}
报警时间:{EVENT.DATE} {EVENT.TIME}
报警等级:{TRIGGER.SEVERITY}
报警信息:{TRIGGER.NAME}
报警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
  Item values:
Original event ID: {EVENT.ID}"--->添加     如图:

  操作-->新的 -->步聚 "1 - 1" 表示动作第一步 -->步聚持续时间 默认60s 可不修改 表示第一步处理时间 -->操作类型"远程命令" -->目标列表 添加"当前主机" -->类型-->自定义脚本 -->执行在 zabbix agent端 -->命令  "sudo systemctl restart httpd"--> 添加 如图:

  注意此处远程执行命令方式有多种:如ssh/telnet/IPMI/全局脚本/自定义脚本等方式;最为方便的是通过agent执行
但这里有两个前提需要在agent机器上配置/etc/sudoers
修改添加以下两项:
大约在56行 注释Defaults    requiretty  
添加:  zabbix  ALL=(ALL)       NOPASSWD: ALL
别一个前提是修改zabbix_agent.conf文件中的
EnableRemoteCommands=1
重启zabbix-agent服务
  操作-->新的 -->步聚"2-0" 表示第二步 即第一步没有 处理好 从第二步开始一直执行 -->步聚持续时间 默认60s 可不修改 表示第一步处理时间 -->操作类型"发送消息" -->发送到用户 "选择admin" -->仅送到" 创建的localmail 信道" -->添加 -->更新   如图:

  恢复操作:
配置-->恢复操作-->默认接收人"恢复{TRIGGER.STATUS}:{HOSTNAME1}: {TRIGGER.NAME} OK!" -->默认信息
"
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
" -->添加
最终action动作如下:

对恢复操作添加发送信息
恢复操作-->操作-->添加-->操作类型-->发送消息-->发送到用户-->选择 "Admin (Zabbix Administrator)" -->仅送到"localmail" -->添加-->更新    如图:


四、测试
  关闭agent 上httpd服务
[root@node2 ~]# systemctl stop httpd
查看zabbix事件信息
监测中-->问题   如图:

可以发现已经监测到httpd服务宕机了,并且第一步的远程执行命令成功~!
同时在zabbix server机器上通过命令行输入mail查看root邮件

[root@zabbix ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 9 messages 9 new
>N  1 zabbix@localhost.san  Fri Mar  2 16:33  22/983   "故障PROBLEM:web service:web server down"
N  2 zabbix@localhost.san  Fri Mar  2 16:40  21/906   "恢复OK:web service: web server down OK!"
&
1
Message  1:
From zabbix@localhost.san.com  Fri Mar  2 16:34:24 2018
Return-Path:
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
From:
To:
Date: Fri, 02 Mar 2018 16:34:24 +0800
Subject: 故障PROBLEM:web service:web server down
Content-Type: text/plain; charset="UTF-8"
Status: R
报警主机:web service
报警时间:2018.03.02 16:32:21
报警等级:High
报警信息:web server down
报警项目:net.tcp.listen[80]
问题详情:web server status:0
当前状态: PROBLEM:0
Item values:
Original event ID: 53&
2
Message 2:
From zabbix@localhost.san.com  Fri Mar  2 16:40:55 2018
Return-Path:
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
From:
To:
Date: Fri, 02 Mar 2018 16:40:55 +0800
Subject: 恢复OK:web service: web server down OK!
Content-Type: text/plain; charset="UTF-8"
Status: R
告警时间:2018.03.02 16:32:21
告警等级:High
告警信息: web server down
告警项目:net.tcp.listen[80]
问题详情:web server status:1
当前状态:OK:1
事件ID:53&

五、添加自定义脚本发送信息
  添加媒介
管理-->管理媒介类型-->创建媒介类型-->媒介名称"sentscript" -->类型"脚本" -->脚本名称"sentmail.sh" -->添加三个脚本参数"{ALERT.SENDTO}   ;   {ALERT.SUBJECT} ;   {ALERT.MESSAGE}"  分别表示收件人,标题,信息;    如图:

  添加收件人
管理 --> 用户 --> 报警媒介 --> 添加 --> 类型(sentscript) --> 收件人"root@localhost" -->添加-->更新
  修改httpd触发器中的第二步报警信息为sentscript
在管理--动作-->Email-->操作-->编辑2-0步 -->仅送到 修改为"sentscript" -->更新 如图:

  编写自定义脚本
在zabbix server上默认存放自定义脚本的目录在
  cat /usr/lib/zabbix/alertscripts/sentmail.sh

#!/bin/bash
contact=$1
subject="$2"
content="$3"
echo "${content}" | mail -s $subject $contact

  注意这里的脚本名称必须和媒介中的脚本名保持一致!
重启zabbix-server服务
  测试:
关闭node2.san.com上的httpd服务查看zabbix  信息
  如图:

  在zabbix service上命令行输入mail

[root@zabbix alertscripts]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
......省略.......
>N 15 Zabbix Monitoring Sy  Fri Mar  2 17:17  23/998   "故障PROBLEM:web"
& 15
Message 15:
From zabbix@zabbix.san.com  Fri Mar  2 17:17:17 2018
Return-Path:
X-Original-To: root@localhost
Delivered-To: root@localhost.san.com
Date: Fri, 02 Mar 2018 17:17:17 +0800
To: root@localhost.san.com, down@zabbix.san.com,
server@zabbix.san.com
Subject: 故障PROBLEM:web
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: application/octet-stream
From: zabbix@zabbix.san.com (Zabbix Monitoring System)
Status: R
[Binary content]

  说明我们算定义发送邮件脚本正常!

总结:
  本次通过对zabbix web GUI添加httpd服务的监控项,定义触发器,添加报警媒介,以及自定义脚本报警媒介;同时对报警做了分级处理;如第一次尝试远程命令恢复;再发送邮件到管理的一系列日常实用的报警配置!采用3.2版本并且已经配置成中文,如有错误或遗漏之处,欢迎留言指正交流!谢谢!




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-665154-1-1.html 上篇帖子: CentOS7.5下搭建zabbix3.4监控 下篇帖子: zabbix 故障长时间未解决的升级报警给上级领导
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表