- A+
这篇文章将会介绍怎样在zabbix中为主机添加一个监控项。
在本博客中,"zabbix"是一个系列文章,如果你还不明白zabbix的相关概念,强烈建议从zabbix系列文章中的第一篇开始阅读,否则你可能无法理解这篇文章中涉及到的部分名词。
zabbix系列文章列表直达链接:zabbix入门系列
前文中,已经描述了怎样在zabbix中添加主机,但是,我们并没有对主机进行任何指标的实际监控,那么现在,我们来说说,具体怎样监控我们想要监控的指标。
在具体操作之前,我们先聊聊理论,假设我们想要监控磁盘的使用率,在没有zabbix这种监控工具时,我们怎样监控呢,再或者,我们不仅没有zabbix这种监控工具,我们也不会写脚本,更不会写任何程序,我们该如何监控磁盘的使用率呢。没错,人工监控,当我们无法依赖任何工具或者脚本等外部助力时,我们只能不停的看着屏幕,查看当前磁盘的使用率,如果磁盘使用率达到了我们设定的阈值,我们就会作出相应的处理动作。即使我们是通过人工完成监控的,我们也要想办法能够获取到被监控目标的数据,比如我们想要监控磁盘使用率,那么我们就要不停的获取磁盘的使用率信息,以便我们能够随时的了解磁盘的空间使用情况,那么我们怎样获取磁盘的使用率呢,就拿centos为例,我们可能会通过如下命令,获取每个分区的磁盘使用率。
没错,我们通过命令,获取到了磁盘使用率的信息,当然,这个命令比较简短,方便我们从键盘键入,如果一条简单的命令,无法获取到磁盘使用率的信息呢,那么我们可能会通过一条稍微复杂的命令去实现监控,比如,如果我们只想要监控"根分区"磁盘使用率,我们可能会使用如下命令实现。
我们发现,获取监控信息的命令越来越长了,那么我们能不能尽量简化这些较长的命令呢,必须能啊,设置个别名不就行了,那么,我们把刚才的命令设置一个别名,直接执行命令别名试试。
可以看到,原本比较长的命令只缩减为了rdu三个字符。是不是比原来方便了许多呢,我们只需要三个字符,就能获取到根分区的使用情况。
这个时候,你可能会问,linux的命令别名与zabbix的监控项有关系吗,我们是来看怎么添加zabbix监控项的,不是来听你瞎BB的。
好吧,其实它们并没有什么关系,但是他们有一些类似的地方,比如,我们刚才做的工作,无非就是获取监控信息,需要获取监控信息,就要执行对应的命令,我们也可以通过别名,调用对应的命令,从而获取到我们想要或得到的监控信息,在zabbix中,我们要监控的某一个指标,被称为"监控项",就像我们的磁盘使用率,在zabbix中就可以被认为是一个"监控项"(item),,如果要获取到"监控项"的相关信息,我们则要执行一个命令,但是我们不能直接调用命令,而是通过一个"别名"去调用命令,这个"命令别名"在zabbix中被称为"键"(key),所以,在zabbix中,如果我们想要获取到一个"监控项"的值,则需要有对应的"键",通过"键"能够调用相应的命令,获取到对应的监控信息,我们暂且这样理解,方便我们入门。
好了,我们此处又提到了两个新的术语,我们来总结一遍:
监控项(item):某个监控指标,在zabbix中就被称之为一个item,某个主机中可能有多个需要被监控的指标,也就是说,某个host中可能有多个item
键(key 、item key):如果想要获取监控项对应的数据,则必须通过某个key去获取,我们可以把key想象成调用对应命令的"命令别名",zabbix中自带一些key,这些key往往比较通用,比如,通过这些key,我们可以监控cpu,内存,硬盘等常用指标,获取不同的指标信息,需要不同的key,但是如果这些自带的key无法满足我们的监控需求时,我们也可以自定义key,通过自定义key执行对应的操作,这些都是后话,我们 慢慢来。
好了,说了这么多,哥们儿你应该有点印象了,话接上回,我们已经在zabbix中添加了一台主机,现在,我们继续在这台主机上操作。
首先,打开我们zabbix控制台,点击 "配置" -- "主机" ,可以看到我们上次创建的主机,虽然我们为对应的被监控主机安装了agent,但是主机对应的ZBX仍然显示为灰色,代表我们还没有任何监控项被检测到,那么现在,我们来为testzbx1主机添加一个监控项。
点击testzbx1主机上的"监控项",,如下图所示位置。
进入监控项配置界面后,可以根据一些条件,筛选出已经存在的一些监控项,但是我们并没有任何监控项,所以此处,我们直接点击"创建监控项"按钮。以便新建监控项。
假如,现在我们想要监控testzbx1这台主机的CPU的上下文切换此处,那么我们可以在此界面进行如下配置。
首先,在名称文本框中设置监控项的名称,我们此处监控的指标为cpu上下文切换次数,所以,命名此监控项为"cpu context switches"
因为我们在testzbx1这台主机上安装了zabbix agent,所以,此处类型保持默认,选择zabbix客户端.
在键值一栏中,我们可以选择对应的key,也就是说,我们通过哪个key,获取到cpu的上下文切换次数的信息,所以,点击"选择"按钮,点击选择按钮以后,可以看到非常多的预先定义好的key,这些key都是zabbix自带的key,这些key一般都是系统级别的通用的监控项所能够用到的key,如果这些"键"不能满足我们的需求,我们则需要自定义key,这是后话,到时再聊,此处,我们选择system.cpu.switches
选择完成后,可以看到,key的值已经自动填充到了"键值"的文本框中。
在继续操作之前,我们来插入一段概念。
我们在介绍zabbix的概念时已经说过:管理员可以在server端使用一个名为zabbix_get的工具,测试是否能够从agent端拉取数据。
其实,我们可以先通过命令行,看看对应的"键"返回的信息到底是什么样子的。
我们在server端,使用如下命令,获取一下system.cpu.switches这个键对应的值。
上图中,我们在server端通过zabbix_get命令,使用system.cpu.switches这个"键",获得了192.168.1.107这台主机上的cpu上下文切换次数。
通过-s选项指定被监控主机的IP,通过-k选项指定对应的KEY,即可获得对应主机的对应监控指标的信息。
那么,我们多运行两次这个命令。
可以看到,cpu的上下文切换次数是在不停的增长的,而且返回的值是一个整数。
好了,回到我们的图形化配置界面,继续看我们的监控项配置。
我们就是通过agent接口监控数据的,agent监听在10050端口上,此处保持默认即可。
而我们刚才也看到了,通过zabbix_get获取到的system.cpu.switches的数据,都是一些十进制的整数,所以,信息类型选择数字,数据类型选择十进制。
数据更新间隔表示每隔多长时间获取一次监控项对应的数据,为了演示方便,能够尽快获取到数据,我们设定为每隔30秒获取一次监控信息,此处表示每隔30秒获取一次192.168.1.107主机的cpu上下文切换次数。但是需要注意,在生产环境中,如果不是特别重要的、敏感的、迅速变化的数据,不要获取的这么频繁,因为如果我们的监控项变得特别多时,获取信息的时间间隔过于频繁会带来巨大的监控压力,同时对数据库的写入也是一种考验。
当然,我们也可以灵活的定义时间间隔,比如,周一到周五我们的业务量比较少,可以10分钟获取一次数据,而周六周日的业务量会剧增,为了实时监控,可以设置5分钟获取一次数据,这里只是举个例子,如果有类似的需求,可以通过"自定义时间间隔"配置段,添加不同时间段的不同监测频率。
因为我们每隔30秒就获取一次数据,那么这些数据都会变成历史数据,存入数据库中,通过上图中的历史数据文本框,可以设置历史数据的保存时长。
上图中,我们设置历史数据保存8天,此监控项超过100天的数据将会被zabbix删除。
从上图中,还可以看到有一个趋势数据保存天数,趋势数据是什么意思呢?趋势数据就是每个小时收集到的历史数据中的最大值、最小值,平均值以及每个小时收集到的历史数据的数量,所以,趋势数据每小时收集一次,数据量不会特别大,一般情况下,历史数据的保留时间都比趋势数据的保留时间短很多,因为历史数据比较多,如果我们监控的主机非常多,而且监控的频率特别频繁,那么数据库的压力则会变得非常大。
继续向下看,可以看到存储值与查看值两个下拉框。
我们点开存储值下拉框,可以看到三个选项,不变、差量(每秒速率)、差量(简单变化)
那么,这些值都是什么意思呢,我们慢慢说。
不变:表示获取到的值是什么样子的,就在数据库中存储为什么样子。
差量(简单变化):表示本次收集到的信息值 减去 上一次收集到的信息值 得出的差值。
差量(每秒速率):表示本次收集到的值减去上次收集到的值以后,再除以两次收集信息的间隔时间。
而此处,我们监控的指标为cpu上下文切换次数,这是一个不断增长的整数值,所以,我们选择"差量(每秒速率)"最为合适。
这样我们就能够监控到不同时间段内cpu上下文切换的频率了。
那么查看值是什么意思呢?查看值可以改变监控数据的展示方式,以便监控人员更容易理解,此处我们保持默认即可,在实际用到时我们再做解释。
新的应用集 与 应用集 是什么意思呢?
我们可以把"应用集"理解为同一类型的监控项的集合,"应用集"英文原词为application ,application为一组item(监控项)的集合,比如,我们有3个监控项,它们分别监控"磁盘使用率","磁盘写入速率","磁盘读取速率",虽然它们监控的指标不同,但是他们都是监控"磁盘"的监控项,所以,我们可以把它们归类为"磁盘"应用集,同理,如果有2个监控项,一个是监控nginx连接数量的,一个是监控nginx请求数量的,虽然它们监控的指标不同,但是他们都是监控nginx相关指标的,所以,我们可以把他们归为nginx应用集。
但是,由于我们没有创建过任何应用集,所以上图中,应用集选择框中没有任何可选应用集,如果没有可选的合适的应用集,我们可以直接在"新的应用集"文本框中填入要创建的应用集名称,那么对应应用集会自动被创建,当前监控项也会自动归类为这个应用集。
继续聊,"填入主机资产纪录栏位"我们后面再聊。
描述信息栏填写关于这个监控项的相关描述。
"已启用"默认被勾选,表示此监控项被创建后,立即生效,即创建此监控项后立即开始监控。
好了,监控项的配置我们已经解释的七七八八了,示例配置如下,点击添加按钮, 注:为了更快的获取演示效果,此处将数据更新间隔设置为5秒,但是生产环境中请仔细考虑具体设置为多少秒比较适合生产环境的需求。
点击添加按钮以后,可以看到,testzbx1主机的第一个监控项已经被添加,而且处于已启用状态。
点击监控项旁边的"应用集"
可以看到,应用集中已经存在了cpu应用集,而且这个应用集中已经存在一个监控项,就是我们刚才创建的"cpu context switches"监控项。
我们已经创建了一个监控项,那么怎样查看这个监控项的监控情况呢, 点击 "监测中" ---- "最新数据",但是目前并没有展示出任何数据,因为我们还没有指定要查看哪些监控数据。
我们可以输入过过滤条件,过滤出我们想要查看的数据,比如,我们选择根据主机过滤,过滤出对应主机的对应的监控项数据。
从对应的主机组中找到对应的主机,
选择主机以后点击过滤。
点击过滤按钮以后,应该可以看到我们刚才创建的监控项,已经存在了部分数据,如果你刚刚创建完监控项,不要着急的立马查看"监控项"数据,因为它可能需要一段时间收集数据。
但是,如果超出正常收集数据的时间后,很长时间以内仍然无法收集到数据,那么有可能是因为agent端与server端时间不同步引起的,请确定你的agent端与server端的时间是同步的。
可以看到,"cpu context switches"这个监控项已经存在数据,我们点击对应的"图形"连接
点击上图中的"图形"连接,可以看到如下界面,zabbix已经监控到了对应的cpu上下文切换频率,并且绘制出了对应的"图形"。
从上图中,可以看到,zabbix除了为我们绘制出了图形以外,还显示出了最大值、最小值、平局值等信息,上图中,正常显示为中文。
如果你的界面不能正常显示中文,那么证明你没有上传中文字体,或者没有正确的配置显示字体选项,我们在 安装zabbix 的文章中已经描述了解决问题的过程,此处不再赘述。
我们已经为主机添加了第一个监控项,并且已经成功监控到了对应的数据,好了,我们已经入门了。

2018年12月28日 下午4:37 沙发
说起来,楼主,已经到第四篇了,我都没看到你关于防火墙部分的说明哦。端口不放行的话,agent是做不成功的吧?
2018年10月30日 下午4:57 板凳
博主,你好,请问zabbix3.4取消了原来的“存储值 ”功能,改成了Preprocessing,这样如何监控差值,官方文档说Delta和Delta per second 是用来监控差值的,但是我在Preprocessing界面根本没有看到Delta和Delta per second,请指教
2018年8月23日 下午5:13 地板
朱sir,别名那行写成这样会更让我们新手更容易理解 alias rdu=$(df -h | awk ‘$6~/^\/$/{print $5,$6}’)
2018年8月20日 下午5:47 4楼
捡到“葵花宝典”的感觉!
2018年6月14日 下午3:06 5楼
感谢博主,最近研究zabbix,结果server和agent都部署完了,监控的主机没数据,看了这篇文章发现原来是新建的主机没有添加监控项的原因
2018年1月22日 下午2:30 6楼
请问博主,我的页面部分字显示乱码是什么原因?具体是在最新数据的图形中,没有显示所有,最新,最小,平均,最大,都是口字。
2018年8月16日 上午11:24 1层
@大雨衣 。。。。。。。你这个是中文字符乱码。。。。。
2017年12月19日 下午5:08 7楼
您试试我的awk命令:df -h|awk -F ‘[ ]+’ ‘NR==2 {print $5,$6}’
2017年10月17日 下午3:27 8楼
朱哥,你好!我想请教一下,我安装的3.4.2版本怎么没有“数据类型”和“存储值”
2017年10月17日 下午5:30 1层
@bin_huhj 你好,3.4版本的没有用过,界面不太了解,不好意思没有帮到你~~加油~
2017年9月25日 下午6:27 9楼
Get value from agent failed: cannot connect to [[47.95.244.119]:10050]: [4] Interrupted system call
请问怎么解决
防火墙关了
代理配了
2017年9月25日 下午8:03 1层
@vh 直接通过 zabbix_get 试试,看看server与client的时间是不是同步
2017年9月25日 下午10:04 2层
@朱双印 zabbix_get -s ip地址 -k system.cpu.switches
zabbix_get [10790]: Timeout while executing operation
2017年9月25日 下午10:25 3层
@vh [root@iZ2zec9sxrqzrn491den8xZ zabbix]# telnet 47.95.244.119 10050
Trying 47.95.244.119…
telnet: connect to address 47.95.244.119: Connection timed out
可以ping 47.95.244.119
2017年9月26日 上午9:17 4层
@vh ss-tnl看agent的10050有没有监听
2017年7月17日 下午1:08 10楼
朱哥,我想请教一下,zabbix其他的中文都是正常的,就只有图形下面的这几个中文是乱码,就是 最新 最小 最大 平均 这几个字
2017年7月17日 下午1:23 1层
@leiyuhang 应该是字体问题,之前的文章中有替换中文字体的方法,可以参考一下
http://www.zsythink.net/archives/500
2017年7月17日 下午3:23 2层
@朱双印 按照您的方法改了字体之后就恢复正常了,感谢!
2018年6月12日 下午5:00 3层
@leiyuhang 你怎么改的,兄die 碰到跟你一样的问题了,我查看了配置文件没有上面博主说的zbx_FONT_NAME
2017年5月9日 下午1:15 11楼
朱哥好,关注您的日志有段时间了,您能不能讲一下如何用ZABBIX监控如交换机,防火墙这样的网络设备
2017年5月9日 下午1:51 1层
@广浩 兄弟,你好,谢谢你的关注。
监控网络设备时需要确定网络设备开启了snmp,同时,如果你是编译安装的zabbix,需要确保开启了–with-net-snmp
zabbix通过SNMP协议管理网络设备,大概思路是这样的。
我这边暂时还没有这方面的文章,不过我在网上搜索了几篇参考了一下,比较方便的做法是可以去官网根据设备厂商选择模板,导入模板后根据实际情况进行修改
模板地址如下
http://www.zabbix.org/wiki/Zabbix_Templates#External_template_resources
不好意思,兄弟,没有直接能够给你使用的参考文章,不过再次感谢你的关注~
2017年9月25日 下午4:27 2层
@朱双印 朱哥谢谢您的思路,我最近也在思考ZABBIX怎么监控网络设备,您这回复给了很好的一个领路多谢多谢
2017年9月25日 下午8:02 3层
@模子 客气了,文章能帮助到你我也是很开心的,加油~~~