部署zabbix监控服务器(1)
博文大纲:
一、zabbix运行架构
二、Zabbix监控术语
三、部署Zabbix监控平台
一、zabbix运行架构
Zabbix是一个企业级的分布式开源监控解决方案。它能够监控各种服务器的健康性、网络的稳定性以及各种应用系统的可靠性。当监控出现异常时,Zabbix通过灵活的告警策略,可以为任何事件配置基于邮件、短信、微信等告警机制。而这所有的一切,都可以通过Zabbix提供的web界面进行配置和操作,基于web的前端页面还提供了出色的报告和数据可视化功能。这些功能和特性使我们运维人员可以非常轻松的搭建一套功能强大的运维监控管理平台。
Zabbix的运行架构如下:
从上面的运行架构图可以看到,Zabbix主要有几个组件构成,分别如下:
1、Zabbix Server
Zabbix Server是Zabbix的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。它主要负责接收客户端发送的报告和信息,同时,所有配置、统计数据及配置操作数据均由其组织进行。
2、Zabbix Database Storage
主要用于存储数据,所有配置信息和Zabbix收集到的数据都被存储在数据库中。可以使用MySQL、oracle、SQLite等。
3、Zabbix Web界面
这是Zabbix提供的GUI接口,通常(但不一定)与Zabbix Server运行在同一台物理机器上。
4、Zabbix Proxy 代理服务器
这是一个可选组件,常用于分布式监控环境中,代理Server可以替Zabbix收集新能和可用性数据,汇总后统一发往Zabbix Server端。
5、Zabbix Agent 监控代理
Zabbix Agent部署在被监控的主机上,能够主动监控本地资源和应用程序,并负责收集数据发往Zabbix Server端或Zabbix Proxy端。
二、Zabbix监控术语
在Zabbix监控系统中,有一些常用的术语,下面是简单的介绍。
1、主机(host)
表示要监控的一台服务器或者网络设备,可以通过IP或主机名指定。
2、主机组(host group)
主机的逻辑组:它包含主机和模板,但同一个主机组内的主机和模板没有任何直接的关联;主机组通常在给用户或用户组指派监控权限时使用。
3、监控项(item)
表示一个监控的具体对象,例如监控服务器的CPU负载、磁盘空间等,item是Zabbix进行数据收集的核心,相对某个监控对象,每个item都由“key”来标识。
4、触发器(trigger)
其实就是一个监控阈值表达式,用于评估某监控对象接收到的数据是否在合理范围内;如果接收的数据大于阈值时,触发器的状态将从“OK”转变为“Problem”,当接收到的数据低于阈值时,又转变为“OK”状态。
5、应用集(Applications)
一组监控项组成的逻辑集合。
6、动作(action)
指对于监控中出现的问题事先定义的处理方法,例如发送通知、何时执行操作、执行的频率等等。
7、报警媒介类型(media)
表示发送通知的手段,告警通知的途径,如Email、Jabber或SMS等。
8、模板(template)
一组可以被应用到一个或多个主机上的实现集合,一个模板通常包含了应用集、监控项、触发器、图形、聚合图形、自动发现规则、web场景等几个项目;模板可以直接链接到某个主机。
模板是学习zabbix的一个难点和重点,为了实现批量、自动化监控,通常会将具有相同特征的监控项汇总到模板中,然后在主机中直接引用即可,实现快速监控部署。
三、部署Zabbix监控平台
Zabbix的监控平台部署比较简单,前提是准备好LNMP或LAMP环境。
我这里将从部署LNMP环境开始配置。
注:我这里将所有服务部署在同一台服务器上,仅仅是一个简单的监控架构,并没有部署 zabbix proxy等。
Zabbix官方的相关链接:
在进行下面的部署操作之前,请先下载我提供的各种源码包,并上传至Zabbix服务器。
1、部署安装nginx
#解包 [ ~]# tar zxf pcre-8.39.tar.gz -C /usr/src [ ~]# tar zxf nginx-1.14.0.tar.gz -C /usr/src [ ~]# tar zxf zlib-1.2.8.tar.gz -C /usr/src #安装依赖及nginx [ ~]# yum -y install openssl-devel pcre-devel [ ~]# cd /usr/src/nginx-1.14.0/ [ nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/src/pcre-8.39 --with-zlib=/usr/src/zlib-1.2.8 --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www && make && make install #创建运行用户及命令优化 [ nginx-1.14.0]# useradd -M -s /sbin/nologin www [ nginx-1.14.0]# cd [ ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ [ ~]# vim /usr/local/nginx/conf/nginx.conf #编辑nginx配置文件 server { listen 80; location / { root html; index index.php index.html index.htm; #添加index.php } #注意删除下面段落的注释符号 location ~ \.php$ { root html; fastcgi_pass 192.168.20.2:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; #修改此行 } [ ~]# nginx #启动nginx #编写php首页文件 [ ~]# cat > /usr/local/nginx/html/index.php << EOF > <?php > phpinfo(); > ?> > EOF
2、部署安装PHP
#安装依赖 [ ~]# yum -y install libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel #解包 [ ~]# tar zxf php-5.6.27.tar.gz -C /usr/src/ [ ~]# tar zxf libmcrypt-2.5.7.tar.gz -C /usr/src #编译安装libmcrypt [ ~]# cd /usr/src/libmcrypt-2.5.7 [ libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install #编译安装PHP [ libmcrypt-2.5.7]# cd ../php-5.6.27/ [ php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-zlib --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl && make && make install #优化PHP配置文件 [ php-5.6.27]# cp php.ini-production /etc/php.ini [ php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [ php-5.6.27]# chmod +x /etc/init.d/php-fpm [ php-5.6.27]# chkconfig --add php-fpm [ php-5.6.27]# chkconfig php-fpm on [ php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf [ php-5.6.27]# cd #优化其配置文件并启动 [ ~]# sed -i ‘s/pm.max_children = 5/pm.max_children = 50/g‘ /usr/local/php5.6/etc/php-fpm.conf [ ~]# sed -i ‘s/pm.start_servers = 2/pm.start_servers = 5/g‘ /usr/local/php5.6/etc/php-fpm.conf [ ~]# sed -i ‘s/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g‘ /usr/local/php5.6/etc/php-fpm.conf [ ~]# sed -i ‘s/pm.max_spare_servers = 3/pm.max_spare_servers = 35/g‘ /usr/local/php5.6/etc/php-fpm.conf [ ~]# systemctl start php-fpm [ ~]# netstat -anpt | grep 9000
客户端访问定义的php页面,如下:
5、部署Zabbix服务
#解包 [ ~]# tar zxf fping-3.12.tar.gz -C /usr/src [ ~]# tar zxf zabbix-3.2.1.tar.gz -C /usr/src #安装fping命令 [ ~]# cd /usr/src/fping-3.12/ [ fping-3.12]# ./configure && make && make install [ fping-3.12]# cd ../zabbix-3.2.1/ [ zabbix-3.2.1]# useradd -M -s /sbin/nologin zabbix [ zabbix-3.2.1]# chown zabbix:zabbix /usr/local/sbin/fping [ zabbix-3.2.1]# yum -y install net-snmp net-snmp-devel curl-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel OpenIPMI-devel libssh2-devel [ zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi && make && make install #--enable-java:方便后续监控 tomcat 程序所用 #--with-openipmi:用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、风扇工作状态、电源供应等。 [ ~]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/ [ ~]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
4、安装及配置MySQL数据库
如果需要自定义安装MySQL数据库,可以参考博文:基于centos7搭建MySQL数据库
我这里为了方便,采用脚本的方式快速安装一个MySQL数据库,如若需要,可以下载使用(注:该脚本安装后的MySQL的root密码为“123”)。
#上传我提供的包后,执行以下命令 [ ~]# sh mysql.sh #等待些许时间后,出现以下提示,则表示数据库部署成功 Starting MySQL. SUCCESS! mysql: [Warning] Using a password on the command line interface can be insecure. #创建zabbix库及用户 [ ~]# mysql -uroot -p123 #登录MySQL mysql> create database zabbix character set utf8; mysql> grant all on zabbix.* to ‘localhost‘ identified by ‘123.com‘; mysql> grant all on zabbix.* to ‘192.168.20.%‘ identified by ‘123.com‘; mysql> exit #导入zabbix数据到MySQL,注意导入的顺序,如果导入后返回提示信息,可忽略,是因为导入的命令将密码展示在了终端 [ ~]# cd /usr/src/zabbix-3.2.1/database/mysql/ [ mysql]# mysql -u zabbix -p123.com -h localhost zabbix < schema.sql [ mysql]# mysql -u zabbix -p123.com -h localhost zabbix < images.sql [ mysql]# mysql -u zabbix -p123.com -h localhost zabbix < data.sql [ ~]# chown -R zabbix:zabbix /usr/local/zabbix/
5、优化zabbix并启动
#修改zabbix配置文件 [ mysql]# sed -i ‘s/# ListenPort=10051/ListenPort=10051/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/LogFile=\/tmp\/zabbix_server.log/LogFile=\/usr\/local\/zabbix\/logs\/zabbix_server.log/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# PidFile=\/tmp\/zabbix_server.pid/PidFile=\/usr\/local\/zabbix\/logs\/zabbix_server.pid/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# DBHost=localhost/DBHost=localhost/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# DBPassword=/DBPassword=123.com/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# DBSocket=\/tmp\/mysql.sock/DBSocket=\/usr\/local\/mysql\/mysql.sock/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# DBPort=3306/DBPort=3306/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# FpingLocation=\/usr\/sbin\/fping/FpingLocation=\/usr\/local\/sbin\/fping/g‘ /usr/local/zabbix/etc/zabbix_server.conf [ mysql]# sed -i ‘s/# LogSlowQueries=0/LogSlowQueries=3000/g‘ /usr/local/zabbix/etc/zabbix_server.conf #如果数据库名称和数据库用户没有和我创建的一样,那么还需要更改以下两项 #DBName=zabbix #数据库名称 #DBUser=zabbix #登录数据库的用户名 [ mysql]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf [ mysql]# ldconfig #刷新上面的更改 [ ~]# mkdir /usr/local/zabbix/logs [ zabbix]# chown -R zabbix:zabbix /usr/local/zabbix [ ~]# cd /usr/src/zabbix-3.2.1/misc/init.d/fedora/core [ core]# cp zabbix_agentd /etc/init.d/ [ core]# cp zabbix_server /etc/init.d/ [ core]# sed -i ‘s/BASEDIR=\/usr\/local/BASEDIR=\/usr\/local\/zabbix/g‘ /etc/init.d/zabbix_server [ core]# sed -i ‘s/PIDFILE=\/tmp\/$BINARY_NAME.pid/PIDFILE=\/usr\/local\/zabbix\/logs\/$BINARY_NAME.pid/g‘ /etc/init.d/zabbix_server [ logs]# /etc/init.d/zabbix_server start #启动zabbix,也可以执行“zabbix-server”来启动 #如果脚本启动没有报错,但端口也没在监听,可以先使用脚本stop一下,再start [ logs]# netstat -anpt | grep 10051 tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 89911/zabbix_server #准备zabbix的网页文件 [ ~]# cd /usr/src/zabbix-3.2.1/frontends/ [ frontends]# cp -r php/ /usr/local/nginx/html/zabbix
6、client访问nginx代理以便配置zabbix
访问Nignx服务器的IP/zabbix即可,它会自动跳转到下面的页面:
哦吼,好像有些报错信息,如下:
上述的报错信息大概是php的配置项不符合其要求,那么就改一下php的配置文件咯!如下:
#更改php配置文件 [ ~]# sed -i ‘s/post_max_size = 8M/post_max_size =16M/g‘ /etc/php.ini [ ~]# sed -i ‘s/max_execution_time = 30/max_execution_time = 300/g‘ /etc/php.ini [ ~]# sed -i ‘s/max_input_time = 60/max_input_time = 300/g‘ /etc/php.ini [ ~]# sed -i ‘s/;date.timezone =/date.timezone = Asia\/Shanghai/g‘ /etc/php.ini [ ~]# sed -i ‘s/;always_populate_raw_post_data = -1/always_populate_raw_post_data = -1/g‘ /etc/php.ini [ ~]# systemctl restart php-fpm #重启php服务
刷新浏览器页面,如下(全部为“OK”):
输入相应的信息,数据库监听IP及端口等信息:
这里保持默认,单击下一步:
确认无误后,单击下一步:
哦吼,又报错,提示无法创建配置文件,让我们手动下载配置文件并上传到指定的目录,那就点击下载咯。
#自行将下载的配置文件上传到这个目录下 [ ~]# ls /usr/local/nginx/html/zabbix/conf/zabbix.conf.php /usr/local/nginx/html/zabbix/conf/zabbix.conf.php
然后刷新页面如下,单击“finish”完成:
输入zabbix用户名及密码进行登录(默认用户名:admin,密码:zabbix):
更改默认语言为中文:
7、解决后续制作图表的中文乱码问题
[ ~]# cd /usr/local/nginx/html/zabbix/fonts/ #切换至该目录 [ fonts]# rz #上传我提供的simkai.ttf文件,也可以从我们的windows字体中找该文件 [ fonts]# ls #确认“simkai.ttf”在该目录下 DejaVuSans.ttf simkai.ttf #修改以下文件 [ fonts]# sed -i ‘s/DejaVuSans/simkai/g‘ /usr/local/nginx/html/zabbix/include/defines.inc.php
经过上述配置,在以后制作图表时,就不会出现中文乱码的情况了。
———————— 本文至此结束,感谢阅读 ————————