node1:zabbix服务器
IP地址:172.16.4.100
node2:zabbix客户端
IP地址:172.16.4.101
配置环境:监控node2主机的网卡流量(流入、流入),以及报警和报警升级
文章概览
安装相关软件包
[root@node2 zabbix-2.4.5]# yum installzabbix-2.4.5-1.el6.x86_64.rpm zabbix-agent-2.4.5-1.el6.x86_64.rpmzabbix-sender-2.4.5-1.el6.x86_64.rpm
修改配置文件指明zabbix服务器地址
[root@node2 zabbix-2.4.5]# vim/etc/zabbix/zabbix_agentd.conf 85 Server=172.16.4.100 #设置zabbix服务器地址 137 Hostname=node2 #设置主机名
设置完成启动服务,如果可以正常监听10050端口说明服务正常
[root@node2 zabbix-2.4.5]# service zabbix-agentstart [root@node2 zabbix-2.4.5]# netstat -lnt | grep10050 tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN tcp 0 0 :::10050 :::* LISTEN
主机组介绍:
主机组主要用于对主机的分组操作,可以根据地域、业务、实现的功能等进行
创建主机组:
在 组态-->主机群组 -->创建主机群组,可以打开创建主机组页面,只需要填写主机组的名字,即可完成创建。
定义完成之后,就会出现在组态中的主机群组中
主机介绍:
主机是指网络上可以被监控的对象,包括物理机、虚拟机、路由器、打印机、java虚拟机进程等;不过需要注意的时,不同主机其支持的监控方式可能会不尽相同,如路由器交换机不支持zabbix agent就只能使用snmp协议监控,java虚拟机只能使用JMX监控方式。
创建主机:
定义一个监控的主机:在组态--> 主机 --> 创建主机可以打开如下界面添加主机
添加完成,就出现了node2主机,但是项目,触发器等都没有设置,需要在下面的过程中一个一个创建
应用集介绍:
应用集主要是对监控项的分组操作,可以根据一下标准划分。
基础监控:
cpu、memory、noprocs、nofiles、disk usage等
应用监控:
Tomcat、MogileFS、mysql、mysql等
运营数据监控:
如流量、注册人数等
应用集创建:
在组态-->主机--> 中选择要创建应用集的主机,点击应用集,进去后选择点击创建应用集,可以创建新的应用集
创建应用集特别简单,只需要输入名称,就可以添加了
添加完成这里就有显示了,以后在创建项目时,就可以将项目关联到应用集中
项目(item)介绍:
(1)项目是zabbix服务器用于监控一个特定对象上的一个特定指标,并负载针对其收集相关的监控数据;比如cpu每分钟的平均负载是一个项目,某特定网络接口接收报文又是一个项目。
(2)每一个项目都拥有相应的类型,例如“Zabbix agent”、“SNMP”、“External check”、“IPMI agent”、“SSH agent”、“JMX agent”等,Zabbix服务器会使用相应类型的协议或机制同被监控端通信
Item key介绍:
(1)每一个项目都有其专用的key;
(2)Zabbix服务器在与被监控端通信时就使用相应的协议或机制去询问被监控端这个key的值,被监控端则调用与此key对应的监控脚本获取数据并返回给服务器端;
(3)Key的命名只能使用“0-9a-zA-Z_-.”(引号中的内容)等字符,且可以 接受参数,其命令习惯如system.cpu.load[<cpu>,<mode>],其中,中括号中的内容为参数,且分别可以按次序使用$1、$2、…进行引用, 此示例中仅有两个参数;
zabbix有许多预定义的key,详细信息的获取地址:
https://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/zabbix_agent
定义一个项目:
在组态-->主机--> 中选择要创建项目的主机,点击项目,然后点击创建项目即可
设置相关参数,然后点击add就可以添加对应的项目
这里定义一个监控eth0网卡出站的流量
在添加一个监控eth0网卡流量入站的项目
添加完成如下所示:
补充:一些常用的监控项目
网卡流量相关:
net.if.in[if,<mode>] #入站流量 if:接口,如eht0 mode:bytes(字节), packets(包的个数), errors(发生错误的包), dropped(丢弃的包) net.if.out[if,<mode>] #出战流量 net.if.total[if.<mode>] #监控总量
端口相关:
net.tcp.listen[port] #指定监听的端口 net.tcp.port[<ip>,port] #ip+端口 net.tcp.service[service,<ip>,<port>] #指明监听tcp服务,ip,端口 net.udp.listen[port] #监听的udp地址
进程相关:
kernel.maxfiles #内核所运行打开的最大文件数 kernel.maxproc #内核允许运行的最大进程数
CPU相关:
system.cpu.intr #cpu中断次数 system.cpu.load[<cpu>,<mode>] #cpu负载 system.cpu.num[<type>] #cpu颗数 system.cpu.switches #上下文切换的次数 system.cpu.util[<cpu>,<type>,<mode>] #cpu利用率
磁盘IO或文件系统相关:
vfs.dev.read[<device>,<type>,<mode>] #设备读取 vfs.dev.write[<device>,<type>,<mode>] #设备写入 vfs.fs.inode[fs,<mode>] #监控inode可用量
点击主机列表中的图形,就会出现图形创建按钮,点击即可创建图形
定义图形参数,可以将多个项目的值定义在一张图形上面显示出来
设置完成对应的图形参数,不要急着点添加,可以通过预览功能查看,图形是不是自己想要的效果,然后再点添加不迟,下面就是刚刚定义的图形预览图,如果没有问题就点击添加。
2、1 触发器
(1)“监控项”仅负责收集数据,而通常收集数据的目的还包括在 某指标对应的数据超出合理范围时给相关人员发送告警信息, “触发器”正是用于为监控项所收集的数据定义阈值
(2)每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器;事实上,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能
(3)一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值
(4)一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将会转换为“Problem”;而当采取的数据再次回归至合理范 围内时,其状态将重新返回到“OK”
基本的触发器表达式格式如下所示
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:主机名称;
key:主机上关系的相应监控项的key;
function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行;
目前,触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、 now、sum等
parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次 取值之和;
此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
Operator:表达式所支持的运算付及其功能如下表所示:
在一个网络中,主机的可用性之间可能存在依赖关系:例如,当某网关主机不可用时,其背后的所有主机都将无法正常访问,如果所有主机都配置了触发器并定义了相关的通知功能,相关人员将会接收到许多告警信息,这既不利于快速定位问题,也会浪费资源,正确定义的触发器依赖关系可以避免类似情况的发生,它将使 用通知机制仅发送最根本问题相关的告警
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义
定义触发器,就需要写表达式及对应的项的值超过了指定标准就报告事件
生成后的表达式,如下所示,只不过添加的时候由于没有“>”所以是将“=”改为的“>”,严重级别定义,可以根据自己设置的值进行判断,这里定义为一般严重
在图形显示中,出现了触发器应该出现的线条,只要流量超过了这个线条,就会进行事件通知(需要定义报警动作)
示警媒介介绍:
在zabbix中,媒介指发送通知信息的通道,其通常有以下几种类型
(1)E-mail:电子邮件,即通知邮件的方式传送通知信息;
(2)SMS:手机短信,即通过连接至zabbix服务器GSM Modem发送通知;
(3)Jabber:jabber消息;Jabber是一个开放的、基于XML的协 议,能够实现基于Internet或LAN的即时通讯服务;
(4)自定义的通知脚本:以上方式不能满足需求时,zabbix可以调 用位于其配置文件“AlertScriptsPath”变量所定义的脚本查找 目录中的脚本来完成通知功能;
定义一个示警媒介:
定义一个示警媒介:在管理 -->示警媒介类型 中创建一个类型
定义一个本地发送邮件的示警,这里的示警方式选择邮件,邮件服务器选择本机,发件人设置为zabbix@localhost
这里定义用户主要是定义收件人地址,不做其他说明;邮件接收者是zabbix用户,其一般会有邮箱地址
创建用户:
在 管理-->用户 中选择创建用户
在用户界面填写,用户名,主机组,密码,等相关设置,具体设置看个人喜好
打开时间示警媒介页面,然后点击添加出现如下页面:定义类型为自己刚刚定义的localsend mail,收集人为root@local,时间7x24小时,接受各种信息的报警
设置完成示警,界面如下所示
许可权,这个界面可以不用管,因为用户的权限是应用与用户组的
2、4 动作
在配置好监控项和触发器之后,一旦正常工作中的某触发器状态发生改变,一般意味着有异常情况发生,此时通常需要 采取一定的动作(action),如告警或者执行远程命令等,并非所有的触发器状态发生改变的场景都需要对其进行干预, 如转变为“OK”状态时,相应地,如果触发器的状态转变为 “Problem”,就需要告知所有关心其相关监控指标的人员了。
实现zabbix的通知功能,一般需要两个步骤:
(1)定义所需的“媒介(media)”:通常指发送信息的途径,如邮件、Jabber和SMS等;
(2)配置一个“动作(action)”:发送信息至某“媒介”;
动作由“条件”和“操作”组成,它的逻辑为当“条件”满足时,就执行相应的“操作”“发送通知”和“执行远程命令”是两个最基本的操作
在组态-->动作中创建一个动作
定义如果有事件发生:发送邮件的格式,也可以启用恢复信息,表示一旦故障解决再次发送消息
定义触发条件,触发器的名字是指定的触发器时,就满足条件,计算方式与/或 只要A/B/C三个条件同时满足,就触发动作,发送邮件
定义动作操作:定义将邮件发送给那个用户,添加动作操作之后如下所示,如果没有问题,就可以点添加了
添加完成如下所示:
模拟流量的方法可以使用hping命令,持续ping上10秒左右流量即可突破触发值
[root@node1 ~]# hping 172.16.4.101 --faster
持续一会就会有事件发生,如果动作为正常,则表达邮件已经发送出去了
登录zabbix服务器,使用mail命令就可以查看收到的邮件
[root@node1 ~]# mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/root": 2 messages 2 new >N 1zabbix@localhost.loc Tue May 2623:32 23/1046 "PROBLEM: inbound traffic warning" N 2 zabbix@localhost.loc Tue May 26 23:39 23/1046 "PROBLEM: inbound traffic warning" & 1 Message 1: From zabbix@localhost.localdomain Tue May 26 23:32:00 2015 Return-Path: <zabbix@localhost.localdomain> X-Original-To: root@localhost Delivered-To: root@localhost.localdomain From: <zabbix@localhost.localdomain> To: <root@localhost.localdomain> Date: Tue, 26 May 2015 23:31:59 +0800 Subject: PROBLEM: inbound traffic warning Content-Type: text/plain; charset="UTF-8" Status: R Trigger: inbound traffic warning Trigger status: PROBLEM Trigger severity: Average Trigger URL: Item values: 1. inbound traffice (node2:net.if.in[eth0,bytes]):422936 2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN* 3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN* Original event ID: 165&
示例:监控web服务器80端口状态,如果检测到端口关闭,则发送启动命令给web服务器,如果还是无法启动则发送邮件报警。
被监控端需要开启运行服务器端执行远程命令
[root@node2 ~]# vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 #表示允许服务器端运行远程命令 LogRemoteCommands=1 #将运行的命令记录到日志中 [root@node2 ~]# service zabbix-agent restart
授权zabbix可以在所有主机运行所有命令
[root@node2 ~]# visudo zabbix ALL=(ALL) NOPASSWD:ALL #Defaults requiretty #默认开启,意思为所有sudo命令必须通过tty进行,而sudo是远程的所以需要关闭
定义一个新的监控项,监控http server
定义触发器
生成的表达式如下
定义完成之后,关闭node2主机的httpd服务,然后再zabbix监控的首页就可以看到相关的报警
创建一个动作
定义触发条件:
定义第一个触发操作为对被监控端发送命令
定义3~5步发送邮件
这个时候就定义好了
添加完成动作如下所示:
验证,关闭httpd服务,过上七八秒在查看状态就自动启动了
[root@node2 ~]# service httpd stop Stopping httpd: [ OK ] [root@node2 ~]# service httpd status httpd (pid 38884) is running...
在维护时间内的服务器发生故障,是不会报警的,定义方式如下
需要在报警条件中添加非在维护期间,否则还是会报警,不过此项默认就已经添加了
本文出自 “梅花香自苦寒来” 博客,请务必保留此出处http://ximenfeibing.blog.51cto.com/8809812/1670999
原文地址:http://ximenfeibing.blog.51cto.com/8809812/1670999