一、说明
本文是继<LNMP环境部署zabbix实战>与<agent部署与zabbix web配置>的又一后续补充篇,众所周知做为监控系统主要就是数据采集,监控数据存储,再根据监控数据进行判断产生事件,进行报警通知管理员,同时经过展现接口进行数据的展现;本文主要关注zabbix的报警系统的实现及自定义脚本发送报警;
二、知识回顾
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监控系统支持分布式监控系统;node
三、实验重点与环境
对于部署好了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服务的状态感知报警系统的配置与做用!web
一、说明
zabbix报警系统是基于其余zabbix组件,并不是是独立的,关系以下图所示:apache
如上图所示,zabbix server经过item(可自定义) 从zabbix agent获取被监控端的各项数据,经过触发器trigger定义生成事件状态,知足条件后经过action处理,或发送邮件,或对目标主机远程执行命令!
二、发送报警信息的前提
a)配置发送信息的信道
管理-->管理媒介类型-->建立媒介类型-->如图:bash
注意:在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;app
任务以下:
测试当httpd服务故障时第一步尝试远程重启httpd服务,若是不能解决发送邮件给管理员,恢复时发送恢复邮件!
一、添加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 -->图形 如图:ssh
光有item项及收获的数据还不行,须要对这些数据进行定义触发器,当知足条件时发出报警;如定义针对httpd状态的触发器,当状态不是1时(即80端口down异常) 作出action动做,或远程执行命令,或发出邮件等信息报警通知管理员!tcp
二、添加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服务;一种是发邮件等信息通知到管理员!
三、添加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: <zabbix@localhost.san.com> X-Original-To: root@localhost Delivered-To: root@localhost.san.com From: <zabbix@localhost.san.com> To: <root@localhost.san.com> 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: <zabbix@localhost.san.com> X-Original-To: root@localhost Delivered-To: root@localhost.san.com From: <zabbix@localhost.san.com> To: <root@localhost.san.com> 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: <zabbix@zabbix.san.com> 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版本而且已经配置成中文,若有错误或遗漏之处,欢迎留言指正交流!谢谢!