自动化利器-Zabbix
在一个IT环境中会存在各种各样的设备,例如:硬件设备、软件设备、其系统的构成也是非常复杂的。
多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责。而要让这些应用能够稳定地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌握基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统的复制、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。
1.2监控系统的实现
一个监控系统的组成大体可以分为两部分:数据采集部分(客户端)和数据存储分析告警展示部分(服务器端),这两部分构成了监控系统的基本模型。
数据采集的工作模式可以分为被动模式(服务端到客户端采集数据)和主动模式(客户端主动上报数据到服务器端)。通常,大多数监控系统应该能同时支持这两种模式。被动模式对服务器的开销较大,适合小规模的监控环境:主动模式对服务器的开销较小,适合大规模的监控环境。
采集数据的协议方式可以分为两种:专用客户端采集和共用协议采集(SNMP、SSH、Telnet等)
对于采集到的监控数据,可以将其存储到数据库或者文本或者其他方式,具体采用哪一种,应根据实际需求来决定。
1.3 监控系统开源软件
q MRTG
MRTG(Multi Route Trffic Grapher)是一套可用来绘制网络流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL授权。
MRTG最好的版本是1995年推出的,用perl语言携程,可跨平台使用,数据采集用SNMP协议,MRTG将手机到的数据通过Web页面以GIF或者PNG格式绘制出图像。
q Cacti
Cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它通过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。2提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模板。在历史数据展示监控方面,其功能相当不错。
Cacti通过添加模板,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力(数据的叠加功能)
q SmokePing
Smokeping主要用于监视网络性能,包括常规的ping、www服务器性能、DNS查询性能、SSH性能等。底层也是用RRDtool做支持,特点是绘制图非常漂亮,玩过丢包和延迟用颜色和阴影来标示,支持将多张图叠放在一起,其做着还开发了MRTG和RRDtll等工具。
Smokeping的站点为:http://tobi.oetiker.cn/hp
q Graphite
Craphite是一个用于采集网站实时信息并进行统计的开源项目。Graphite服务支持平均每分钟4800次更新操作,采用简单文本协议,具有绘图功能,其即插即用的功能可方便地用于任何需要监控的系统上。
和其他监控工具不同额是,Graphite本身并部手机具体的数据,这些数据收集的工作通常由第三方工具或插件完成,可以说,Graphite是一个绘图工具。
q Nagios
Nagios是一个企业级的个系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等。
Nagios可运行在Linux和UNIX平台上。同时提供一个可选的基于刘安琪的Web界面,以方便系统管理人员查看网络状态、各种系统问题、以及日志等
Nagios的功能侧重于监控服务的可用性,能急事根据触发条件告警。
目前Nagios也占领了一定的市场份额,不过Nagios并没有与时俱进,已经不能满足于多变的监控需求,架构的扩展性和使用的便捷性有待增强,其高级功能集成在上夜班Nagios XI中。
q Zenoss Core
Zenoss Core(简称Zenoss)是开源企业级IT管理软件,它允许IT管理员依靠歹意的WEB控制台来监控网络架构的状态和健康度。
Zenoss Core的强大功能来自深入的列表与配置管理数据库,用于发现和管理公司IT环境的各类资产(包括服务器、网络和其他结构设备)。Zenoss可以创建关键资产清单和对应的组件级别(接口、服务、进程、已安装的软件等)建立好模型后,Zenoss就可以监控和报告IT架构中各种资源的状态和性能状况了。同时还提供与CMDB关联的事件和错误管理系统,以协助提高各类事件和提醒的管理效率,以此提高IT管理人员的效率。
q Ganglia
Grnglia是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网格。它基于分层设计,使用广泛的技术,用RRDtool存储数据。具有可视化界面,适合对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前已经有成千上万的集群正在使用这个监控系统,可以轻松的处理2000个节点的集群环境。
q OpenTSDB
开源监控系统OpenTSDB用Hbase存储所有时序(无须采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,可以做容量规划,并很容易地接入到现有的告警系统里。
OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如Web化、图形化等。
q Zabbix
Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做的非常优秀。
从以上各种监控系统的对比来看,Zabbix都是具有优势的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。
2. Zabbix简介
随着云计算、虚拟化的大规模应用,以及未来移动互联网、物联网等的兴起,Zabbix的使用将越来越广泛,应用场合也越来越多。目前,不少互联网公司、云计算公司、系统集成软件公司、外包服务公司等,都有对Zabbix进行二次开发和大规模使用。所以,可以断言,Zabbix在未来将会引领监控软件的潮流。
Zabbix适合中小型企业、大中型企业的用户使用。单个Server节点可以支持上万台设备,每秒可以处理1.5万次请求,理论上可以支持5万台设备。
Zabbix自身的定位是中型企业和大型企业,如果在特大型环境中使用,需要解决大并发、大压力的问题,这对使用者提出了更高的要求。
2.1 Zabbix为何物
Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案,可以用来监控设备、服务等的可用性和性能,其产品不分企业版和社区版,是一个真正的源代码开放产品,用户可以自由下载并使用该软件。
Zabbix SIA公司是Zabbix的官方技术团队成立的公司。其运作模式是商业软件的开源—软件的使用免费,服务收费。其为用户提供咨询、技术支持服务、定制开发、解决方案、人员培训等。
2.2 选择Zabbix七大理由
对于同类监控产品,有以下理由选择使用Zabbix。
1.Zabbix是一个自由开发源代码的产品,用户可以对源代码进行任意修改和二次开发。Zabbix采用GNU General Public License (GPL) Version2开源协议。
2.安装和配置简单,用户仅仅需要一些简单的学习,即可完成监控的搭建工作。
3.搭建环境简单,基于开源软件构建平台,仅需要Linux、Apache/Nginx、MySQL/PostgreSQL/Oracle、PHP即可,无须专用操作系统支持,也无须专用硬件
4.Zabbix-Agent完全支持Linux、UNIX、Windows、AIX、BSD和Solaris的监控,Server和Agent都采用C语言编码,对系统的资源占用非常小,数据采集的性能和速度非常快。
5.将数据采集持久存储到数据库,便于对监控数据的二次分析。
6.非常丰富的扩展能力,很轻松地自定义监控项和实现数据采集,几乎能监控所有的数据。例如:可以监控网站的访问次数,监控UPS和天气温度等。毫不夸张地说,在Zabbix的世界里,往往有想不到的事情,没有办不到的事情。
7.开源社区的运作模式,有各种论坛、邮件列表、IM及时沟通等。
注意:如果是运维人员,想构建一套自己的监控系统环境,Zabbix将会是最佳的选择。如果你是开发,想基于开源软件开发一套属于自己的监控系统,Zabbix也是比较好的选择。
2.3 Zabbix的功能特性
Zabbix有常见的商业监控软件所具备的功能,如主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的报表图表绘制、分布式、可扩展能力、API等。
1)数据收集
q 可用、性能检测。
q 支持Agent、SNMP(包括Trapping和Polling)、IPMI、JMX、SSH、Telnet等。
q 自定义的检测。
q 自定义收集数据的频率。
q 服务器端/代理段和客户端模式。
2)灵活的触发器
q 可以定义非常灵活的 阀值和多种相关联的条件。
3)高度可定制的告警
q 发送通知,可定制包括告警级别、动作升级、收件人和媒体类型。
q 通知可以使用全局宏变量和自定义的变量。
q 自动处理功能包括远程命令的自动调用和执行。
4)实时的绘图功能
监控项将数据实施绘制在图形上。
5)Web监控能力
q Zabbix可以模拟浏览器请求一个网站,并检查返回值和响应时间。
6)多种可视化的展示
q 可以自定义监控的展示图,将多种监控数据集中展示到一张图中。
q 网络拓扑图。
q 自定义Screens和Slide shows可以将多种图形集中展示。
q 报表功能。
q 资源使用情况的监控展示。
7)历史数据的存储
q 数据存储在数据库中。
q 历史数据的存放周期可配置。
q 定期删除过期的历史数据。
8)配置非常容易
q 配置比较简单,只需要以下两步即可。
q 第一步:添加设备。
q 第二步:应用模板即可完成监控。
9)使用模板
q 模板可以分组
q 模板具有可继承性。
10) 网络发现
q 支持自动发现网络设备和服务器(可以通过配置自动发现服务规则实现。)
q Agent自动发现
q 支持自动发现实现动态监控的批量监控(支持自定义)内置的自动发现包括文件系统、网络接口、SNMP OLD,可定制自动发现。
11) 快速的访问接口
q Web页面基于PHP
q 远程访问。
q 日志审计。
12) API功能
q 应用API功能可以方便地和其他系统结合,包括手机客户端的使用。
13) 系统权限
q 不同的用户展示监控的资源不同。
q 对用户的身份认证
14) 程序特性
q 用C语言编写,其性能和内存开销非常小。
15) 大型环境的支持
q 利用Zabbix-Proxy方式即可轻松构建远程监控。
3. Zabbix安装与部署
3.1 Zabbix-Server服务器端的安装
下面以CentOS6.7_X64为例介绍如何安装Zabbix-Server服务器端。学习采用RPM包安装方式,该方式较简介。生产建议使用源码安装。
3.1.1安装Zabbix-Server
[root@linux-node1 ~]#rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm ß安装Zabbix官方源码
[root@linux-node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo ß安装epel源
[root@linux-node1 ~]# yum -y install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get mysql-server ß安装服务端,由于服务端也是需要监控的,故而一并安装Zabbix-agent。
[root@linux-node1 ~]# \cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
[root@linux-node1 ~]# sed -i "38a collation-server = utf8_general_ci\ninit_connect = \'SET NAMES utf8\'\ncharacter-set-server = utf8" /etc/my.cnf ß修改字符集为utf-8,否则web页面设置中文会出现乱码
[root@linux-node1 ~]# chkconfig mysqld on ß加入开机启动
[root@linux-node1 ~]# /etc/init.d/mysqld start ß启动mysql数据库
1. 创建zabbix的数据库
[root@linux-node1 ~]# mysqladmin -uroot password darker; ß建立新密码
[root@linux-node1 ~]# mysql -uroot –pdarker ß登录数据库
mysql> create database zabbix character set utf8; ß创建zabbix命名的数据库为utf-8
mysql> grant all on zabbix.* to zabbix@localhost identified by 'zabbix'; ß给zabbix账户赋予zabbix库的所有权限
mysql> flush privileges; ß刷新操作
2. 导入Zabbix-Server数据库 注意:如果安装Zabbix-Porxy 之导入schema.sql即可,否则Zabbix-Proxy无法正常工作
[root@linux-node1 ~]# cd /usr/share/doc/zabbix-server-mysql-2.4.6/create/ ß进入
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <schema.sql ß导入数据结构
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <images.sql ß导入图片
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <data.sql ß导入数据
3. 配置zabbix_server.conf
[root@linux-node1 ~]# sed -i '107aDBPassword=zabbix' /etc/zabbix/zabbix_server.conf ß增加zabbix使用数据库的密码
[root@linux-node1 ~]# egrep -v '^#|^$' /etc/zabbix/zabbix_server.conf ß过滤修改后的结果
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
# DBHost=localhost ß可修改
DBName=zabbix ß默认
DBUser=zabbix ß默认
DBPassword=zabbix ß需修改
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
以上参数值需要关注黑体字部分,需要根据实际情况进行调整。默认只修改DBPassword=zabbix即可。
4. 启动Zabbix-Server服务
[root@linux-node1 ~]# /etc/init.d/zabbix-server start ß启动
Starting Zabbix server: [ OK ]
[root@linux-node1 ~]# /etc/init.d/httpd start ß启动httpd服务
Starting httpd: [ OK ]
[root@linux-node1 ~]# chkconfig zabbix-server on ß添加开机启动
[root@linux-node1 ~]# chkconfig httpd on ß添加开机启动
5.Php.ini配置文件的设置(如果不配置是无法安装)
vim /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
在LAMP环境中,也可以按上述方式配置PHP的参数,比修改php.ini更方便。而在Zabbix的官方RPM中,这一步已经配置过了。所以无需修改。
[root@linux-node1 ~]# cat /etc/httpd/conf.d/zabbix.conf
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value date.timezone Asia/Shanghai
</Directory>
如果在后面配置Web时提示任何参数不满足安装配置要求(如图3-1所示),修改对应的参数后重启Httpd即可。
图3-1
3.1.2配置Web界面
打开浏览器,输入http://IP地址/zabbix,会出现如图3-2所示的界面
图3-2
PHP提示的各项参数都满足后,可以继续往下进行,单机Next按钮。如果提示参数不通过,修改php.ini配置文件,并重启Web(httpd)服务。
配置数据库连接的各项参数如图3-3所示。测试结果为OK后,单机Next按钮。
图3-3
Zabbix-Server的链接地址、端口、名称设置(见图3-4)将会显示在Zabbix的前端页面。
注意:如果Zabbix-Server在其他机器中,这里的Host填写Zabbix-Server所在的机器IP (如果是本机,可以直接默认)
图3-4
图3-5中的这些配置信息将会写入到图3-6的配置文件中。
图3-5
图3-6
如图3-7所示的登录界面,默认账户是Admin,密码是zabbix
图3-7
如图3-8登录成功页面。
图3-8
如果提示不能正常运行,分别检查zabbix_server.conf中的各项配置文件、Selinux、Iptables等。配置文件请检查以下文件的正确配置参数。
1./etc/zabbix/zabbix_server.conf中的参数。
# DBHost=localhost ß数据库的IP(域名)地址
DBName=zabbix ß数据库的名称
DBUser=zabbix ß数据库的用户
DBPassword=zabbix ß数据库的密码
2./etc/zabbix/web/zabbix.conf.php中的配置。
[root@linux-node1 ~]# cat /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL'; ß数据库类型
$DB['SERVER'] = 'localhost'; ß数据库的IP(域名)地址
$DB['PORT'] = '0'; ß数据库的端口
$DB['DATABASE'] = 'zabbix'; ß数据库的名称
$DB['USER'] = 'zabbix'; ß数据库的用户
$DB['PASSWORD'] = 'zabbix'; ß数据库的密码
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost'; ßZabbix-Server的IP(域名)地址
$ZBX_SERVER_PORT = '10051'; ßZabbix-Server的端口
$ZBX_SERVER_NAME = 'Zabbix-Xuliangwei'; ßZabbix-Server web界面的标识
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>
Zabbix是支持多语言的,可以为每个用户配置不同的语言环境。单击菜单栏profile-->User-->Language修改用户的语言,(虽然zabbix支持中文,但并不是很推荐使用。只要是中文界面的翻译不准确。所以后续全都使用英文操作)如图3-9所示。
图3-9
3.1.3故障处理
1.数据库文件找不到的问题。
修改/etc/zabbix/zabbix_server.conf中的Dbsocket配置。
DBSocket=/tmp/mysql.sock
注意:修改为mysql.sock实际存在的路径后,重启服务。
2.数据库无法连接
解决办法有三种:检查数据库服务是否正常;防火墙是否允许;权限能否访问。
3.2 Zabbix-Agent客户端的安装
3.2.1安装Zabbix-Agent
前面我们已经知道了Zabbix可以再用Agent/Server的架构,客户端的采集方式分为Agent、SNMP等,这里先学习用Agent方式对服务器进行监控,后续再学习使用其他监控方式(SNMP、JMX、IPMI)
这里的客户端依然采用RPM方式安装(安装Zabbix官方的yum源)
[root@linux-node2 ~]# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm ß使用zabbix官方yum源
[root@linux-node2 ~]# yum -y install zabbix zabbix-agent ß安装zabbix以及agent
3.2.2配置zabbix_agentd.conf
主动和被动模式
Server:被动模式,允许哪台服务器连接Agent。
ServerActive:主动模式,向哪台服务器传送数据。
修改配置文件的被动模式Ip
[root@linux-node2 ~]# sed -i 's#Server=127.0.0.1#Server=10.0.0.3#g' /etc/zabbix/zabbix_agentd.conf ß修改被动模式监听地址为zabbix-server的IP地址
[root@linux-node2 ~]# egrep -v '^#|^$' /etc/zabbix/zabbix_agentd.conf ß查看修改后信息
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.3 ß被动模式,zabbix-server的IP(一个Agent是可以同时向多个服务器端发送数据,多个Ip用逗号隔开)
ServerActive=127.0.0.1 ß主动模式
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/
[root@linux-node2 ~]# chkconfig zabbix-agent on ß加入开机自启动
[root@linux-node2 ~]# /etc/init.d/zabbix-agent start ß启动agent
Starting Zabbix agent: [ OK ]
3.3 Zabbix-Get的使用
Zabbix-Get是Zabbix中的一个程序,用于Zabbix-Server到Zabbix-Agent的数据获取,通常可以用来检测验证Agent的配置是否正确。用法如下:
[root@linux-node1 ~]# zabbix_get
usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key>
-s:远程Zabbix-Agent的IP地址或者是主机名。
-p:远程Zabbix-Agent的端口。
-l:本机出去的IP地址,用于一台机器中又多个网卡的情况。
-k:获取远程Zabbix-Agent数据所使用的Key。
示例如下:
[root@linux-node1 ~]# zabbix_get -s 10.0.0.4 -k system.uname
Linux linux-node2.example.com 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64
用zabbix_get命令可以很方便地知道key是否能正常获取到数据,这在测试自定义监控的时候特别有用。
3.4 Zabbix相关术语(命令)
q zabbix_server
zabbix_server是Zabbix服务端的核心程序。
q zabbix_proxy
zabbix_proxy是Zabbix代理服务的程序,用于分布式监控proxy模式中。
q zabbix_agent
zabbix_agent是用超级服务(xinetd)的方式来启动的,对应的配置文件为zabbix_agent.conf
zabbix_agentd是以独立进程的方式来启动的,对应的配置文件为zabbix_agentd.conf
zabbix_agent是Zabbix专用客户端的程序。
q zabbix_java_gateway
Zabbix的Java采集服务端,用于JMX的监控方式。
q zabbix_sender
Zabbix的Trapping模式,将采集到的数据通过定时任务等主动发送给zabbix_server。
q zabbix_get
zabbix_get是一个数据获取测试命令,相当于snmp中的snmpwalk。
3.5 Zabbix对数据的存储
3.6Zabbix数据库的备份