本节我们来认识下一款比较具有代表性的监控工具——zabbix。来看下摘自百度百科的介绍:

 zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix由2部分构成,zabbix server与可选组件zabbix agent。

zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,,AIX,Free BSD,Open BSD,OS X等平台上。

 

开源的监控工具

比较著名的几个

         cacti:写一些脚本到agent端采集一些数据,通过PHP(即时绘制)可以展示直观的结果

         nagios:有强大报警功能,只关心数据是否异常         

         zabbix:是一个能够实现各种强大的数据采集功能,并且能够提供良好的报警功能的工具

 

zabbix的介绍

zabbix的工作机制:在各被监控的节点上安装触发器,当某些数据超出阈值是可以触发某个事件,可以是执行某个脚本,也可以是执行报警等操作。

监控工具之——zabbix_第1张图片

注意:server端采集数据有2中方式:主动和被动

       主动模式下又分为

          server端 每个一定时间到agent端采集数据

          通过get来执行脚本或命令到agent端拉取数据

       被动模式为

          agent端通过sender发送数据给server端

 

  zabbix架构中的组件:

     zabbix-server:C语言

     zabbix-agent:C语言

     zabbix-database:MySQL,PostgreSQL(PGsql),Oracle、DB2,SQLite    

     zabbix-web :GUI 用于实现设定和展示

     zabbix-proxy:分布式监控环境中的专用组件

       监控工具之——zabbix_第2张图片

zabbix 的逻辑架构

监控工具之——zabbix_第3张图片

  架构讲解:通常我们的监控从添加host开始,而该host(主机)可以属于一个hostgroup(主机组),当然,在添加host时,我们必然要添加一些我们需要的items(监控项),而这些items上的数据肯定是从agent端的主机上采集来的数据(根据采集方式不同,因此分为了zabbix poller到agent端拉取,以及agent端直接推送到server端 ,因此有2个方向),当然host也可以直接使用template(模板),上面定义各个选项(包含graphs(数据生产的图像)、trigger(触发器)、items等等),好了下面从items往下走,定义了items之后我们必然会给这些采集到数据设定一个合理的范围值,即阈值,而这就是trigger(触发器),一旦超出了阈值之后,就会产生events(事件),而我们就可以根据这些event来定义相应的action(处理动作)了,这些动作可以是执行一些脚本、命令(例如发现数据异常可以通过命令完成远程agent服务重启等),也可以是发送信息、Email通知运维人员等。当然有些时候当服务器处于维护升级时,数据可能就会异常,而这些异常是运维人员知道的,无需报警的,因此这就是这里的maintenance(维护)的意义了,maintenance可以定义维护时间内,而在这段时间内是不发送警报。

好了,这是我的大概理解,可能讲的不是那么好,见谅。

 

 

 zabbix常用的术语
主机(host):要监控的网络设备,可由IP或者DNS名称指定
主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能相互连接
监控项(item):一个特定监控指标的相关的数据,这些数据来自于被监控的对象
触发器(trigger):一个表达式,用于评估某监控对象的某特定item内所收到的数据是否在合理范围内,即阈值;接收到的数据大于阈值时,触发器状态将从OK转变为problem,当数据再次回归合理范围时,状态也会相应变回OK
事件(event):即发生的一个值得关注的事情,当trigger状态发生改变时自动产生事件
动作(action):指对于某特定事件实现定义的处理方法
报警升级(escalation):发送报警或执行远程命令的自定义方案,如每隔几分钟发一次警报,总共发送几次
媒介(media):发送通知的手段,如Email、jabber、SMS等
通知(notification):通过选定的媒介向用户发送的有关某事件的信息
远程命令(remote command):预定义的命令,可以在被监控主机处于某特定条件下时自动执行
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level Discovery rule;
应用程序(application):一组item的集合
web场景(web scenario):用于检测web站点可用性的一个或多个http请求
前端(frontend):zabbix的web接口

 

zabbix启动的进程 

监控工具之——zabbix_第4张图片

housekeeper:负责清理过期的数据

poller:拉去数据

httppoller:监控web页面的专业拉取数据用的

discoverer:发现资源的

alerter:报警用的

watchdog:负责监视所有的进程的状态的,一旦某个进程关闭,watchdog将会通知zabbix重新启动该进程

pinger:使用ping探测主机是否在线用的

timer:计时器

secalator:报警升级

nodewatcher:监控各节点的

db_config_syncer:数据库配置同步

db_data_syncer:数据库数据同步

 

实验:利用zabbix实现agent主机监控

实验中我们会通过2种模型来演示:

 server-agent模型

server-proxy-agent模型

 

 实验前提:

已经安装好lamp环境

server:172.16.6.30  node3

agent:172.16.6.50   node5

proxy:    172.16.6.40  node4

 

 

 server-agent模型

zabbix 安装

这里我使用的是rpm安装

下载网页如下

监控工具之——zabbix_第5张图片

 

这里我已经下载好了

[root@node3 ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog  zabbix-2.4
[root@node3 ~]# cd zabbix-2.4/
[root@node3 zabbix-2.4]# ls
zabbix-2.4.0-1.el6.x86_64.rpm
zabbix-agent-2.4.0-1.el6.x86_64.rpm
zabbix-get-2.4.0-1.el6.x86_64.rpm
zabbix-java-gateway-2.4.0-1.el6.x86_64.rpm
zabbix-proxy-2.4.0-1.el6.x86_64.rpm
zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm
zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm
zabbix-proxy-sqlite3-2.4.0-1.el6.x86_64.rpm
zabbix-release-2.4-1.el6.noarch.rpm
zabbix-sender-2.4.0-1.el6.x86_64.rpm
zabbix-server-2.4.0-1.el6.x86_64.rpm
zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm
zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm
zabbix-web-2.4.0-1.el6.noarch.rpm
zabbix-web-japanese-2.4.0-1.el6.noarch.rpm
zabbix-web-mysql-2.4.0-1.el6.noarch.rpm
zabbix-web-pgsql-2.4.0-1.el6.noarch.rpm
这里我用node3当做server端
[root@node3 zabbix-2.4]# yum -y install zabbix-2.4.0-1.el6.x86_64.rpm zabbix-server-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm zabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-get-2.4.0-1.el6.x86_64.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpm zabbix-web-2.4.0-1.el6.noarch.rpm zabbix-web-mysql-2.4.0-1.el6.noarch.rpm

 

创建数据库并授权

mysql> create database zabbix;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zabbix.* to 'zbxuser'@'172.16.%.%' identified by 'zbxpass';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on zabbix.* to 'zbxuser'@'localhost' identified by 'zbxpass';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on zabbix.* to 'zbxuser'@'127.0.0.1' identified by 'zbxpass';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on zabbix.* to 'zbxuser'@'node3.mwj.com' identified by 'zbxpass';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 模板导入数据库

[root@node3 ~]# cd /usr/share/doc/zabbix-server-mysql-2.4.0/create/
[root@node3 create]# ls
data.sql  p_w_picpaths.sql  schema.sql
[root@node3 create]# mysql zabbix  
  

 修改server端配置数据库信息

[root@node3 create]# vim /etc/zabbix/zabbix_server.conf

 监控工具之——zabbix_第6张图片

 

启动server服务

[root@node3 create]# service zabbix-server start
Starting Zabbix server:                                    [  OK  ]

 

使用浏览器打开

监控工具之——zabbix_第7张图片

注意配置之前需要修改PHP配置文件中的时区,否则会出错

[root@node3 ~]# vim /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
;http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone =Asia/Shanghai             启用时区

修改完了别忘了重启httpd

[root@node3 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

 

查看下监听端口

     MySQL3306     httpd80         zabbix-server 10051

监控工具之——zabbix_第8张图片

 

注意这里配置必须与之前授权的一致

监控工具之——zabbix_第9张图片

 

注意登录界面上有默认的登录账号密码admin(zabbix)

监控工具之——zabbix_第10张图片

 

OK

监控工具之——zabbix_第11张图片 

接下来配置agent端

先安装agent客户端

[root@node5 ~]# cd zabbix-2.4/
[root@node5 zabbix-2.4]# ls
zabbix-2.4.0-1.el6.x86_64.rpm               
zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm    
zabbix-server-2.4.0-1.el6.x86_64.rpm        
zabbix-web-mysql-2.4.0-1.el6.noarch.rpm
zabbix-agent-2.4.0-1.el6.x86_64.rpm         
zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm    
zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm  
zabbix-web-pgsql-2.4.0-1.el6.noarch.rpm
zabbix-get-2.4.0-1.el6.x86_64.rpm           
zabbix-proxy-sqlite3-2.4.0-1.el6.x86_64.rpm  
zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm
zabbix-java-gateway-2.4.0-1.el6.x86_64.rpm  
zabbix-release-2.4-1.el6.noarch.rpm          
zabbix-web-2.4.0-1.el6.noarch.rpm
zabbix-proxy-2.4.0-1.el6.x86_64.rpm         
zabbix-sender-2.4.0-1.el6.x86_64.rpm         
zabbix-web-japanese-2.4.0-1.el6.noarch.rpm
[root@node5 zabbix-2.4]# yum -y install 
zabbix-2.4.0-1.el6.x86_64.rpm 
zabbix-agent-2.4.0-1.el6.x86_64.rpm 
zabbix-sender-2.4.0-1.el6.x86_64.rpm

 修改配置文件

[root@node5 zabbix-2.4]# vim /etc/zabbix/zabbix_agentd.conf
修改以下3项
Server=172.16.6.30                 指向服务器端
ServerActive=172.16.6.30           主动模式指向的服务器  
 Hostname=node5.mwj.com            全局唯一的主机名

启动服务

[root@node5 zabbix-2.4]# service zabbix-agent start
Starting Zabbix agent:                                     [  OK  ]
[root@node5 zabbix-2.4]# ss -tnl
确保10050端口监听
LISTEN    0     128                      :::10050                   :::*     
LISTEN    0     128                      *:10050                    *:*

 

然后就可以用web接口直接添加主机了

监控工具之——zabbix_第12张图片

填完相关的信息还可以选定模板

监控工具之——zabbix_第13张图片

模板有很多,适合的就行,这里我选了个linux操作系统的监控项

监控工具之——zabbix_第14张图片

 选完添加完成就可以添加主机了

监控工具之——zabbix_第15张图片

 

 zabbix 的代理模式

代理端安装proxy包

[root@node4 zabbix-2.4]# yum install zabbix-2.4.0-1.el6.x86_64.rpm zabbix-proxy-2.4.0-1.el6.x86_64.rpm zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm

创建代理数据库并授权

mysql> create database zabbix_proxy;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zabbix_proxy.* to 'zabbix'@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on zabbix_proxy.* to 'zabbix'@'node4.mwj.com' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;

数据库初始化

[root@node4 ~]# cd /usr/share/doc/zabbix-proxy-mysql-2.4.0/create/

[root@node4 create]# mysql zabbix_proxy < schema.sql

 

修改配置文件

[root@node4 ~]# vim /etc/zabbix/zabbix_proxy.conf

注意:在代理模式下也分为主动模式和被动模式

### Option: ProxyMode

#       Proxy operating mode

#       0 - proxy in the active mode

#       1 - proxy in the passive mode

#

# Mandatory: no

# Default:

# ProxyMode=0                 默认工作为主动模式
Server=172.16.6.30            注意服务器指向监控端
Hostname=node4.mwj.com
DBName=zabbix_proxy           注意,这里的数据库并不是server端的数据库
DBUser=zabbix                 而是在proxy端暂时存储数据的数据库
DBPassword=123456
ConfigFrequency=60         zabbix proxy 想服务器检索配置数据信息的频率,在被动模式下该参数将被忽略
DataSenderFrequency=5         zabbix proxy发送收集的数据给zabbix server的频率

启动服务

[root@node4 ~]# service zabbix-proxy start

Starting Zabbix proxy:                                     [  OK  ]

 

启动之后就可以到监控端添加了

注意添加是的代理名称一定要与代理端配置文件中的主机名保持一致

wKioL1RDYmKAEcL_AAIMUD0m2Fc539.jpg

监控工具之——zabbix_第16张图片

 

添加完之后修改被监控的agent端的配置文件

[root@node5 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.6.40                server指向proxy主机
Hostname=node5.mwj.com
 修改完之后重启服务
[root@node5 ~]# service zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]

 

到监控端添加主机

尤其注意的是最下面的一个选项:monitored by proxy

这一项一定要选择刚刚的创建的那个代理主机

监控工具之——zabbix_第17张图片

 

创建完成之后等待一段时间后就可以看到主机监控成功了

监控工具之——zabbix_第18张图片

并且监控到的数据也可以显示了。

 

好的,那么本节关于监控的内容就讲到这里,再见!