摘要:在生产环境上对服务器进行网络参数(比如CPU、内存等)的监控是很必要的,比如当服务器网络参数如内存不够用、磁盘空间快要占满时及时通知运维人员进行处理,保证服务器系统的安全。而zabbix就是这么一个非常流行且方案成熟的网监控解决方案,这篇文章主要分享我这两天部署zabbix经验【我搞zabbix的那两天(2)将介绍zabbix使用及短信等告警实现】,部署过程中遇到很多问题,比如zabbix server安装完毕,初始化web设置页面一直进入不了,执行到配置数据库连接信息时一直连接不了等问题,为方便说明我将按照部署顺序来介绍,最后一部分将汇总本次部署遇到的问题。
一、Zabbix简介
1. zabbix是一个基于WEB界面的,并提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数(比如CPU 负荷,内存使用,网络状况,端口监视,日志监视等等指标!),保证服务器系统的安全运营;并提供柔软的通知机制以让运维人员能够快速定位。
2. zabbix通过C/S模型来收集数据,通过B/S模型模式在web端展示和进行配置。被监控端:主机设备通过安装agent收集数据并发送给server端,网络设备通过SNMP收集数据并发送给server端。server端:通过收集SNMP和agent发送来的数据,将数据写入到后台数据库中(例如:mysql,oracle),在通过web展示出来。
3. 运行环境
zabbix server 需要运行在LAMP或者是LNMP的环境下;本文介绍安装 的是zabbix-3.2.0版本,其对应的LAMP版本要求如下:
应用名 |
版本号 |
下载地址 |
Zabbix |
3.2.0 |
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.0/ |
Linux(CentOS) |
6.5 |
|
Apache |
2.2.15 |
yum方式安装,下面会介绍到 |
MySQL |
5.5.29 |
源码安装 |
PHP |
5.6.31(需5.4.X系列及以上) |
yum方式升级安装,下面会介绍到 |
二、Zabbix 的部署准备
2.1 LAMP环境准备与配置
这里的依赖包均通过yum安装,因此需事先安装和配置好yum,这里不做叙述。
yum -y install gcc gcc-c++ autoconf httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-bcmath mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel
2.2升级PHP
php建议>=5.4,如果小于这个版本会出现以下报错:
PHP Parse error: syntax error, unexpected '[' in /var/www/html/zabbix/index.php on line 29,我第一次安装就是没有升级PHP,查看apache日志一直报这个错误,所以这里要进行升级PHP。
2.2.1 卸载PHP5.3.3
php -V
查看已经安装的php的包:
yum list installed | grep php
可以看到如下原有的安装包:
php-common.x86_64 0:5.3.3-38.el6
php-gd.x86_64 0:5.3.3-38.el6
php-ldap.x86_64 0:5.3.3-38.el6
php-mysql.x86_64 0:5.3.3-38.el6
php-odbc.x86_64 0:5.3.3-38.el6
php-pdo.x86_64 0:5.3.3-38.el6
php-pear.noarch 1:1.9.4-4.el6
php-pecl-apc.x86_64 0:3.1.9-2.el6
php-pecl-memcache.x86_64 0:3.0.5-4.el6
php-pgsql.x86_64 0:5.3.3-38.el6
php-soap.x86_64 0:5.3.3-38.el6
php-xml.x86_64 0:5.3.3-38.el6
php-xmlrpc.x86_64 0:5.3.3-38.el6
全都是5.3.3-38.el6版本的。
使用rpm -e --nodeps ph-xxx依次删掉上面的5.3.3版本
2.2 安装PHP5.6.x
现在我们就可以进行安装5.6.x版本的PHP了。
rpm -Uvh http://download.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm;
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm;
yum install --enablerepo=remi,remi-php56 php php-opcache php-pecl-apcu php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-pdo php-pear php-fpm php-cli php-xml php-bcmath php-process php-gd php-common;
之后再来编辑php.ini
2.3 配置php.ini
编辑PHP相关的 /etc/php.ini 文件。(这里必须做相应的修改,否则在之后的web初始化过程中会报错。)
vim /etc/php.ini
修改如下条目或者通过 sed 命令进行内容替换
date.timezone = Asia/Shanghai
max_execution_time = 300
post_max_size = 16M #有时候这里会被设置32M
max_input_time=300
memory_limit = 128M
mbstring.func_overload = 2
或通过 sed 方式进行内容替换:
sed -i "s/;date.timezone =/date.timezone = Asia\/Shanghai/g" /etc/php.ini
sed -i "s#max_execution_time = 30#max_execution_time = 300#g" /etc/php.ini
sed -i "s#post_max_size = 8M#post_max_size = 32M#g" /etc/php.ini
sed -i "s#max_input_time = 60#max_input_time = 300#g" /etc/php.ini
sed -i "s#memory_limit = 128M#memory_limit = 128M#g" /etc/php.ini
sed -i "/;mbstring.func_overload = 0/ambstring.func_overload = 2\n" /etc/php.ini
最后开启httpd并设置开机自启动
chkconfig httpd on
service httpd start
2.3 MySQL数据库的准备
开启mysql并设置开机自启动:
#chkconfig mysqld on
#service mysqld start
添加mysql数据库的 zabbix用户,并设置密码:
先用root身份登入mysql中,并执行以下命令
mysql>use mysql
mysql>insert into mysql.user(Host,User,Password) values("localhost","zabbix",password("zabbix"));
mysql>flush privileges;
2.4 为zabbix创建用户
groupadd zabbix -g 506
useradd -g zabbix -u 506 -m zabbix
PS:这里将zabbix用户的UID与GID均设置为506。
三、Zabbix Server安装
3.1 tar包下载
下载地址:
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.0/
3.2编译安装
tar xvf zabbix-3.2.0.tar.gz
./configure --prefix=/usr/local/zabbix --enable-server --enable-proxy --enable-agent --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl
make
make install
3.3 检查zabbix是否添加到系统服务
#cat /etc/services | grep zabbix
如果看到如下信息则代表已经添加成功,或者可以自行手动添加到 /etc/services 文件中:
zabbix-agent 10050/tcp #Zabbix Agent
zabbix-agent 10050/udp #Zabbix Agent
zabbix-trapper 10051/tcp #Zabbix Trapper
zabbix-trapper 10051/udp #Zabbix Trappe
3.4建立zabbix所需的数据库
root身份等人到mysql数据库中,并执行以下命令建立zabbix数据库:
mysql>create database zabbix character set utf8;
mysql>grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql>flush privileges;
而后在下载的源文件中存在一个database/mysql 子目录,中间存放在建 立zabbix数据库结构的SQL脚本文件。先进入到zabbix源文件所在的 目录,并执行以下语句:
l mysql -u zabbix -p zabbix < ./database/mysql/schema.sql
l mysql -u zabbix -p zabbix < ./database/mysql/images.sql
l mysql -u zabbix -p zabbix < ./database/mysql/data.sql
PS:以上三条指令将目的执行sql脚本,构建zabbix数据库的结构,每 次都要输入mysql中zabbix账户的密码
3.5 创建zabbix的的日志文件和连接
mkdir /var/log/zabbix
chown zabbix.zabbix /var/log/zabbix
ln -s /usr/local/zabbix/etc /etc/zabbix
ln -s /usr/local/zabbix/bin/* /usr/bin/
ln -s /usr/local/zabbix/sbin/* /usr/sbin/
3.6 拷贝与配置zabbix启动文件
cp misc/init.d/fedora/core/zabbix_* /etc/init.d/
chmod 755 /etc/init.d/zabbix_*
sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#g" /etc/init.d/zabbix_server
sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#g" /etc/init.d/zabbix_agentd
3.7 配置zabbix_server.conf服务端文件
编辑并修改 /etc/zabbix/etc/zabbix_server.conf 文件,并修改如下条目:
DBHost=IP #当前服务器IP
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户
DBPassword=zabbix #数据库密码(先前设置了zabbix数据库密码为zabbix)
或者用 sed 方式替换文件内容:
sed -i "s/DBUser\=root/DBUser\=zabbix/g" /etc/zabbix/etc/zabbix_server.conf
sed -i "/# DBPassword=/aDBPassword=zabbix\n" /etc/zabbix/etc/zabbix_server.conf
sed-i "s#tmp/zabbix_server.log#var/log/zabbix/zabbix_server.log#g" /etc/zabbix/etc/zabbix_server.conf
3.8 配置 zabbix_agentd.conf 文件
(这里是为了监控 server 本身, 如对其他服务器进行监控,配置文件相类似)
PS:这里放的的是zabbix_agentd.conf是客户端配置文件,这里是为了演示,因此这里配置这个文件的目的就是为了能够实现对本地服务器的监控。该文件需要修改如下四个条目:
Server=127.0.0.1 #此处添加服务端的 ip,如服务器不为本机,则需要填写远端 zabbix_server 的 ip 地址
ServerActive=127.0.0.1 #此处修改为服务端的 ip,这里应该修改为该服务器对外的ip地址
/tmp/zabbix_agentd.log #修改日志路径
UnsafeUserParameters=0 #默认是不启用自定义脚本功能的,要自定义 key ,需开启,设置为1
Include=/etc/zabbix/zabbix_agentd.conf.d/ #自定义的 agent d 配置文件可以写在这个目录下面
利用sed 方式内容替换的执行命令如下:
sed -i "s/Server\=127.0.0.1/Server\=127.0.0.1,192.168.1.89/g" /etc/zabbix/etc/zabbix_agent.conf
sed -i "s/ServerActive\=127.0.0.1/ServerActive\=192.168.1.89:10051/g" /etc/zabbix/etc/zabbix_agent.conf
sed -i "s#tmp/zabbix_agentd.log#var/log/zabbix/zabbix_agentd.log#g" /etc/zabbix/etc/zabbix_agentd.conf
sed -i "#UnsafeUserParameters=0#aUnsafeUserParameters=1\n" /etc/zabbix//etc/zabbix_agentd.conf
3.9 拷贝PHP网页文件到Apache中
cp -r ./frontends/php/ /var/www/html/zabbix
chown -R apache.apache /var/www/html/zabbix
3.10 开启zabbix
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agent start
至此,zabbix的安装完成。
四、进入Web页面设置zabbix
浏览器中输入地址:http://ip/zabbix,则可看到如下初始化欢迎界面。
PS:其中ip代表本地服务器对外开放的ip地址
点击next
PS: PHP字符串函数重载必须禁用
编辑/etc/php.ini修改mbstring.func_overload= 1再点击“Next step”操作即可。
接下来是进行数据库的连接配置,依次填入数据库的连接信息之后,点击“Next step”按钮,
一直报“Cannot connect to the Database...Error connecting to database:Permission defined”
刚开始判断是防火墙未开启端口或者是数据库没有给zabbix用户授予远程连接的权限导致,于是检查了防火墙并没有开启,排除防火墙原因,继续授予了zabbix远程连接权限,如下:
然后还是连接不了,又根据错误提示权限不够,推断可能是zabbix配置文件没有权限,于是授予配置文件权限:chown -R zabbix:zabbix /etc/zabbix/*,发现依然连接不了。
后面想了一下,可能是selinux访问控制策略导致,于是使用setenforce 0命令暂时关闭SELinux,
再点击“Next step”,发现是可以了到下一步了
这是安装完后汇总的信息
看到这张图,说明已经安装成功了点击Finish按钮后进入zabbix的管理操作登陆界面
点击Finish按钮后进入zabbix的管理操作登陆界面
填写完账号和密码后登陆zabbix的管理操作界面,如下:
至此,zabbix server 基本安装结束。
五、问题汇总
5.1 安装好zabbix server后发现页面访问出现问题。
查看more /var/log/httpd/error_log错误日志发现
“PHP Parse error: syntax error, unexpected '[' in /var/www/html/zabbix/index.php on line 29”
这是由于PHP版本<5.4,升级PHP即可,查看本文“2.2 升级PHP”
5.2 web页面配置数据库连接不上
如图:
确保服务器防火墙开放了数据库端口;
确保数据库开放了zabbix用户远程连接用户的权限,使用如下命令:
mysql>grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
mysql>show grants for zabbix;
如果前两项都没问题,确保SELinux是否关闭。使用setenforce 0命令
5.3部署好后,出现数据库连接问题:XXXX/mysql.sock找不到
检查连接数据IP是否正确,比如localhost为连接访问页面所在的主机的数据库,及当前操作的Windows电脑。
IP一般填服务器的内网IP即可。
检查zabbix_agentd.conf文件中Server=IP,此处IP为服务端的IP地址,内网外网全部写上都好分隔。
检查zabbix_server.conf文件中DB相关设置,包括IP,端口,sock地址等信息是否与当前数据库安装信息一致。
学习本就是一个不断模仿、练习、再到最后面自己原创的过程。
虽然可能从来不能写出超越网上通类型同主题博文,但为什么还是要写?
于自己而言,博文主要是自己总结。假设自己有观众,毕竟讲是最好的学(见下图)。于读者而言,笔者能在这个过程get到知识点,那就是双赢了。
当然由于笔者能力有限,或许文中存在描述不正确,欢迎指正、补充!
感谢您的阅读。如果本文对您有用,那么请点赞鼓励。