本节我们来认识下一款比较具有代表性的监控工具——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的工作机制:在各被监控的节点上安装触发器,当某些数据超出阈值是可以触发某个事件,可以是执行某个脚本,也可以是执行报警等操作。
注意: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 的逻辑架构
架构讲解:通常我们的监控从添加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启动的进程
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安装
下载网页如下
这里我已经下载好了
[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
启动server服务
[root@node3 create]# service zabbix-server start Starting Zabbix server: [ OK ]
使用浏览器打开
注意配置之前需要修改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
注意这里配置必须与之前授权的一致
注意登录界面上有默认的登录账号密码admin(zabbix)
OK
接下来配置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接口直接添加主机了
填完相关的信息还可以选定模板
模板有很多,适合的就行,这里我选了个linux操作系统的监控项
选完添加完成就可以添加主机了
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 ]
启动之后就可以到监控端添加了
注意添加是的代理名称一定要与代理端配置文件中的主机名保持一致
添加完之后修改被监控的agent端的配置文件
[root@node5 ~]# vim /etc/zabbix/zabbix_agentd.confServer=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
这一项一定要选择刚刚的创建的那个代理主机
创建完成之后等待一段时间后就可以看到主机监控成功了
并且监控到的数据也可以显示了。
好的,那么本节关于监控的内容就讲到这里,再见!