Zabbix是一个企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利。官方网站:http://www.zabbix.com官方文档:http://www.zabbix.com/documentation/2.0/manual/quickstart。Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。
Zabbix运行条件:
Server:Zabbix Server需运行在LAMP(Linux+Apache+Mysql+PHP)环境下,对硬件要求低。
Agent:目前已有的agent基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows。
SNMP:支持各类常见的网络设备
1.2 Zabbix功能
具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的报表图表绘制)支持自动发现网络设备和服务器;支持分布式,能集中展示、管理分布式的监控点;扩展性强,server提供通用接口,可以自己开发完善各类监控。
1.3 优劣势
优点:开源,无软件成本投入;Server对设备性能要求低(实际测试环境:虚拟机CentOS5,2GCPU 1G内存,监控5台设备,CPU使用率基本保持在10%以下,内存剩余400M以上);支持设备多;支持分布式集中管理;开放式接口,扩展性强。
缺点:中文资料较少。
Server:指安装zabbix服务的服务器(以下简称服务器端),是最重要的部份,主要安装在linux系统上(支持多种操作系统),采用mysql存储监控数据并使用apache+php的方式呈现。
Agent:指安装在被监控设备上的zabbix代理(以下简称代理),被监控设备上的数据由代理收集后统一上传到服务器端由服务器端收集、整理并呈现。
SNMP:也是agent的一种,指支持SNMP协议的设备(也可以是服务器),通过设定SNMP的参数将相关监控数据传送至服务器端(大部份的交换机、防火墙等网络设备都支持SNMP协议)。
IPMI:Agent的另一种方式,主要应用于设备的物理性能监控,例如设备的温度、风扇的转速等。
Zabbix支持多种网络方式下的监控,可通过分布式的方式部署和安装监控代理,整个架构如(图一、图四)所示。
图一:架构图
图四:架构图
Zabbix安装后服务端默认的配置文件存在安装文件夹中的/etc中,假设编译的参数是“—prefix=/usr/local/zabbix”,那么服务端的配置文件则在“vi /usr/loca/zabbix/etc/”。如图二所示。
图二:配置文件
主要的配置文件两个:“zabbix_server.conf”负责服务器端的设定;“zabbix_agent.conf”用来设置客户端代理参数;“zabbix_proxy.conf”用来设定分布式的部署。
Zabbix_server.conf中的参数比较多,设定值的跨度也很大,这里仅列出常用的一些参数。如图三所示。Zabbix_server.conf参数除了保证服务正常运行外还涉及该服务器的性能,如果参数设定不合理可能会导致zabbix添加主机不正常、代理端数据无法正常收集或是zabbix服务器性能严重下降,经常报告CPU占用过高或是IO占用过高等问题。
图三:zabbix_server.conf
DBName=zabbix zabbix所属数据库名称 DBUser=zabbix zabbix所属数据库用户 DBPassword=www.xxxxxx.com zabbix数据库密码 StartPollers=30 轮询的初始值(0-1000) StartIPMIPollers=4 IPMI轮询的初始值(0-1000) StartPollersUnreachable=30 轮询不可达的主机数(包括IPMI 0-1000) StartTrappers=8 捕获的初始值(0-1000) StartPingers=4 ping的初始值(0-1000) StartDiscoverers=0 自动发现的初始值(0-250) CacheSize=384M 缓存大小 CacheUpdateFrequency=300 缓存更新的频率 StartDBSyncers=8 数据库同步时间 TrendCacheSize=128M 总趋势缓存大小 AlertScriptsPath=/usr/bin 脚本的存放位置 LogSlowQueries=1000 日志慢查询设定 |
Zabbix_agent.conf用来配置代理的参数,该文件中需要更改的地方比较少,仅更改几个常用的参数就行了(linux的agent和windows的都差不多,大同小异,以下的说明以windows为例)。如图五所示。
LogFile=c:\zabbix\zabbix_agentd.log 日志文件的存放位置 Server=192.168.0.189 zabbix服务器的IP Hostname=192.168.0.13 被监控机的IP |
需要注意的是代理端的设定参数“Hostname=192.168.0.13”要和配置时填入的主机名称一致,不然日志中将会报“host {主机名}not found”的错误。如(图六、七)所示。
图五:zabbix_agent.conf
图六:主机名不一致的错误提示
图七:填入正确的主机名
Zabbix需要在被监控的host上安装agent,在zabbix官网上下载相应平台的agent包到各被监控端,按如下方式在被监控上运行agent。(注:官网上下载的agent包里没有运行agentd所必须的配置文件,可以从zabbix server上拷贝一份zabbix_agentd.conf,这个conf文件是所有平台都通用的)
2.6.1 Linux Agent安装
Linux、UNIX上的agent是编译好了的,不用编译安装。(图八)
- useradd zabbix
- cd /usr/local/zabbix
- tar zxvf zabbix_agents_1.8.linux2_6.i386.tar.gz
图八:agent安装
取一份server上的zabbix_agnetd.conf到本地,然后按说明修改,一般我们只需修改2.5中的三个参数。修改完成后,运行agentd。
- /usr/local/zabbix/sbin/zabbix-agentd –c /usr/local/zabbix/zabbix_agentd.conf &
- ps –ef|grep zabbix_agentd
如果进程没起来,可查看agentd.log日志来排查问题。(注:启动时建议用全路径,否则可能会出错),加入开机运行。
- echo ‘/usr/local/zabbix/sbin/zabbix-agentd –c /usr/local/zabbix/zabbix_agentd.conf &‘ >>/etc/rc.local
2.6.2 Windows agent安装
Windows下解压客户端包到c:\zabbix,下载修改好的zabbix_agentd.conf文件也放到c:\zabbix,打开cmd命令行,执行:
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -i
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -s
安装后会在系统服务里添加一个zabbix_agentd服务(图九),会自动开机运行。如果需要将卸载客户端,请执行(图十):
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -x
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" –d
图九:zabbix agent服务
图十:zabbix agent服务卸载、安装命令
Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况。系统默认的图标比较简陋,如图十一所示。通过更改系统自带的图标让监控显示更加直观、方便(图十二)。
首先下载Icon图标,通过http://www.zabbix.com/forum/attachment.php?attachmentid=1855&d=1239079235下载图标库并压至相关目录。
图十一:默认的maps图
图十二:新maps图
- unzip zabbix_icons_set_generic.zip
- unzip make_img_insert_sql.sh.gz
- sh make_img_insert_sql.sh ./48 1000
- mv my_images_mysql.sql my_images_mysql_48.sql
- sh make_img_insert_sql.sh ./128 2000
- mv my_images_mysql.sql my_images_mysql_128.sql
- cat my_images_mysql_48.sql |mysql -u zabbix -p zabbix
- cat my_images_mysql_128.sql |mysql -u zabbix -p zabbix
指令执行后可能出现128_g_router_off.png、128_g_router_on.png、128_g_router_unknown.png这三个文件的错误提示,对于这三个文件可以直接通过web方式更改提交。
短信提醒功能(图二十)可以让运维团队在第一时间了解故障,让系统管理人员快速定位、解决故障。以下是详细步骤:
3.2.1 新建短信发送脚本
对于可以通http方式发送短信的方式都可以参考该脚本,这个例子中日常的短信发送都是通过windows平台发送,这里把它转换成了linux下可用的脚本(图十三)。这里通过“curl”指令来实现http的操作,随后通后“iconv”指令实现编码转换(utf8转gbk编码),否则可能出现收到短信是乱码的情况。
需注意的是该脚本的存放位置要和2.4中的脚本存放位置一致。
- #!/bin/sh
- IFS=""
- sms="http://x1.xxxxxxxx.cn/gbk/interface/send_sms.aspx?username=xxxxxx&password=yyyyyy&receiver=$1&content=$2,$3"
- echo $sms|tr ' ' '.'|iconv -f utf8 -t gbk >/tmp/sendsms.in
- cont=`cat /tmp/sendsms.in`
- curl $cont -s -o /tmp/sendsms.log
图十三:sendsms.sh图
3.2.2 增加报警方式类型
进入zabbix的WEB管理页面,在“Administration”---“Media types”,新建一个告警方式类型,描述栏填写“message send by mobile”,类型栏选择“Script”,Script name栏填写“sendsms.sh”,勾选“enable”单击保存按钮。(图十四)
图十四:media types图
3.2.3 增加报警通知的用户
进入zabbix的WEB管理页面,在“Administration”---“Users”—“Create user”进入新建用户页面,在该页面中选择“Media”选择新建报警类型“add”。设置告警方式为“message send by mobile”,在send to栏中设置接收报警的手机号码,在相应的栏中设定事件的等级(N未分级、I信息、W警告、A平均、H高、D害难)和工作时间,点击保存。(图十五)
图十五:user图
3.2.4 增加报警动作
进入zabbix的WEB管理页面,在“Configuration”---“Actions”—“Create action”进入新建动作页面,在该页面中共包含三项目内容:
“Action”指报警动作的名称、报警周期、标题、详细内容及故障恢复时的报警标题和内容。这里需要注意的是标题和内容不能太长,不然一条短信无法定远整显示(图十六、十七分别表示action默认的内容和精简后的内容)。在标题和内容中都可以使用zabbix中自定义的宏。常见的宏有以下内容:
{HOST.CONN} 主机IP地址 {TRIGGER.NAME} 触发事件名称 {TRIGGER.STATUS} 事件触发状态 {TRIGGER.SEVERITY} 事件触发级别 {ITEM.NAME1} 监控项的名称 {ITEM.KEY1} 监控项的参数 {ITEM.VALUE1} 监控项目的值 |
图十六:默认action图
图十七:修改的action图
“Conditions”指满足条件的主机。“Type of calculation”指的是条件的集合,分为两种:“AND”指条件必须同时满足,“OR”指满足其中的一个条件就可以。“Conditions”指满足条件的主机。图十八所表达的意思是:“当主机的状态不是“维护”并且主机已经触发“问题”并且主机组等于“project3 group”时的所有设备”。
图十八:报警条件
“Operations”指对于满足条件的主机所采取的操作(图十九)。选择正确的发送周期“step”,默认为0,“operation type”指的是操作方式,可选择发送信息和执行远程指令;“send user groups”指发送的用户组;“send to users”发送到的用户;“send only to”采用的具体发送方式。
图十九:报警操作
以上的这些设定好后就点“save”保存,当满足条件的主机触发报警时相关的用户就会收到短信提醒(图二十)。
图二十:短信提醒
Host是Zabbix监控的基本载体,所有的监控项都是基于host的。通过Configuration->Hosts->Create Host来创建监控设备(图二一)。
图二一:HOST
按提示填入Host name、Groups、IP ,其他选项默认即可,Link Templates 处选择一个模板,save即可成功添加设备。(注:如果host上没安装agent,添加后的状态会是unmonitor,会采集不到值,Zabbix自带大量的设备监控模板,我们添加主机时通过link到这些模板,就可以快速添加主机的监控项和告警触发条件。)
一类的hosts可以归属到同一个Host Group,便于分类管理同一类设备,在Configuration->Host Group->Create Host Group 可以添加设备组。
Item是监控项,是监控的基本元素,每一个监控项对应一个被监控端的采集值。(图二二、二三)
在Configuration->Hosts界面,我们能看到每个host所包含的items总数,点击对应主机的items项,可以看到具体的每个item信息,这些items可以引用自templates,也可以自己创建。
图二二:ITEM
通过点击具体item名字可以修改已有监控项的属性,点击Satus的链接可以禁用/启用这个监控项。(注:我们可以通过新建一个template,在template中禁用掉所有不需要用到的items,然后把同一类hosts link to这个template,就不用一台台主机去更改items)新增item可以通过点击右上角的create item来创建。
图二三:ITEM图
按提示逐项填入相关信息即可,其中key是zabbix已经自带的取值方法,Application类似于host groups,是item的组。(item key也可以自定义,后面会讲到如何自定义监控项)。
Trigger是触发器,当Items采集值满足triggers的触发条件时,就会产生actions。(图二四、二五)每一个trigger必须对应一个item,但一个item可以对应多个trigger。
同样,通过点击Configuration->Hosts->Triggers中某个trigger的名字,可以修改trigger的属性。(注意:引用自template的trigger触发值是不能单独修改的,必须在template中修改,或是复制一个同样的trigger再修改,然后禁用掉之前的)新增trigger可以通过点击右上角的create trigger来创建。
图二四:Triggers图
图二五:Triggers图
Expression中选择对应的item、触发方式及触发值,Severity是告警级别,根据trigger的严重性来选择。Zabbix 提供多种trigger触发方式供选择,常用的我们可以选择last value </>/=/#/N(最近一次采集值),或是选择maximal value for period of time (一段时间内的最大值),等等。可以根据实际需要来设定触发方式。
Zabbix的Graphs功能很强大,可以为每一个item绘制图表,也可以把多个items绘制在一张图表内。通过configuration->hosts选择要绘制图表的host,点击graphs,create graphs即可创建图表。(图二六、二七)
图二六:graph图
图二七:graph图
Graph type:图表样式,有线状、柱状、饼状;还可以自定义图表大小,及Y轴最大最小值;通过add items可以添加在同一个图表中展示的多个items(注:注意每个item的颜色及取值范围,范围相差太大图表会显示不全);配置好的graphs在monitoring->graphs中查看。在monitoring->last data下能快速查看每个host的每个item的graph。
Screen将多种信息放在一起展示,便于集中展示某个host的多个信息,或是比较多个hosts的同一种信息,这些信息可以为graphs、maps、server infos等等,几乎涵盖zabbix所有的监控信息。(图二八、二九)
通过configuration->screen->creat screen来创建,创建时定义screen的行数和列数,点击对应单元格内的change,添加相应的信息。
图二八:screen图
图二九:screen图
通过monitoring-screen,可以查看之前配置好的信息。
这里可以添加关于主机的拓扑图:configration-maps,在右上角可以create maps或者import map。这里我们点击crate maps 点save保存。(图三十、三一)
图三十:maps图
图三一:maps图
Zabbix snmp的监控要在configration 中hosts中添加相关主机和snmp设备IP地址,一般用snmp监控网络设备就可以了。(图三二、三三)在我看来zabbix 对server的监控一般是用agent来做的,所以zabbxi不建议用snmp对server监控,这一点和cacit有本质的区别,因为cacti主要是通过snmp对主机和网络设备进行监控的。
图三二:SNMP图
图三三:SNMP图
如果有大量的同一类设备,需要监控的信息也大致类似,一个个去修改相关参数比较麻烦,我们可以通过创建一个template来简化操作。(图三四)
Configuration->Host Groups->Template->Create Template。创建template后,在configuration->host->template下找到刚创建的Template_MicrosoftSQLServer2008,修改相关的items、triggers、graphs等信息,使满足要求后link到相关的host即可。
图三四:模板图
在zabbix中关于报表的功能有三项:Avaliability report:(图三五)整个系统可用的系统报表提供过滤功能。
图三五:avaliability report图
Most busy triggers top 100:(图三六)提供最常用的triggers 预览。
图三六:triggers top 100图
Bar report :(图三七)可定制报表可以报多个报表整合到一起。
图三七:bar report图
Zabbix提供将所有配置导出为标准XML格式的文件,同样,也支持导入标准格式的XML配置文件。
通过configuration->Host->Export,勾选要导出的host,选择export即可导出xml文件到本地。(图三九)
图三九:export图
Import可导入本地的XML文件,注意格式一定要符合标准要求,如果server上有同名的配置,会被覆盖掉。(图三八)
图三八:import图
如果有大量的配置需要手动新增,譬如新增oralce监控,我们可以手动编写xml,一次导入所有的items和triggers,但要注意格式,可自己导出一个配置后参考。
Item是zabbix中最小的监控单位,相关的数据都由item提供。在item项中,最重要的是“Key”项,该项提供具体的监控点(图四十)。这里有几个重要的值,分别如下:
type 监控类型(有zabbix agent、snmp、jmx等) key 监控值(对于windows监控点使用perf_counter前缀) type of information 信息的类型(数值型、字符型、日志型、文本型等) data type 数据的类理(整数型、浮点型等) Units 单元(例如B=Byte) Update interval 数值的更新周期 |
图四十:item图
可以通过zabbix_get指令来获取被监控设备的数据值(图四一)。其中:-s指定需要取值的客户端;-p指定通讯端口;-k指定具体的键值。
图四一:zabbix_get图
理论上只要是windows性能监视器可以查看的值,通过zabbix都可以监控到,但是对于不同的服务器安装的同类应用有可能存在监控键值不一样的情况,在windows系统下通过指令typeperf可以导出windows所有的监控键值(图四二、四三、四四)。
图四二:typeperf图
图四三:sql2005图
图四四:sql2008图
Windows主机的监控可以参考图四三、图四四所导出来的监控点,在新增的item中新建key,格式为“perf_counter【监控值】”(例如perf_counter[\Processor(_Total)\% Processor Time]),图四五是参考SQL2005模板结合导出的监控点文件整理的SQL2008模板,请重点对照Key项。
图四五:sql2008模板图
通过更改zabbix的配置文件可以控制zabbix的页面显示内容,在zabbix初始安装完成后,管理界面上的“configuration”中还有一个页面是“install”选项,存在误操作重新安装的风险,通过修改menu.inc.php文件可以禁用该显示项目(图四六)。
- vi /var/www/html/zabbix/include/menu.inc.php
图四六:menu.inc.php图
SNMP协议主要用在对网络设备的监控方面,如交换机、防火墙等。首先需要在被监控设备上启用SNMP协议(图四七),然后在zabbix中增加被监控的主机。对于未找到snmp模板的设备就需要自己手动添加item,这里通过snmp指令查询到相关值,然后根据实际情况定制自己所需要item。
图四七:启用snmp
- snmpwalk 172.16.1.1 -v1 -c public |egrep -i 'if(in|out)'|less
- snmpwalk -v1 -c public -On 172.16.1.1 ifInOctets.7
- snmpwalk -v1 -c public -On 172.16.1.1 ifOutOctets.7
- snmpwalk -v1 -c public -On 172.16.1.1 ifInOctets.9
- snmpwalk -v1 -c public -On 172.16.1.1 ifOutOctets.9
- snmpwalk 172.16.1.1 -v1 -c public |grep -i eth0
- snmpwalk 172.16.1.1 -v1 -c public |grep -i eth2
通过第一条指令结合实际情况找出需要监控的网卡(一个设备上有多个网卡但仅启用了其中的两个),并且区分出内网网卡和外网网卡;通过其它指令进一步确认网卡的状态及实时的数据,根据得出的数据结合设备实际情况定制zabbix的snmp item项,注意OID的填写(图四八、四九、五十)。
图四八:snmpwalk指令
图四九:snmpwalk指令
图五十:SNMP item图
zabbix安装指南:http://waringid.blog.51cto.com/65148/904201
zabbix使用指南:http://waringid.blog.51cto.com/65148/945352
zabbix使用手册:http://down.51cto.com/data/462129
zabbix配置手册:http://down.51cto.com/data/469472
本文出自 “虚拟的现实” 博客,转载请与作者联系!