路漫漫其修远兮
吾将上下而求索

zabbix学习:监控项配置

zabbix配置入门(03)

一个监控项配置的基本流程:

host group –> host –> application –> item (simple graph) –> trigger (event) –>  action(condition, operation) –>  graph –> screen –> slide show

这里是一个示例,监控redis主机上面的系统状况:

创建用户组:configuration —- host groups —- create host group —- hostname: redis groups

创建hosts:configuration —- hosts —- create host —- host name: redis-14,命名方式:主机功能-ip的最后一位 —- visible name: visible-redis-14  为了查看显示区别,这里设置不同的名字 —- group: redis groups或者这里也可以直接创建新组,不需要上面的创建用户组操作 —- agent interfaces: 192.168.175.14,上一节定义的agent,多个主机可以继续加 —- 其他接口不填 —- description: monitor redis server —- monited by proxy: no proxy,后面再说代理模式,这里没有代理 —- add

注意:这里的hostname要和agent端配置里面的hostname保持一致,不然出错

创建item:configuration —- hosts —- visible-redis-14 —-items —- create item

Image 006.jpg

item创建好后,可以在:configuration —- hosts —- visible-redis-14 —- item 中看到创建的item

根据这个item可以创建多个item,进入刚才创建的item,最下面选择clone,可以克隆出一个item,编辑这个item就可以创建新的item了。创建出四个item,分别是入栈和出栈字节和包数

Image 007.jpg

这四个item都属于一个application,在application中可以看到这四个item

Image 005.jpg

查看显示的图表:configuration —- latest data —- eth0-in-bytes/s —– graph 就可以看到这个监控项生成的图表了

Image 001.jpg

选择图表右上角的选项:选择为:values,可以看到数据是每隔5s显示一个数据,表示设置结果是正确的

为网卡流量设置触发器,当达到设定的阈值的时候,会触发

设置:configuration —- hosts —- visible-redis-14 —- triggers —- create triggers

Image 002.jpg

expression图

Image 004.jpg

trigger配置页具体说明

name:指明这个trigger的名字,比如说磁盘使用量超过多少,流量速率超过多少,可用内存小于多少,等等,也是要见名知义

expression:表达式,指定触发的条件,是一个表达式,可用自己编写,比较难,一般是选择,选项设置好后会自动生成表达式,也可以在这个表达式基础上进行修改

        item:指定与哪个item有关,

        function:指明比较大小还是时间长短还是最近几次等,这里选择最近几次的值大于N就算触发条件

        last of:指明最近几次,还是最近多长时间,

        N:这里指定大于的值,这里是500,即最后一次采集的后计算的速率大于500就触发

severity:设定这个触发的严重级别

设定好后就可以在hosts界面看到添加的trigger,

查看图表显示:monitoring —- latest data —- eth0-in-bytes —-graph 可以看到设定的trigger界面是一条红线,超过红线表示触发动作,

Image 005.jpg

每一次触发都会产生一次事件(event),事件显示什么时候流量由正常转为异常,持续了多长的时间等信息,如果添加了action,可以知道事件产生后是否有动作(action)执行

Image 006.jpg

另一个示例:

        为了检验触条件作采取动作的执行结果,这里另外做一个示例:启用agent端httpd服务,监听80端口,当zabbix服务端检测到agent端80端口不在线的时候,认为这个服务出现故障,先采用zabbix server端远程执行命令的方式来重启httpd服务。如果检测端口还不在,再采用agent端执行命令的方式重启服务。如果还是不成功,则执行zabbix server端发送邮件脚本通知用户这个故障。

agent端配置:启用80端口

[root@localhost ~]#yi httpd
Package httpd-2.2.15-53.el6.centos.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]#service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]
[root@localhost ~]#ss -tnl
State      Recv-Q Send-Q     Local Address:Port      Peer Address:Port 
LISTEN     0      128                :::80              :::*

zabbix server端使用zabbix_get命令手动验证服务

[root@localhost ~]#zabbix_get -s 192.168.175.14 -k "net.tcp.listen[80]"    #agent端开启服务时返回数据
1
[root@localhost ~]#zabbix_get -s 192.168.175.14 -k "net.tcp.listen[80]"    #agent端关闭服务时返回数据
0

zabbix界面设置,新建一个item

Image 007.jpg

在monitoring —- latest data 中查看 graph

Image 008.jpg

为这个监控项设置一个trigger,如果这个item的最后一次采集结果为0,表示服务挂了

Image 009.jpg

设置描述,如果满足设置的条件,true,表示problem,

Image 010.jpg

然后就可以在triggers界面看到两个trigger

Image 011.jpg

将agent端服务停止掉,可以在zabbix监控的event界面看到触发的事件,如果多个触发条件产生了多个事件,可以开启过滤,只显示(port 80 down)这个事件

Image 012.jpg

将httpd服务重新启动,zabbix界面设置action

步骤:configuration —- actions —- create action  注意右上角的event source为triggers,事件源为triggers产生的

设定这个action 的名字和发邮件的默认的主题,正文,端口恢复了也发送邮件通知

Image 013.jpg

设定condition,即什么时候执行这个action,默认的关系是几个条件与的关系,即同时满足的时候执行操作,一个是非维护时间,一个是trigger的状态值为problem的时候,一个是指定哪个trigger,感觉每个阶段都是自定义的,之间没有什么关系,比如trigger和action,需要管理员将其关联起来,

Image 014.jpg

设定operation,默认的最小执行周期是一分钟,设定一个执行动作,这里是当触发trigger,产生action,在第一个周期内zabbixserver端远程执行命令,将服务重新启动,执行命令的主机时当前的主机,就是在condition中哪个主机的trigger,给哪个主机发命令,这个命令是在zabbixserver端发出的命令

Image 015.jpg

设定好后

Image 016.jpg

测试:在agent端将服务停止掉,然后查看事件

步骤:monitoring —- events —- trigger: port 80 down,可以在右边的action看到远程命令已经执行了,并且problem状态只持续了5秒钟的时间,5秒是发送数据的时间间隔,就是说刚把失败的消息发送到zabbix server端,就执行了远程命令将其重启了。

Image 001.jpg

        注意:有坑,在做实验的时候,发现有的时候命令能够执行成功,服务重新启动,但是有的时候,服务就启动失败,查找日志也没有明确的错误信息,只要命令有一次执行成功,就标明配置没有错误,然后看server端的配置文件,发现有timeout这个选项,说的是等待agent端的超时时间,默认是3s,感觉是这个参数过小了,因为server端执行远程命令要登录ssh,ssh登录的时候有的时候很快,这样执行命令就很快完成,但有的时候就十几秒才能登录上去,但是这里设置的是3s等不到执行结果就认为是超时,错误处理。然后把这个参数设置为30s,即30秒等不到结果才认为是错误,这样就解决了问题,连续几次都成功执行,配置文件还是要好好看

详细的配置:https://abnerzhao.gitbooks.io/zabbix/content/chapter2.html

### Option: Timeout
406 #   Specifies how long we wait for agent, SNMP device or external check (in seconds).
407 #
408 # Mandatory: no
409 # Range: 1-30
410 # Default:
411 # Timeout=3
Timeout=30

再进行更改

action的operation的命令执行方式中除了ssh外还有custom script方式,继续在zabbix的web界面中设置action,当检测到服务掉线后,先用远程命令执行,如果命令执行了,还是没有启动服务,就开始第二个action,服务端设置让agent端代server端执行命令,这里因为zabbix没有root权限,所以要使用sudo权限来执行root的管理命令。重启服务,当还是检测不到服务的时候,则执行脚本来发送邮件通知root用户

注意:要允许zabbix agent端能远程执行命令要在zabbix agent端的配置中设置,因为安全原因,默认为没有开启远程执行命令

[root@localhost ~]#vim /etc/zabbix/zabbix_agentd.conf	#允许执行远程命令
# EnableRemoteCommands=0
EnableRemoteCommands=1
[root@localhost ~]#systemctl restart zabbix-agent.service

但是zabbix没有权限执行root的操作,设置zabbix让agent端能执行sudo

[root@localhost ~]#visudo	#设置zabbix用户有root的所有权限				
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
zabbix  ALL=(ALL)       NOPASSWD: ALL
#Defaults    requiretty	#设置执行sudo命令的用户不要求有一个终端就可以执行命令,这个选项是centos7上面增加的,centos6上面没有

如果服务设置秘钥登录,这里要允许密码登录

[root@localhost ~]#vim /etc/ssh/sshd_config	#允许ssh用密码登陆
PasswordAuthentication yes
[root@localhost ~]#systemctl restart sshd

设置operation,这是第二步,增加的一步,与第一步的执行命令是一样的但是以另一种方式,是在agent端执行的脚本

注意:这里zabbix agent有root的所有执行权限,而且没有密码就可以登录执行命令,非常危险,最好确保通信过程是加密的,并且zabbix的登录密码设置复杂,或者限制zabbix的sudo权限

Image 003.jpg

接着再增加一步:发送邮件给:root@localhost用户,在媒介中定义一个媒介通道,只能用来发送本地邮件,zabbix发送给root,感觉用处不大

Image 001.jpg

将媒介添加到admin用户上面

Image 002.jpg

然后在action中添加一个操作,通知用户,通过localmail来发送消息

Image 003.jpg

增加第四步:通过脚本的方式给root发送邮件

        查看相关博文

为了能够检查四个步骤能否全部成功执行,这里将httpd的服务启动后,web界面显示正常,然后将httpd服务的端口修改为8080,这样即使能够重启服务,但是依然检测不到端口,然后可以看到每一步执行的效果

        现象

远程执行sudo命令有时候不成功,不知道为什么,另一个命令执行成功

localhost邮件发送成功

sendEmail有时候发送不成功,不知道什么原因

item:监控项:

配置页具体说明:

name:监控项的名字,命名最好能够见名知义,比如这是redis-14主机的eth0网卡的入卡流量,单位是字节每秒,能够通过名字就知道这个项是做什么的,
    因为在图表中主机名会显示出来,这里只用定义功能就可以:eth0-in-bytes/s
type:最常用的是zabbix agent和zabbix agent(active) 一个是被动,一个是主动,这里是被动模式
key:就是方程,这个监控项要想获得入栈的流量数据,怎么获取的,怎么让agent端知道你要什么数据,可以选择,在选择页先选择type,不同类型对应的
    key不同,这里的key都是系统自带的key,可以直接用,如果自己想获取的值这里没有,需要自己定义了。选择:net.if.in[if,<mode>]:需要修改为
    net.if.in[eth0,bytes],尖括号表示必填的,不带尖括号表示选填,不填有默认值,指定agent端的网卡名,读取bytes模式的数据,如果想获取多少
    包,模式为:packets,
host interface:主机接口
type of information:无符号数字,其他用到再说,还有浮点数,字符,字符串等其他选项
units:界面上显示的单位:B/s
use custom multiplier:自定义乘积:如果获取的数字需要乘以某个数字再显示出来,可以在这里设置
update interval:设定更新的时间,多长时间从agent端获取一次数据,这里如果不是非常紧急的数据,建议10s,30s或者更长时间获取一次,不然太频
    繁,数据库很快就会满了
custom intervals:自定义更新间隔:比如白天访问网站人多,5s更新一次,晚上人少,50s更新一次,这里设置后,将上面的固定更新时间删除生效
history storage period:历史数据时长
trend storage period:趋势数据时长
storage value:一个:接收到什么保存什么,一个:接收到这次数据减去上次数据除以时间,速率,一个:这次数据减去上次数据的差。这里接收到的字
    节是一直往上增长的,需要显示的是网卡的入栈速率,所以应该显示速率
show value:存什么显示什么
new application:监控项属于哪个应用,这个监控项属于流量监控应用

“监控项”仅负责收集数据,通常收集数据的目的还包括在某指标对应的数据超出合理的范围时给相关的人员发送告警信息,“触发器”正是为监控项所收集的数据定义阈值,
每个触发器仅能关联一个监控项,但可以为一个监控项同时使用多个触发器,事实上,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能
一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值
一旦某次采集的数据超出了此触发器定义的阈值,触发器状态转为“problem”,当采集的数据再次回归到合理的范围内时,其状态值将重新返回到“ok”。	

trigger:触发器:

逻辑表达式,阈值,通常用于定义数据的不合理区间; 条件满足时,TRUE,表示PROBLEM状态,反之,则OK状态; 

OK –> PROBLEM:由好转为有问题,触发事件

Recovery:PROBLEM –> OK,由有问题转为正常,恢复事件

{<server>:<item>.<fuction>(<parameters>)}<operator><constant>

触发器间可存在依赖关系;假如路由上有一组客户机,当路由故障的时候,监控上显示的这组客户机都有故障,监控的好坏依赖路由的健康。当某一台主机的很多项目都有问题,大范围的出问题,就考虑应该是某项基础设施出现问题,比如主机和交换机故障,主机上面的所有服务都会报警,

event:事件:

        事件并不执行任何的操作,只是显示触发器触发的时长,状态等信息,

media types:媒介类型:

报警信息的传递方式;

类型:

Email:邮件,需要定义发件人邮箱地址和SMTP服务器;

Script:自定义脚本,此脚本有发送信息至相关用户的功能;

SMS、Jabber、Ez Texting:没用

接收通知信息者为zabbix的用户:需要为用户定义对应各种媒介通道的接收方式;

localmail:

script:

zabbix配置入门(04)

Action:动作:

conditions:触发此动作的条件,一般通过“事件”触发;
operations:触发条件满足时要采取的动作;
	send message,功能:发报警信息给关联的用户;
		(1)可用传递方式:
			(a) Email
			(b) script:报警脚本,脚本完成后要重启服务生效
				位于server主机的AlertScriptsPath参数定义的目录下,默认为/usr/lib/zabbix/alertscripts;

				zabbix调用脚本时会向其传递参数;3.0之前的版本通过
					$1:消息接收人;
					$2:消息主题; 
					$3:消息主体;

				3.x之后的版本,此三个参数默认不再传递,需自行定义; 可以使用宏来模拟此前的行为:见下面的脚本
					{ALERT.SENDTO}
					{ALERT.SUBJECT}
					{ALERT.MESSAGE}

				注意:每个信息接收人相对于此媒介来说,得配置相应的接收地址;一个用户可以有多个邮件媒介通道

			发信息的信道:
				邮件
				脚本

	remote command
		功能:在agent所在的主机上运行用户指定的命令或脚本来尝试着恢复故障;例如:
				重启服务;
				任何由用户自定义的脚本;
		类型:
			IPMI:不常用
			custom script:常用 
			ssh :常用
			telnet :不常用
			global script :不知道

		custom script实现的前提:
			在agent端配置:
				(1) zabbix拥有执行相应脚本的权限;
					编辑/etc/sudoers文件,添加:
					zabbix  ALL=(ALL) NOPASSWD: ALL
					注释如下行:
					Defaults requiretty
				(2) agent进程要允许执行远程命令,编辑/etc/zabbix/zabbix-agentd.conf文件,设置
					EnableRemoteCommands=1
					重启服务生效;

zabbix的action中执行步骤和对应时间关系,第一步会立即执行,第二步是1分钟后开始执行操作

    1   2   3      :步数

0—1—2—3时间:分钟

zabbix让agent端执行sudo的设置

主机:172.18.1.21  agent客户端设置
[root@localhost ~]#visudo	#设置zabbix用户有root的所有权限				
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
zabbix  ALL=(ALL)       NOPASSWD: ALL
#Defaults    requiretty	#设置执行sudo命令的用户不要求有一个终端就可以执行命令

[root@localhost ~]#vim /etc/zabbix/zabbix_agentd.conf	#允许执行远程命令
# EnableRemoteCommands=0
EnableRemoteCommands=1
[root@localhost ~]#systemctl restart zabbix-agent.service

[root@localhost ~]#vim /etc/ssh/sshd_config	#允许ssh用密码登陆
PasswordAuthentication yes
[root@localhost ~]#systemctl restart sshd

主机:172.18.1.20
[root@localhost ~]#vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts	#报警脚本的位置,位于服务端

[root@localhost /usr/lib/zabbix/alertscripts]#cat sendmail.sh #在这里编写需要的脚本,这个名字就是zabbix上定义的名字,和输入的变量,第四步的脚本
#!/bin/bash

contact=$1
subject="$2"
body="$3"

echo "$body" | mail -s "$subject" "$contact"
[root@localhost /usr/lib/zabbix/alertscripts]#chmod +x sendmail.sh 
[root@localhost /usr/lib/zabbix/alertscripts]#bash -n sendmail.sh 
[root@localhost /usr/lib/zabbix/alertscripts]#bash -x sendmail.sh root@localhost "hello world" "hello everyone"
+ contact=root@localhost
+ subject='hello world'
+ body='hello everyone'
+ echo 'hello everyone'
+ mail -s 'hello world' root@localhost
[root@localhost /usr/lib/zabbix/alertscripts]#mail	#脚本手动测试成功
From root@localhost.localdomain  Tue Jan  3 12:56:51 2017
Return-Path: <root@localhost.localdomain>
X-Original-To: root@localhost
Delivered-To: root@localhost.localdomain
Date: Tue, 03 Jan 2017 12:56:51 +0800
To: root@localhost.localdomain
Subject: hello world
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R

hello everyone

[root@localhost ~]#systemctl restart zabbix-server.service

邮件发送还要再看,脚本发送邮件没有成功

展示接口:

graph:simple,custom;
screen:
slide show:

未经允许不得转载:江哥架构师笔记 » zabbix学习:监控项配置

分享到:更多 ()

评论 抢沙发

评论前必须登录!