监控工具之——zabbix

   本节我们来认识下一款比较具有代表性的监控工具——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的工作机制:在各被监控的节点上安装触发器,当某些数据超出阈值是可以触发某个事件,可以是执行某个脚本,也可以是执行报警等操作。

wKioL1Q_e83wHBAFAAMP5QICb1M762.jpg

注意: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:分布式监控环境中的专用组件

       wKiom1Q_Lv2SerdFAAESn5VYaX4149.jpg

zabbix 的逻辑架构

wKiom1Q_MFuRCtu2AAF3r6eY93Q286.jpg

  架构讲解:通常我们的监控从添加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启动的进程 

wKioL1Q_en7CDeheAAIxKq0yVFo822.jpg

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安装

下载网页如下

wKioL1Q_LQLwe0fcAAN22VZwKh8999.jpg

 

这里我已经下载好了

[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  images.sql  schema.sql
[root@node3 create]# mysql zabbix <schema.sql 
[root@node3 create]# mysql zabbix <images.sql 
[root@node3 create]# mysql zabbix <data.sql

 修改server端配置数据库信息

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

 wKiom1Q_VHjS-iuKAAEHO5myyEI013.jpg

 

启动server服务

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

 

使用浏览器打开

wKiom1Q_Wf-ifZANAANBjWUumwo634.jpg

注意配置之前需要修改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

wKioL1Q_ZxSCnRHGAAFc10hFPwg778.jpg

 

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

wKiom1Q_W03gbY8RAANDoiGEVRk383.jpg

 

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

wKiom1Q_W_igCs2XAAJjRtGv3nM603.jpg

 

OK

wKiom1Q_ZqmDaUIIAATpOI0gEZM346.jpg 

接下来配置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接口直接添加主机了

wKiom1Q_hUvw669sAARAdCyhHqc584.jpg

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

wKiom1Q_ht3yvjMdAAOebfnF7bc121.jpg

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

wKioL1Q_h8WhR5wbAAIPpzoRj1M053.jpg

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

wKioL1Q_iSGz4rx4AAYeozsoPGA216.jpg

 

 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

wKiom1RDYhvB8vp2AAIq5zWL4Wc963.jpg

 

添加完之后修改被监控的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

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

wKiom1RDYqbjsXLwAAHITfLxPTM725.jpg

 

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

wKiom1RDY0jRpq4pAALpBxLSFDI427.jpg

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

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章