what is Zabbix?

        zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。支持多种采集方式和采集客户端,有专门的Agent(代理)(zabbix-agent支持linux、Unix、windows、Aix、Bsd和Solaris的监控),也可以支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统不可相比的。

监控系统的基本原理

        一个监控系统往往需要对物理硬件和应用软件的性能、参数进行数据汇集,实现集中管理和统一分析。一个监控系统构成分为监控服务器端程序、数据存储、被采集节点等模块,需要对采集的数据进行分析和处理,判断是否有异常情况,是否满足报警条件。这里涉及到告警条件设置问题?通常是根据实际的经验值、业务需求来设置告警阈值。达到告警条件时,则发送告警信息给管理人员,然而,有些故障是我们希望通过自动处理的,等到程序无法判断的时候,在去通知管理人员。

        监控系统的采集可以分为两种:主动监控和被动监控。一个理想的监控系统,其采集端支持的采集方式应该越多,其扩展能力越强,从而适应不同的场景需求。

        两种数据采集模式介绍

                在大多数监控系统中都支持这两种模式。被动模式对服务器的开销比较大,适合小规模的监控环境;主动模式对服务器的开销较小,适合大规模的监控环境。采集数据得协议方式可以分为两种:专用客户端采集和共用协议采集(其中协议包括snmp、ssh、telnet等)

常见的监控系统性能采集指标

监控项目详细内容
主机监控
cpu、内存、磁盘剩余空间/利用率 I/O、SWAP使用率、系统UP时间、进程数、负载
网卡监控ping的往返时间及包成功率、网卡流量,包括流入/流出量和错误的数据包数
文件监控监控文件大小,Hash值,匹配查询、字符串存在与否
URL监控检测指定URL访问过程中返回码、下载时间及文件大小,支持内容匹配
应用程序端口和内存使用率、CPU使用率、服务状态、请求数、并发连接数、消息队列的字节数据、Client事物处理数、service状态等
数据库检测数据库中指定表空间、数据库的游标数、Session数、事务数、死锁数、缓冲池命中率、库Cache命中率、当前连接数、进程的内存利用率等
日志错误日志匹配、特定字符串匹配
硬件温度、风扇转速、电压等

Zabbix安装

        zabbix运行环境为LNMP环境或LAMP环境,其中数据库可以是mysql,可以是oracle、postgresql等。zabbix大体依赖两个条件:1)硬件条件  2)软件条件。其中硬件条件包括1.硬件配置;官网有推荐最低硬件配置要求,如有需要可以自行查找资料了解。2.磁盘容量大小;zabbix-server的数据库大小取决于NVPS(Number of processed values persecond),NVPS从总体上反映了处理速度,与监控项的数目、监控类型、取值间隔、History的保留时间和Trends的保留时间有直接关系。这里可以自行参照《zabbix企业级分布式监控系统》p22有详细介绍。其中软件条件包括:1.zabbix支持的操作系统平台如Linux、Unix、windows等,2.数据库和web环境等相关版本要求。3.zabbix监控中涉及的协议所用到的软件,如通过IPMI协议可以对硬件进行监控,这就需要安装OpenIPMI工具。4.时间同步。不管是监控还是做集群对时间精准度要求都很高。在监控中时间对数据的计算是有影响等。因此需要最好时间同步,如搭建时间服务器,或同步外网的时间服务器,做好时间同步。

一、yum安装LAMP

1.1安装主程序

# yum -y install httpd php mysql mysql-server php-mysql

注:目前mysql高版本已经更名为mariadb,所以安装命令变为yum install mariadb 

1.2 安装apache扩展

# yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql

1.3 安装php扩展

# yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-bcmath

1.4 安装mysql扩展

# yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql

1.5 apache设置首页

# vim httpd.conf
增加DirectoryIndex index.php       #php目录索引

1.6 开机启动

# service httpd start
# chkconfig httpd on
# service mysqld start
# chkconfig mysqld on

1.7 设置mysql数据库root帐号密码。

# mysqladmin -u root password 'fanshine'

 二、Zabbix 安装

(1)zabbix-server服务器端安装

2.1 yum安装zabbix需要的其他组件

# yum -y install net-snmp-devel curl-devel

2.2 添加zabbix用户

# groupadd zabbix           添加zabbix组            
# useradd zabbix -g zabbix   新建zabbix用户并将其加入到zabbix组

2.3 下载并解压软件

#wget http://prdownloads.sourceforge.net/zabbix/zabbix-2.0.21.tar.gz
# tar zxvf zabbix-2.0.21.tar.gz -C /usr/src
# cd /usr/src/zabbix-2.0.21

2.4 为zabbix创建数据库并添加用户

# mysql -u root -p fanshine
# mysql> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;  #新建一个数据库叫zabbix 
# mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123';
#给zabbix这个数据库授权,只允许zabbix这个用户通过本地登录,zabbix用户的密码为zabbix123mysql> flush privileges;

2.5 将zabbix源码包中的数据导入到新建的zabbix数据库
注:导入也要严格按照顺序来。

# shell>mysql -u zabbix -p 'zabbix123' zabbix < /usr/src/zabbix-2.0.3/database/mysql/schema.sql

 #这个是zabbix的数据库表结构,要先导入。 

# shell>mysql -u zabbix -p 'zabbix123' zabbix < /usr/src/zabbix-2.0.3/database/mysql/images.sql
# shell>mysql -u zabbix -p'zabbix123' zabbix < /usr/src/zabbix-2.0.3/database/mysql/data.sql

2.6 编译安装

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssh2

同时安装server和agent,并支持将数据放入mysql数据中,可使用类似如下配置命令:

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssh2

如果仅安装server,并支持将数据放入mysql数据中,可使用类似如下配置命令:

./configure --enable-server --with-mysql --with-net-snmp --with-libcurl

如果仅安装proxy,并支持将数据放入mysql数据中,可使用类似如下配置命令:

./configure --prefix=/usr --enable-proxy --with-net-snmp --with-mysql --with-ssh2

如果仅安装agent,可使用类似如下配置命令:

./configure --enable-agent

注意:在编译时报错信息及解决如下:

checking for SSH2 support... no
configure: error: SSH2 library not found

解决办法:

yum -y install libssh2-devel

上面一个报错解决了,继续./configure,又出现如下错误:
checking for LDAP support... no
configure: error: Invalid LDAP directory - unable to find ldap.h

解决办法:

yum -y install openldap openldap-devel

而后编译安装zabbix即可:

# make && make install 

2.7  为zabbix server添加端口

[root@Centos ~] vim /etc/services   [zabbix默认已设置好]
添加如下信息
zabbix-agent    10050/tcp                       # Zabbix Agent
zabbix-agent    10050/udp                       # Zabbix Agent
zabbix-trapper  10051/tcp                       # Zabbix Trapper
zabbix-trapper  10051/udp                       # Zabbix Trapper

2.8  配置文件目录软连接

# ls /usr/local/zabbix/etc
zabbix_agent.conf    zabbix_agentd.conf    zabbix_proxy.conf    zabbix_server.conf
zabbix_agent.conf.d  zabbix_agentd.conf.d  zabbix_proxy.conf.d  zabbix_server.conf.d
# ln -s /usr/local/zabbix/etc /etc/zabbix

2.9 更改配置文件中数据库相关的用户名密码

# vim /etc/zabbix/zabbix_server.conf

修改以下三项:
  DBName=zabbix
  DBUser=zabbix
  DBPassword=zabbix123
注:DBPassword 默认是被注释掉的

# vim /etc/zabbix/zabbix_agentd.conf

  Hostname=zabbix server
  ServerActive=192.168.6.242:10051

2.10 拷贝相应的web程序到相关WEB服务目录下

# cp -r /usr/src/zabbix-2.0.21/frontends/php/ /var/www/html/zabbix/
# chown -R zabbix.zabbix /var/www/html/zabbix

2.11拷贝zabbix服务端和客户端启动脚本到/etc/init.d目录下.

# cp /usr/src/zabbix-2.0.21/misc/init.d/fedora/core5/zabbix_server /etc/init.d
# cp /usr/src/zabbix-2.0.21/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d

2.11 修改启动脚本

# vim /etc/init.d/zabbix_server
 BASEDIR=/usr/local/zabbix/  修改zabbix_server实际位置
# service zabbix_server start
Starting Zabbix Server:              [  OK  ]
# vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix/
# service zabbix_agentd start
Starting Zabbix Agent:               [  OK  ]
[root@Centos zabbix-2.0.21]#chkconfig zabbix_server on
[root@Centos zabbix-2.0.21]#chkconfig zabbix_agentd on

注:也可以直接启动

/usr/local/zabbix/sbin/zabbix_server   #启动server服务
/usr/local/zabbix/sbin/zabbix_agentd   #启动agent服务
查看zabbix服务是否启动
[root@Centos zabbix-2.0.21]# netstat -tnlp | grep zabbix
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      2120/zabbix_agentd  
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      2044/zabbix_server  
tcp        0      0 :::10050                    :::*                        LISTEN      2120/zabbix_agentd  
tcp        0      0 :::10051                    :::*                        LISTEN      2044/zabbix_server

2.12 修改PHP配置文件php.ini内容

# vim /etc/php.ini
date.timezone = Asia/Shanghai
post_max_size = 32M
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
mbstring.func_overload = 2
# service httpd restart
Stopping httpd:       [  OK  ]
Starting httpd:       [  OK  ]

三、浏览器安装

(1)浏览器打开刚安装的zabbix  http://192.168.137.100/zabbix/php

wKioL1lfRNXRKk21AAIl832F7ik373.jpg-wh_50

点击next,进入下一步:

wKioL1lfRWfhtb_uAAEIUaueIug614.jpg-wh_50

点击next,进入下一步:

wKioL1lfRYDiRchKAADUfAU19fU404.jpg-wh_50

点击next,进入下一步:

wKiom1lfRaWT6UE6AAEVtsqmTnc919.jpg-wh_50

点击next,进入下一步:

wKioL1lfRcKTmbDdAAC9N6gyxRg270.jpg-wh_50

注:如果出现fail提示,下载zabbix.conf.php配置文件并copy到/var/www/html/zabbix/php/conf下.

点击Finish,进入登录:默认账号和密码为:Admin   zabbix

wKioL1lfRsbguhVUAACDhZPPskI026.jpg-wh_50

之后登录到zabbix首页:

wKiom1lfRxKyulYDAAIkKIX__ao475.jpg-wh_50

注意:登录后发现一个报错:zabbbix server is not  running:the information displayed may not be current

解决办法:

关闭selinux,编辑selinux文件设置:

SELINUX=disabled

或临时通过命令关闭

setenforce 0

(2)zabbix-agent客户端安装

2.11 下载并解压软件

# wget http://prdownloads.sourceforge.net/zabbix/zabbix-2.0.21.tar.gz
# tar zxvf zabbix-2.0.21.tar.gz -C /usr/src
# cd /usr/src/zabbix-2.0.21

2.12 编译安装

编译安装只需要指定agent就可以:

 # cd zabbix-2.0.21
 # ./configure --enable-agent
 # make && make install

2.13 复制agent启动脚本

 # cp /usr/src/zabbix-2.0.21/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/

2.14 编辑配置文件

  # vi /usr/local/etc/zabbix_agentd.conf
  修改:
  Server=127.0.0.1,172.17.0.2
  Hostname=zabbix-server
  ServerActive=172.17.0.2:10051

参数说明:

Server:被动模式,允许哪台服务器连接agent。

ServerActive:主动模式,向哪台服务器传送数据。

一个agent可以同时向多个服务器发送数据,多个ip用逗号分隔。Server=127.0.0.1,172.17.0.2,表示server的Ip为127.0.0.1和172.17.0.2,这两台zabbix-server服务器可获取agent端监控数据。