前言:

2014年7月15日,那时我刚刚开始接触ZABBIX,到现在刚好整整一年时间,这一年里,谈不上对ZABBIX进行深入研究,接触过两个ZABBIX的项目,平时或多或少的对这两个项目进行修修补补。直到最近的两个月内,公司决定采用ZABBIX进行二次开发成自己的产品(之前一直在SCOMZABBIX之间纠结),所以有了充足的时间对ZABBIX进行系统学习,逐步对ZABBIX有了更深入的了解,也积累了一些学习笔记。

最近打算整理一下笔记,对这年来关于ZABBIX的知识做一些梳理,并将尽量围绕项目要求上共享一些文章,跟大家一起交流在企业项目部署、运维ZABBIX过程中遇到的问题与细节。

 

项目实践环境:

主机名

IP

角色

操作系统

ZABBIX01

172.16.0.101

ZABBIX_SERVERAPACHE、PHP

rhel-server-6.1

ZABBIXDB01

172.16.0.102

MYSQL

rhel-server-6.1

注:为了减轻ZABBIX监控的负担,在项目环境中,建议大家将ZABBIX SERVER与数据库分开部署,不然随着监控指标的增大,会严重影响ZABBIX SERVER采集数据的性能;如果需要频繁调用API的话,那么建议APACHEZABBIX SERVER分开部署。

 

ZABBIX官网推荐部署资源规划:

场景

平台

CPU/内存

数据库

监控主机数量

小型

CentOS

Virtual  Appliance

MySQL  InnoDB

100

中型

CentOS

2  CPU cores/2GB

MySQL  InnoDB

500

大型

RedHat  Enterprise Linux

4  CPU cores/8GB

RAID10  MySQL InnoDB 或 PostgreSQL

>1000

超大型

RedHat  Enterprise Linux

8  CPU cores/16GB

Fast  RAID10 MySQL InnoDB 或 PostgreSQL

>10000

注:个人建议如果硬件资源充足的话,还是在此配置上配置上适当增加资源

 

Zabbix支持操作系统平台:

  • Linux

  • IBM AIX

  • FreeBSD

  • NetBSD

  • OpenBSD

  • HP-UX

  • Mac OS X

  • Solaris

  • Windows: 2000, Server 2003, XP, Vista, Server 2008, 7, 8, Server2012 (只支持Zabbix agent)

 

数据库系统要求列表:

软件

版本

备注


MySQL

5.0.3 或以后版本

必须为InnoDB引擎


Oracle

10g 或以后版本



PostgreSQL

8.1或以后版本

为了获得更好的性能,建议使用不低于PostgreSQL 8.3版本



SQLite

3.3.5 或以后版本



IBM DB2

9.7 或以后版本



 

前端要求:

软件

版本

Apache

1.3.12或以后版本

PHP

5.3.0或以后版本

 

其他组件要求:

组件名称

备注

OpenIPMI

如果需要使用IPMI监控时,则安装该组件

libssh2

如果需要使用SSH监控时,则安装该组件

Fping

使用ping判断监控的主机是否存活,一般选择安装

libcurl

如果需要监控WEB场景时,这安装该组件,一般选择安装

libiksemel

如果需要使用Jabber方式警报,这安装该组件

net-snmp

如果需要使用SNMP监控时,则安装该组件;SNMP常用于用于监控网络设备等硬件,所以一般选择安装该组件

 

数据库硬盘空间计算:

参数

所需磁盘空间公式 (字节)


ZABBIX配置

固定值,一般小于10M


历史数据

公式:保存天数*(监控项总数/刷新频率)*24*3600*50字节
 说明:
 监控项总数:监控系统中所有监控项的数量,可在WEB主页查看到该数值
 保存天数:历史数据保留的天数,一般为7天
 刷新频率:所有监控项的平均刷新频率
 字节:保存一条历史记录所需的字节,数取决于数据库引擎,通常为50个字节。






趋势数据

公式:保存天数*(监控项总数/3600)*24*3600*128字节
 说明:
 监控项总数:监控系统中所有监控项的数量,可在WEB主页查看到该数值
 保存天数:趋势数据保留的天数,一般为一年即365天
 字节:保存一条趋势数据所需的字节,数取决于数据库引擎,通常为128个字节。





事件数据

公式:保存天数*事件个数*24*3600*130字节
 说明:
 事件个数: 每秒产生的事件个数。该值需要根据你监控的环境进行自行估算出大概值。
 保存天数: 事件数据保留的天数,默认为7天
 字节: 保存一条事件记录所需的字节,数取决于数据库引擎,通常为130个字节。





故ZABBIX数据库硬盘空间=配置文件大小+历史数据+趋势数据+事件数据

注:对于硬盘空间的预算,我们在部署前是无法计算的,只能在前期项目部署时先申请适当的硬盘空间,到项目后期时才根据监控项的数目进行计算扩容,后面会写一遍文章关于磁盘扩容的操作。

 

ZABBIX部署安装过程:

一、安装依赖组件:

这里为了方便安装,我们先使用本地源进行yum安装,如果需要对环境进行安全加固,后续再使用源码包对LAMP环境进行升级。

ZabbixServer:

#yum install -y net-snmp*

#yum install -y httpd*

#yum install -y php*

#yum install -y gcc*

#yum install -y mysql-devel*

#yum install -y curl-devel

#yum install -y libxml2*

#yum install -y policycoreutils-python

#yum install -y unixODBC*

注:由于默认系统镜像中没有包含php-bcmathphp-mbstring这两个包,我们需要到网上自行下载来安装,大家可以到该网站搜索下载:http://rpm.pbone.net,注意版本要与你安装的php版本一致。

# rpm -qa | grep php

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第1张图片

# rpm -ivhphp-bcmath-5.3.3-3.el6_2.8.x86_64.rpm

# rpm -ivhphp-mbstring-5.3.3-3.el6_2.8.x86_64.rpm

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第2张图片

启动服务并设置开机自启:

# service snmpd start

# service httpd start

# chkconfig --level 35 snmpd on

# chkconfig --level 35 httpd on

 

ZabbixDB Server上:

#yum install -y mysql*

启动服务并设置开机自启:

# service mysqld start

# chkconfig --level 35 mysqld on


二、Zabbix Server部署

编译安装Zabbix Server

解压缩Zabbix Server

# tar -zxvf zabbix-2.2.4.tar.gz

在解压出来的Zabbix目录对zabbix安装进行编译。

# cd zabbix-2.2.4

#./configure --prefix=/usr/local/zabbix--enable-server --enable-agent --with-mysql  --with-net-snmp --with-libcurl--with-libxml2 -with-unixodbc

参数说明:

--prefix:指定zabbix安装目录

--enable-server:支持zabbix服务器

-enable-agent:支持zabbix代理

--with-mysql:使用mysql客户端

--with-libcurl:支持web监控

--with-libxml2:支持虚拟机监控

--with-net-snmp:支持SNMP监控

-with-unixodbc:支持odbc数据库监控

 wKioL1WnyRjBk0gcAADi2IJmCl4173.jpg

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第3张图片

编译成功后输入make install进行安装

#make install

wKioL1WnyUvBECeJAAAlbSSD-ss821.jpg

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第4张图片

连接并初始化mysql数据库

ZABBIXDB01上创建数据库上并建立账号允许从远程访问数据库

[root@ZABBIXDB01 /]# mysqladmin -urootpassword 'p@ssw0rd'

[root@ZABBIXDB01 /]# mysql -uroot-pp@ssw0rd

 

mysql> create schema zabbix characterset utf8;

 

mysql> create user 'zabbix'@'%'identified by 'zabbix';

 

mysql> grant all on zabbix.* to'zabbix'@'%';

 

mysql> flushprivileges;

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第5张图片

修改防火墙配置文件允许访问数据库

#vi /etc/sysconfig/iptables

加入下面一行

-A INPUT -m state --state NEW-m tcp -p tcp --dport 3306 -j ACCEPT

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第6张图片

修改完毕后重启防火墙服务

# service iptables restart

wKioL1WnymagHlm7AAB9rwKy7R0805.jpg

ZABBIX01服务器上测试使用zabbix账号是否能够成功访问mysql

# mysql -u zabbix -pzabbix -h 172.16.0.102

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第7张图片

 

初始化zabbix数据库

Zabbix初始数据文件存放在zabbix解压目录下的database目录中

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第8张图片

将相应数据库的数据文件复制到ZABBIXDB01服务器上的相应目录中,并进入该目录下进行数据库的导入。这里我们将数据文件复制到ZABBIXDB01服务器上的/tmp目录下

# cd /tmp/

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第9张图片

#cd .mysql/

wKiom1WnyUHDxCeRAACkcoI4bIs238.jpg

登录数据库

# mysql -uroot -pp@ssw0rd

执行以下脚本导入数据库

mysql> set sql_log_bin=0;

mysql> use zabbix; 

mysql> source ./schema.sql;

mysql> source ./p_w_picpaths.sql;

mysql> source ./data.sql;

mysql> set sql_log_bin=1;

注:导入数据需要按照上面的顺序导入,否则会导入失败。


修改zabbix server配置文件与启动脚本

# vim/usr/local/zabbix/etc/zabbix_server.conf

wKiom1WnyXHghBL-AAAu63BZpsU085.jpg

修改zabbix server配置文件以下内容

LogFile=/usr/local/zabbix/logs/zabbix_server.log

PidFile=/usr/local/zabbix/logs/zabbix_server.pid

DBHost=172.16.0.102  ZABBIXDB01数据库服务器的IP地址)

DBName=zabbix

DBUser=zabbix

DBPassword=zabbix

DBPort=3306

 

添加zabbix用户和组

# groupadd zabbix

# useradd -g zabbix zabbix

wKioL1Wny3DD2Fy4AAA5HOPJdRA489.jpg

新建Zabbix日志文件目录并修改目录权限

#mkdir -p /usr/local/zabbix/logs

#chown -R zabbix:zabbix /usr/local/zabbix

wKiom1WnybPzqFCNAABKVhmsQ7o562.jpg

修改zabbix_server服务启动脚本

zabbix_server启动脚本复制到 /etc/init.d/目录下进行修改。

[root@ZABBIX01 ~]# cd /tmp/zabbix-2.2.4

[root@ZABBIX01 zabbix-2.2.4]# cpmisc/init.d/fedora/core5/zabbix_server /etc/init.d/

#vi /etc/init.d/zabbix_server

修改如下:

 

...

ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server"

CONF_FILE="/usr/local/zabbix/etc/zabbix_server.conf"

...

start() {

       ...

       daemon $ZABBIX_BIN -c $CONF_FILE

       ...

}

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第10张图片

设置zabbix_server服务开机启动

#chkconfig --add zabbix_server

#chkconfig --level 35 zabbix_server on

#/etc/init.d/zabbix_server start

wKiom1WnyfbDBtcVAACIVuGq-NE027.jpg

配置zabbixweb前端

zabbix的解压目录复制前端文件到http网页目录下

#mkdir /var/www/html/zabbix

#cp -a /tmp/zabbix-2.2.4/frontends/php/* /var/www/html/zabbix

#chown -R zabbix.zabbix /var/www/html/zabbix/

wKioL1Wny-ijNJmnAACNA5F4b4M606.jpg

# vi /etc/httpd/conf/httpd.conf

修改以下内容

DirectoryIndex index.php

ServerName localhost:80

wKiom1WnyjCSLyoAAAAofZF6RM0399.jpg

wKioL1WnzE_QDLQQAAATkNW6nms811.jpg

 

配置php

# vi /etc/php.ini

配置/etc/php.ini以下选项:

memory_limit = 256M

post_max_size = 16M

max_execution_time = 300

max_input_time = 300

session.auto_start = 0  ;必须为0

mbstring.func_overload = 2

date.timezone = PRC

 

重启http服务

#service httpd restart

wKiom1WnyorjmZRQAAA-asBeIFA890.jpg

 

三、前端页面设置:

为了方便,这里先暂时关闭防火墙和Selinux,等配置完前端在进行防火墙和Selinux规则的设置

使用浏览器登陆zabbix前端进行setup设置

http://172.16.0.101/zabbix

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第11张图片

PHP配置验证(此处必须验证通过才可以进入下一步,一般错误原因为版本太低、配置过低或者没有对应的库)

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第12张图片

数据库连接验证,这里我们数据库类型我们选择MYSQL,数据库服务器输入ZABBIXDB01IP地址172.16.0.102,数据库名和用户输入前面创建的”zabbix”,然后单击“Test Connection”验证通过,进入下一步

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第13张图片

配置zabbix_server地址与端口信息(host填写IPNAME填写主机名)

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第14张图片

配置概览

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第15张图片

 

配置完成后下载配置文件并存放到指定目录(按照窗口提示,将配置文件zabbix.conf.php上传到"/var/www/html/zabbix/conf/zabbix.conf.php"中)

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第16张图片

最后完成安装

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第17张图片

zabbix前端已经安装就绪,默认的用户名是Admin,密码是zabbix

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第18张图片

zabbix主界面如图

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第19张图片

为了安全起见,登录后第一件事先更改超级管理员密码

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第20张图片

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第21张图片

为了防止其他人随意更改zabbix配置,我们禁用ZABBIX重新安装

默认

wKiom1Wny9_BPnk1AAETXhCfWuE714.jpg

# vi/var/www/html/zabbix/include/menu.inc.php

注释掉以下内容:

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第22张图片

刷新页面

wKioL1WnzeLSkqMuAAEUaN3it4c705.jpg

四、安全设置:

Selinux设置

重启开启selinux服务

# setenforce 1

设置以下规则

# chcon -R -t httpd_sys_content_rw_t/var/www/html

# setsebool -Phttpd_can_network_connect=true

# semanage port -a -t http_port_t -p tcp10051

wKiom1WnzDTyu8XgAAB9GuDshPo791.jpg

注:若semanage命令提示不存在,是因为没有安装policycoreutils-python

 

防火墙设置

# vim /etc/sysconfig/iptables

添加以下内容:

-A INPUT -m state --state NEW -m tcp -p tcp--dport 10051 -j ACCEPT

-A OUTPUT -m state --state NEW-m tcp -p tcp --dport 10050 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 80 -j ACCEPT

ZABBIX企业监控实践(1):ZABBIX详细部署过程_第23张图片

重启防火墙服务

# service iptables restart

wKioL1WnzjaDEHXHAADFrB-OjNU954.jpg

至此,ZABBIX部署完毕

接下来,我会针对ZABBIXLAMP环境进行升级与安全加固…