介绍企业级分布式监控zabbix的一些常用特性
本文主要从一个项目部署的角度一步一步来介绍zabbix的一些常用特性,希望对于那些想利用zabbix来做监控的初学者,能够在短时间内快速上手
前言
zabbix是一个基于WEB界面的提供分布式系统监控以及网络监视功能的企业级开源解决方案。zabbix能监视各种网络参数,保证服务系统的安全运营,并提供柔软的通知机制以快速定位/解决存在的各种问题,是系统运维的常用神器之一。
两周前,向老板提出自己的一个建议,想在我们自己的开发测试环境里,搭建一套zabbix系统,把Local的环境监控起来。之所以有这个想法,主要基于以下几点:
-
曾经多次花时间debug一些问题,最后发现是环境问题,如某个服务起不来,最后发现是磁盘空间不够,etc。很多时候重复的去做一些重复的事情,更加浪费人力和时间
-
产品的运维部在美国,production环境配备有一套完整的产品配置管理和监控系统(cfengine+zabbix)
-
通过Zabbix,可视化项目中各种KPI,出现故障时,能够有效的第一时间定位和分析
以前利用闲暇时间了解和简单用过Nagios,因为没有项目作支撑,没有深入研究,但对于系统监控有个基本的了解。这次研究和搭建zabbix基本没有花太多的时间。半天时间zabbix的安装和部署。一个星期不到完成zabbix的学习,项目监控。
网上搜索zabbix的文章一大堆,很多的都是把zabbix官网文档的某个特性,某个应用稍做翻译而已。感觉有点零散,不够系统。如果你想很深入的了解zabbix的特性,建议直接看zabbix官网的英文文档(http://www.zabbix.com/documentation/)。本文主要从一个项目部署的角度一步一步来介绍zabbix 2.2,希望对于那些想利用zabbix来做监控的初学者,在短时间内快速上手。
1 项目+zabbix
1.1 zabbix能做什么
简单点说,zabbix是一个监控数据的收集器和dashboard。监控数据中通用的数据可以由zabbix agent本身来负责收集。对于应用数据,需要应用本身提供。zabbix提供接口给第三方应用负责收集和做可视化。
zabbix能监控:
-
CPU负荷
-
内存使用
-
磁盘使用
-
网络状况
-
监控的各种应用KPI(产品环境下,这才是我们想用zabbix的真正原因)
-
...
1.2 zabbix常用术语
zabbix操作很简单,如果你能深入理解这些术语,甚至都不需要教程,主机web界面多点点,多玩玩。无师自通。
-
Host, Host group, User, User group
-
Item: host的监控数据定义最小单元
-
Application:包含Item。一组Item可以定义成一个Application
-
Trigger: 触发器,监控的Item达到一定的条件时触发
-
Template: 由Application, Item, Graph, Screen, Trigger等组成
-
Map:网络主机拓扑可视化
-
IT Service: 了解服务器的SLA情况
1.3 zabbix安装配置
zabbix server上安装zabbix-server组件,被监控主机上安装zabbix-agent, zabbix-sender
官网提供两种方式安装,任选其一即可。我比较倾向于从packages安装,简单快速(快一点一两个小时,慢一点半天到一天。)。由于每个安装环境不可能保证一样,难免会遇到些安装错误问题。一句话:有什么错误,直接google,你遇到的问题,别人早就遇到过了。
-
Install from packages: https://www.zabbix.com/documentation/2.2/manual/installation/install_from_packages
-
Install from sources: https://www.zabbix.com/documentation/2.2/manual/installation/install
1.4 创建用户组和主机监控组
zabbix安装好了后,打开zabbix web页面(http://ZABBIX-SERVER-IP/zabbix)。我们可以根据项目信息(项目组成员,项目中需要被监控的机器,etc)来创建用户组,用户,主机监控组,主机。创建用户组和主机监控组,是为了方便项目的扩展和管理。
1.4.1 创建主机监控组和主机
-
创建主机组入口:Configuration -> Host groups -> Create host group
-
创建主机入口:Configuration -> Hosts -> Create host
1.4.2 创建用户组和用户
-
创建用户组入口:Administration -> Users -> Create user group
-
创建用户入口:Administration -> Users -> Create user
将主机加入到主机组,将用户加入到用户组。制定用户组到主机组的读写权限。主机填写时,根据Host类型链接相应的template,如Template_OS_Linux(可以完成对主机CPU/Memory/Disk/Network的监控)
1.5 实现主机基本监控
接下来配置下被监控主机:
#vim /etc/zabbix/zabbix_agentd.conf Server = #ZABBIX SERVER IP Hostname = #创建主机时第一个元素Host name,不是主机的hostname
配置完后,重启zabbix-agent。通过zabbix web页面我们,我们可以看到该主机的一些基本监控信息(CPU/Memory/Disk/Network)数据了。该主机已经被监控起来了。
1.6 如何自定义监控数据
通过1.4我们已经实现了对主机一些基本系统信息的监控。这一节进一步扩展如果监控自定义的数据,如mysql的读写性能,项目中我们关心的一些组件KPI等。
常用的两种数据定义类型:zabbix agent和zabbix trapper。因此方法也相应的有两种。下面以监控磁盘/dev/sda的disk IO读写速度为例。
1.6.1 zabbix agent:UserParameter
-
创建监控item: Configuration -> Hosts -> Create item(主要选项如下)
-
Type => zabbix agent
-
Key => custom.vfs.dev.read.sectors[sda]
-
被监控主机上配置相应的UserParameter
</ul>
#vim /etc/zabbix/zabbix_agentd.conf UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'
实际项目中,可以把UserParameter写到/etc/zabbix/zabbix_agentd(根据Include可配置)的一个新文件。磁盘读速度通过一行shell脚本取得。对于复杂点数据的获取,可以编写相应的脚本完成。
重启zabbix-agent后,我们可以看到web页面已经加入了对用户自定义的磁盘/dev/sda读的监控。
1.6.2 zabbix trapper
与zabbix agent方式不同的时,zabbix trapper是由被监控机器主动向zabbix server发送数据。因此不需要安装zabbix agent。也不需要配置host。只需要发送数据即可。
-
创建监控item: Configuration -> Hosts -> Create item(主要选项如下)
-
Type => zabbix trapper
-
Key => custom.vfs.dev.write.sectors[sda]
-
被监控主机上,取得磁盘/dev/sda写数据后,通过zabbix_sender发送给zabbix server
</ul>
zabbix_sender -z ZABBIX_SERVER_IP -k custom.vfs.dev.write.sectors[sda] -o 数据值 -s 被监控主机Host name
zabbix_sender是zabbix项目中得一个客户端。这里,我们当然不一定需要通过zabbix_sender发送给zabbix server。我们可以自己写一个zabbix sender功能模块利用zabbix sender协议。这里有一篇很好的文章关于zabbix sender协议介绍和一个用Python实现zabbix sender的模块(http://itnihao.blog.51cto.com/1741976/1343670)。
1.7 批量导入监控数据
通过1.6,对于一般项目进行简单的监控基本没太大的障碍。实际项目当中,很多的监控数据脚本,监控数据定义可以拿来直接应用,没必要重新造轮子。还是拿磁盘disk io为例,监控数据的获取方法通用,我们没必要每个item都自己定义,自己获取。圈内很多好心人在网上把这些数据以模板方式共享。因此我们直接导入,然后把我们需要监控这disk io的主机链接这个模板就可以了。这样就可以完成zabbix server段批量数据的导入。这里有个很好的例子(http://www.muck.net/19/getting-hard-disk-performance-stats-from-zabbix)
1.8 数据可视化
通过web页面Monitoring下面的子项Overview或Latest data我们可以查看到最新和历史的监控数据。但总感觉还少了点什么,如果能够讲这些数据已图形,表格或者其他方式更加直观的方式显示就更好了。zabbix可以帮我们做到,把这些数据绘制成图形。
1.8.1 Create Graph | Create Screen | Create Slide shows
-
模板创建图形:Configuration -> Templates -> Graphs -> Create graph
-
Host创建图形:Configuration -> Hosts -> Graphs -> Create graph
-
创建Screen:Configuration -> Screens -> Create screen
-
创建Slide shows: Configuration -> Slide shows -> Create slide show
在模板里创建图形,每个链接了该模板的host都会自动加入创建的图形。
Host里创建图形,只有该Host才会加入该图形。
Screen是可以由Graph,issue, Map等组成。
Slide shows由Screen组成。
1.9 报警通知和采取行动
当你在用zabbix监控一个实际项目时。web界面有数据,有图形,看上去很美。但还不够。真正发现问题时,我们希望zabbix能够及时报警通知和采取一定的行动。当然,这些都是zabbix擅长的。
用户场景:
我们的某个应用A会在/log/下产生大量的log文件,慢慢的会把磁盘空间占满。我们希望zabbix能帮我们监控/log/下空间大小,当空间大小大于一定值的时候,我们希望能够收到一份email通知,删掉以前的log,只保留一份正在被写得log文件。
步骤:
-
创建一个监控/log使用空间的item。key = vfs.fs.size[/log,used]
-
创建一个trigger,关联上这个item,当使用空间大于给定的阈值时就回触发
-
创建一个action,把发送email和执行删除文件操作(Remote command)两个动作和trigger关联起来
具体创建trigger和action直接看zabbix官方文档,很简单。
总结
写着写着,突然发现没有附上一个截图。对于这种工具类型的文章,没图显然不够直观。回想这几天自己边学边用心得,当时其实更多的是希望有这样一篇项目向导性质的文章整体了解zabbix。一些具体的操作,对于一个搞IT的人来说,有针对性的看看官方文档,应该是一件很简单的事情。好吧,王婆卖瓜自卖自夸。不管怎么样。还是希望对想用zabbix来做监控的人有点帮助。
结合我们production环境里zabbix的配置和监控项目,本文从一个项目的角度来分享部分zabbix的特性,对于普通的项目,足够了。如果你想深入了解zabbix。请看zabbix官方文档。
来自:http://my.oschina.net/hjh188/blog/396546