监控对于运维来说,相当重要,可以称为是运维人员的眼。一个良好的监控系统可以帮助运维人员快速的找到问题的根源,减少宕机的时间,提高故障处理速度。由此就看可以看出,身为运维人员,掌握常见的监控软件的使用是最基本的技能之一。
一、Zabbix概述
1)Zabbix简介
Zabbix是一个基于web界面的提供分布式系统监控以及网络监控功能的企业级开源运维平台,也是目前国内互联网后用户中使用最广的监控软件,大概85%以上企业在使用zabbix做监控解决方案。Zabbix的入门容易、上手简单,功能强大并且开源免费,zabbix易于管理和配置,能生成比较漂亮的数据图,其自动发现功能大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户灵活进行数据采集,而分布式系统架构可以支持监控更多的设备,理论上,通过zabbix提供的插件式架构,可以满足企业的任何需求(部分插件功能会收费)。
2)常用的监控软件的优、缺点
常见的监控工具有:Zabbix、nagios、cacti,本次博文只简单介绍这三种,各自的优、缺点如下:
(1)Zaabix
优点:
- 1)支持多平台的企业级分布式开源监控软件(redhat、centos、Ubuntu、Debian);
- 2)安装部署简单,多种数据采集插件灵活集成;
- 3)功能强大、可实现复杂多条件告警;
- 4)自带画图功能,得到的数据可以绘制成图形,以图像更直观的展示;
- 5)提供多种api接口,支持调用脚本;
- 6)出现问题时可以自动远程执行命令(需要agent设置执行权限);
缺点:- 1)项目批量修改不方便;
- 2)系统级别报警设置相对比较多,如果筛选的话报警邮件比较多,并且自定义的项目需要自己设置,过程比较繁琐(可以去网上导入别人模板来进行修改);
- 3)缺少数据汇总功能,如果无法查看一组服务器平均值,需要二次开发;
- 4)客户端需要安装zabbix agent程序;
(2)Nagios
Ngios 是一款开源的企业级监控系统,能够实现对系统cou、磁盘、网络等硬件方面参数的基本监控,以及smtp、pop3等各种基本的服务类型,另外通过安装插件和编写监控脚本,用户可以实现应用监控(功能比zabbix弱)
优点:
- 1)出错的服务器、应用和设备会自动重启,自动日志滚动;
- 2)配置灵活,可以自定义shell脚本,通过分布式监控模式;
- 3)支持以冗余方式进行主机监控,报警设置多样;
- 4)命令重新加载配置文件无需打扰Nagios的运行;
缺点:- 1)事件控制台功能很弱,插件易用性差;
- 2)对性能、流量等指标的处理不给力;
- 3)看不到历史数据,只能看到报警事件,很难追查故障原因;
- 4)配置复杂,初学者投入的时间、精力和成本比较大;
(3)Cacti
由于Zabbix的出现,这种技术已经被淘汰了,可能对于工作时间较久的会有所了解,这也就不多介绍了!
4)Zabbix的功能
Zabbix具有以下功能:
- 1)具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库、性能监控、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制);
- 2)支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现);
- 3)支持自动发现(low discovery)key 实现动态监控项的批量监控(需写脚本);
- 4)支持分布式,能集中展示、管理分布式的监控点 ;
- 5)扩展性强,server 提供通用接口(api 功能),可以自己开发完善各类监控(根据相关接口编写程序实现)编写插件容易,可以自定义监控项,报警级别的设置;
- 6)服务器/代理和客户端模式; 灵活的触发器;可以定义非常灵活的问题阈值,称为触发器; 高可定制的报警;发送通知,可定制的报警升级,收件人,媒体类型。 CPU 负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视等等;
4)Zabbix的监控原理
Zabbix通过c/s模式采集数据,通过b/s模式在web端展示和配置。
被控制端:主机通过安装agent方式采集数据,网络设备通过snmp方式采集数据;
Server端:通过收集snmp和agent发送的数据,写入数据库,再通过php+nginx(或者apache)在web前端显示;
5)Zabbix的组成
zabbix主要由以下几个重要的组件构成,具体作用如下:
- Zabbix Server:负责接收Agent发送报告信息的核心组件,所有的配置、数据统计、数据操作都由它组织进行;
- Database strongage:负责存储所有的配置信息以及收集的数据;
- Web interface:是zabbix的GUI接口,通常情况下与Zabbix Server运行在同一台主机上;
- Proxy:属于可选组件,常用于分布式监控环境中,代理Server收集部分数据,然后转发到Server,可以减轻Server的压力;
- Agent:部署在被监控的主机(客户端)上,负责收集被监控端主机的数据,如CPU、内存、数据库等数据,然后发送到Server端或Proxy端。
6)Zabbix运行流程
1)Agent需要安装到被监控的主机上,她负责定期收集各项数据并发送到zabbix server 端;
2)zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图;
agent收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控向内检测的数据提交给server/proxy;
被动:server向agent请求获取监控项的数据,agent返回数据;
被动:比较消耗性能。
在被动模式中,zabbix server(或者proxy)询问agent数据,如CPU的负载情况,然后zabbix agent回送结果,zabbix server周期性的向agent 索取数据,这种模式的最大问题就是会加大zabbix server的工作量,也是默认的工作模式。
主动:效率高,但数据可能缺失。
主动模式是由zabbix agent主动采集数据并返回给zabbix server,不再需要zabbix serve进行干预, 因此主动模式在一定程度上可减轻zabbix server的压力。
7)Zabbix监控架构
在实际生产环境中,Zabbix根据网络环境,监控规模等外界因素分为三种架构,如图:
(1)server-client架构(直接连接)
server-client架构是Zabbix的最简单的架构,监控机和被监控机之间不经过任何代理,直接在zabbix server和zabbix agentd之间进行数据交互,适用于网络比较简单,设备比较少的监控环境;
(2)master-node-client架构(node架构)
master-node-client架构是Zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境。每个node同时也是一个server端。node下面可以接proxy,也可以直接接client。node有自己的配置文件和数据库。其要做的是将配置信息和监控数据项master同步。当master发生故障或损坏,node可以保证架构的完整性;
(3)server-proxy-client架构(proxy架构)
proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后在提交给server。该架构经常是和master-node-client架构做比较的架构,一般适用于跨机房、跨网络的中型网络架构的监控;
二、搭建LNMP环境
由于部署Zabbix需要使用到LNMP的环境,所以需事先部署。关于其部署详细工程,可以参考搭建LNMP,接下来关于LNMP命令的解释就不再详细解释了!
1)安装Nginx
下载nginx软件包
[root@zabbix ~]# yum -y install pcre-devel openssl-devel zlib-devel
[root@zabbix ~]# tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0
[root@zabbix nginx-1.14.0]# ./configure && make && make install
//由于只是使用nginx提供简单的web页面启动即可!
[root@zabbix ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
//创建符号链接,稍后启动
2)安装PHP
下载PHP软件包
[root@zabbix ~]# yum -y install freetype-devel libpng-devel libjpeg-devel libxml2-devel bzip2-devel libcurl-devel
//安装php所需依赖
[root@zabbix ~]# tar zxf libmcrypt-2.5.7.tar.gz && cd libmcrypt-2.5.7
[root@zabbix libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
//安装libmcrypt
[root@zabbix ~]# tar zxf php-5.6.27.tar.gz && cd php-5.6.27
[root@zabbix php-5.6.27]# ./configure --prefix=/usr/local/php5.6 \
--with-config-file-path=/etc --with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--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
[root@zabbix ~]# cp /root/php-5.6.27/php.ini-production /etc/php.ini
[root@zabbix ~]# cp /root/php-5.6.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@zabbix ~]# chmod +x /etc/init.d/php-fpm
[root@zabbix ~]# chkconfig --add php-fpm
[root@zabbix ~]# cd /usr/local/php5.6/etc
[root@zabbix etc]# cp php-fpm.conf.default php-fpm.conf
[root@zabbix etc]# sed -i 's#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g' php-fpm.conf
[root@zabbix etc]# sed -i 's/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g' php-fpm.conf
[root@zabbix etc]# sed -i 's/pm.max_children = 5/pm.max_children = 50/g' php-fpm.conf
[root@zabbix etc]# sed -i 's/pm.start_servers = 2/pm.start_servers = 5/g' php-fpm.conf
[root@zabbix etc]# sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g' php-fpm.conf
[root@zabbix etc]# sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 35/g' php-fpm.conf
[root@zabbix etc]# systemctl start php-fpm
[root@zabbix etc]# ss -lnt | grep 9000
LISTEN 0 128 *:9000 *:*
//保证PHP启动成功
3)配置nginx可以与PHP相互连接
[root@zabbix ~]# vim /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf; //修改这一行即可
}
[root@zabbix ~]# echo -e "" > /usr/local/nginx/html/index.php
[root@zabbix ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@zabbix ~]# nginx
4)安装mysql数据库
下载mysql数据库软件提供的是一键安装mysql的脚本进行安装的,直接执行脚本即可!
[root@zabbix ~]# ls | grep mysql
mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
mysql.sh
[root@zabbix ~]# sh mysql.sh
//安装完成后,数据库用户root的密码为123
这里就先不测试PHP与mysql的链接性了,对自己搭建的LNMP有信心!
三、安装Zabbix
下载Zabbix软件包
[root@zabbix ~]# tar zxf fping-3.12.tar.gz && cd fping-3.12
[root@zabbix fping-3.12]# ./configure && make && make install
//编译安装fping,使Zabbix支持自动发现功能
[root@zabbix fping-3.12]# groupadd zabbix
[root@zabbix fping-3.12]# useradd zabbix -M -g zabbix
[root@zabbix fping-3.12]# chown zabbix:zabbix /usr/local/sbin/fping
//创建zabbix用户使其可以使用fping命令
[root@zabbix ~]# yum -y install net-snmp net-snmp-devel curl-devel OpenIPMI-devel libssh2-devel java-devel
//安装zabbix所需依赖
[root@zabbix ~]# tar zxf zabbix-3.2.1.tar.gz && cd zabbix-3.2.1
[root@zabbix 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:使其可以监控设备的硬件信息
[root@zabbix ~]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/
[root@zabbix ~]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
//为zabbix常用命令创建符号连接
[root@zabbix ~]# mysql -u root -p123
mysql> create database zabbix character set utf8;
mysql> grant all privileges on zabbix.* to 'zabbix'@'192.168.1.%' identified by '123.com';
//创建zabbix数据库及用户
[root@zabbix ~]# cd /root/zabbix-3.2.1/database/mysql/
[root@zabbix mysql]# mysql -uzabbix -p123.com -h 192.168.1.8 zabbix < schema.sql
[root@zabbix mysql]# mysql -uzabbix -p123.com zabbix -h 192.168.1.8 < images.sql
[root@zabbix mysql]# mysql -uzabbix -p123.com zabbix -h 192.168.1.8 < data.sql
//进入相应的目录导入相应的数据库文件
//切记需按照顺序导入,否则可能会出现意外
[root@zabbix mysql]# cd /usr/local/zabbix/etc
[root@zabbix etc]# egrep -v '^#|^$' zabbix_server.conf
LogFile=/tmp/zabbix_server.log
PidFile=/tmp/zabbix_server.pid
DBHost=192.168.1.8
DBName=zabbix
DBUser=zabbix
DBPassword=123.com
DBPort=3306
Timeout=4
FpingLocation=/usr/sbin/fping //fping(自动发现)文件路径
LogSlowQueries=3000
//以上是修改完成的配置文件
[root@zabbix etc]# find / -name libmysqlclient.so
/usr/local/mysql/lib/libmysqlclient.so
[root@zabbix etc]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
//添加libmysqlclinet的接口文件路径
[root@zabbix etc]# ldconfig
//主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。
[root@zabbix etc]# find / -name mysql.sock
/usr/local/mysql/mysql.sock
[root@zabbix etc]# ln -s /usr/local/mysql/mysql.sock /tmp/
//添加mysql.sock文件到tmp目录下,否则会在启动时会出现错误
[root@zabbix etc]# cd /root/zabbix-3.2.1/
[root@zabbix zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_server /etc/init.d/
[root@zabbix zabbix-3.2.1]# chmod +x /etc/init.d/zabbix_server
[root@zabbix zabbix-3.2.1]# sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#g" /etc/rc.d/init.d/zabbix_server
//将zabbix系统脚本中zabbix的安装路径进行更改
[root@zabbix zabbix-3.2.1]# systemctl daemon-reload
[root@zabbix zabbix-3.2.1]# /etc/init.d/zabbix_server start
Reloading systemd: [ 确定 ]
Starting zabbix_server (via systemctl): [ 确定 ]
[root@zabbix zabbix-3.2.1]# ss -lnt | grep 10051
LISTEN 0 128 *:10051 *:*
//添加为系统服务,并启动,确定其端口在监听,默认是10051
//如果启动失败查看/tmp/zabbix_server.log这个日志内容
[root@zabbix ~]# cp -r /root/zabbix-3.2.1/frontends/php/ /usr/local/nginx/html/zabbix
//复制zabbix的网页目录到nginx网页根目录下
[root@zabbix ~]# ps -ef | grep php
//根据查询结果就可以看出运行php程序的用户是nobody
[root@zabbix ~]# chown -R nobody:nobody /usr/local/nginx/html/zabbix/
//所以需要保证运行PHP的用户对这个目录有绝对的权限否则将无法更改数据
[root@zabbix ~]# sed -i 's/post_max_size = 8M/post_max_size = 16M/g' /etc/php.ini
[root@zabbix ~]# sed -i 's/max_input_time = 60/max_input_time = 300/g' /etc/php.ini
[root@zabbix ~]# sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
[root@zabbix ~]# echo -e "date.timezone = Asia/Shanghai" >> /etc/php.ini
[root@zabbix ~]# echo -e "always_populate_raw_post_data = -1" >> /etc/php.ini
[root@zabbix ~]# systemctl restart php-fpm
//重新启动php,使其加载配置文件
但是需要注意zabbix中文乱码的问题,需要使用以下方法修改中文乱码的问题!
[root@zabbix ~]# ls | grep SIMKAI.TTF
SIMKAI.TTF
[root@zabbix ~]# sed -i 's/DejaVuSans/simkai.ttf/g' /usr/local/nginx/html/zabbix/include/defines.inc.php
[root@zabbix ~]# mv SIMKAI.TTF /usr/local/nginx/html/zabbix/fonts/simkai.ttf
如果不解决中文乱码的问题,在后期工作中将会有很大的麻烦!
本次博文主要介绍如何搭建zabbix监控系统,在此先告一段落!
——————————本文到此结束,感谢阅读————————————