一、zabbix运行架构
Zabbix是一个企业级的分布式开源监控解决方案。它能够监控各种服务器的健康性、网络的稳定性以及各种应用系统的可靠性。当监控出现异常时,Zabbix通过灵活的告警策略,可以为任何事件配置基于邮件、短信、微信等告警机制。而这所有的一切,都可以通过Zabbix提供的Web界面进行配置和操作,基于Web的前端页面还提供了出色的报告和数据可视化功能。这些功能和特性使运维人员可以非常轻松的搭建一套功能强大的运维监控管理平台。
Zabbix的运行架构如下图所示:
从图中可以看,Zabbix主要有几个组件构成,分别介绍如下:
1.1、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 Server收集性能和可用性数据,汇总后统一发往Zabbix Server端。
5、Zabbix Agent监控代理
Zabbix Agent部署在被监控主机上,能够主动监控本地资源和应用程序,并负责收集数据发往Zabbix Server端或Zabbix Proxy端。
1.2、zabbix服务进程
根据功能和用途,默认情况下zabbix包含5个进程,分别是zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外还有一个zabbix_java_gateway是可选的功能,需要另外安装。下面分别介绍下它们各自的作用。
1、zabbix_agentd
zabbix_agentd是Zabbix Agent监控代理端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘、网络使用情况等。
2、zabbix_get
zabbix提供的一个工具,通常在Zabbix server或者Zabbix proxy端执行用来获取远程客户端信息,这其实是Zabbix server去Zabbix Agent端拉取数据的过程,此工具主要用来进行用户排错。例如在Zabbix server端获取不到客户端的监控数据时,可以使用zabbix_get命令测试获取客户端数据来做故障排查。
3、zabbix_sender
zabbix提供的一个工具,用于发送数据给Zabbix server或者Zabbix proxy,这其实是Zabbix Agent端主动推送监控数据到Zabbix Server端的过程,通常用于耗时比较长的检查或者有大量主机(千台以上)需要监控的场景。此时通过主动推送数据到Zabbix server,可以在很大程度上减轻Zabbix server的压力和负载。
4、zabbix_proxy
Zabbix Proxy的代理守护进程。功能类似Zabbix server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交或者被提交到Zabbix server上。
5、zabbix_java_gateway
Zabbix2.0之后引入的一个功能。顾名思义:Java网关,主要用来监控JAVA应用环境,类似zabbix_agentd进程。需要特别注意的是,它只能主动去推送数据,而不能等待zabbix server或者zabbix proxy来拉取数据。它的数据最终会给到zabbix server或者zabbix proxy上。
6、zabbix_server
Zabbix server是整个Zabbix系统的核心进程。其它进程zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到Zabbix server来统一进行处理。
1.3、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的安装部署非常简单,官方提供了四种安装途径,分别是二进制rpm包安装方式、源码安装方式、容器安装方式和虚拟机镜像安装方式,根据学习方式和运维经验,这里推荐大家用源码方式安装zabbix server,而通过rpm包方式安装zabbix agent。
Zabbix web端是基于Apache或nginx服务器和PHP脚本语言进行构建的,要求Apache1.3.12或以上版本,PHP5.4.0或以上版本,同时对PHP扩展包也有要求,例如GD要求2.0或以上版本,libXML要求2.6.15或以上版本。
zabbix的数据存储支持多种数据库,可以是MySQL、Oracle、PostgreSQL、SQLite等,这里我们选择MySQL数据库作为后端存储。zabbix要求MySQL5.0.3或以上版本,同时需要InnoDB引擎。
2.1、lnmp环境部署
1、安装nginx
这里使用nginx最新稳定版本 nginx-1.14.0,同时还需要下载openssl源码,这里下载的是openssl-1.0.2n版本,安装过程如下:
[root@centos ~]# yum -y install zlib pcre pcre-devel openssl openssl-devel
[root@centos ~]# useradd -s /sbin/nologin www
[root@centos ~]#./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--with-openssl=/app/openssl-1.0.2n \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre
这里将nginx安装到了/usr/local/nginx目录下。其中,–with-openssl后面的/app/openssl-1.0.2n表示openssl源码包的路径。
2、mysql的安装
这里安装的mysql为mysql5.7.22版本,为了简单期间,这里使用mysql官方的yum源进行安装,地址为:https://repo.mysql.com, 如果要安装mysql5.7版本,可下载https://repo.mysql.com/mysql57-community-release-el7.rpm ,然后在操作系统上执行如下安装即可:
[root@localhost app]# rpm –ivh mysql57-community-release-el7.rpm
安装完成后,可通过yum在线安装mysql,安装过程如下:
[root@localhost app]# yum install mysql-server mysql mysql-devel
默认情况下安装的是mysql57版本。安装完成后,就可以起到mysql服务了,执行如下命令:
[root@localhost ~]# systemctl start mysqld
mysql启动后,系统会自动为root用户设置一个临时密码,可通过# grep “password” /var/log/mysqld.log 命令获取MySQL的临时密码,显示密码的信息类似:
2018-06-17T11:47:51.687090Z 1 [Note] A temporary password is generated for root@localhost: =rpFHM0F_hap
其中,“=rpFHM0F_hap”就是临时密码。通过此密码即可登录系统。
mysql5.7版本后,对密码安全性加强了很多,临时密码只能用于登录,登录后需要马上修改密码,不然无法执行任何sql操作,同时,对密码长度和密码强度有了更高要求,通过sql命令可查看密码策略信息:
mysql> SHOW VARIABLES LIKE 'validate_password%';
默认,validate_password_length是对密码长度的要求,默认是8,validate_password_policy是对密码强度的要求,有LOW(0)、MEDIUM(1)和STRONG(2)三个等级,默认是1,即MEDIUM,表示设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。必须修改两个全局参数:
首先,修改validate_password_policy参数的值:
mysql> set global validate_password_policy=0;
由于默认要求的密码长度是8,所以还需要修改validate_password_length的值,此参数最小值为4,修改如下:
mysql> set global validate_password_length=6;
上面两个全局参数修改完成后,就可以重置mysql的root密码了,执行如下命令:
mysql>set password=password('123456');
3、安装php
(1)、依赖库安装
[root@mysqlserver php-7.2.3]#yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel openldap openldap-devel
(2)、不编译安装PHP7
[root@mysqlserver ~]# tar zxvf php-7.2.3.tar.gz
[root@mysqlserver ~]# cd php-7.2.3
[root@mysqlserver php-7.2.3]#./configure --prefix=/usr/local/php7 --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-zlib --with-curl --with-gd --with-gettext --with-bcmath --with-sockets --with-ldap --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo -enable-tokenizer --enable-zip
[root@mysqlserver php-7.2.3]# make
[root@mysqlserver php-7.2.3]# make install
[root@mysqlserver php-7.2.3]# cp php.ini-production /usr/local/php7/lib/php.ini
[root@mysqlserver php-7.2.3]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
4、PHP配置优化
php安装完成后,找到php的配置文件php.ini(本例是/usr/local/php7/lib/php.ini),然后修改如下内容:
post_max_size = 16M
max_execution_time = 300
memory_limit = 128M
max_input_time = 300
date.timezone = Asia/Shanghai
5、配置lnmp环境
修改nginx配置文件nginx.conf,添加php-fpm的整合配置,这里仅仅给出与php-fpm整合的配置,内容如下:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
接着,修改php-fpm配置文件,启用php-fpm默认配置,执行如下操作:
[root@master etc]#cd /usr/local/php7/etc
[root@master etc]#cp php-fpm.conf.default php-fpm.conf
[root@master etc]#cp php-fpm.d/www.conf.default php-fpm.d/www.conf
最后,启动lnmp服务:
[root@master nginx]#systemctl start php-fpm
[root@master nginx]#/usr/local/nginx/sbin/nginx
- 2、编译安装zabbix server
安装zabbix server之前,需要安装一些系统必须的依赖库和插件,这些依赖可通过yum在线安装,执行如下命令:
[root@localhost ~]#yum –y install net-snmp net-snmp-devel curl curl-devel libxml2 libevent libevent-devel
接着,创建一个普通用户用于启动zabbix的守护进程
[root@localhost ~]#groupadd zabbix
[root@localhost ~]#useradd -g zabbix zabbix
下面正式进入编译安装zabbix server过程,操作如下:
[root@localhost ~]#tar zxvf zabbix-4.0.0.tar.gz
[root@localhost ~]#cd zabbix-4.0.0
[root@localhost zabbix-4.0.0]# ./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --with-libxml2
[root@localhost zabbix-4.0.0]# make &&make install
下面解释一下configure的一些配置参数含义:
–with-mysql:表示启用MySQL作为后端存储,如果MySQL客户端类库不再默认的位置(rpm包方式安装的MySQL,MySQL客户端类库在默认位置,因此只需指定“–with-mysql”即可,无需指定具体路径),需要在MySQL的配置文件中指定路径,指定方法是指定mysql_config的路径,例如,如果是源码安装的mysql,安装路径为/usr/local/mysql,就可以这么指定:“–with-mysql=/usr/local/mysql/bin/mysql_config”。
–with-net-snmp:用于支持SNMP监控所需要的组件。
–with-libcurl:用于支持WEB监控,VMware监控及SMTP认证所需要的组件,对于SMTP认证,需要7.20.0或以上版本。
–with-libxml2:用于支持VMware监控所需要的组件。
另外,编译参数中, –enable-server、 –enable-agent、和–enable-proxy分别表示启用zabbix的server、agent和proxy组件。
由于zabbix启动脚本路径默认指向的是/usr/local/sbin路径,而我们zabbix的安装路径是/usr/local/zabbix,因此,需要提前创建如下软链接:
[root@localhost ~]#ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
[root@localhost ~]#ln -s /usr/local/zabbix/bin/* /usr/local/bin/
2.3、创建数据库和初始化表
对于Zabbix server和proxy守护进程以及Zabbix前端,都需要连接到一个数据库。Zabbix agent不需要数据库的支持。因此,需要先创建一个用户和数据库,并导入数据库对应的表。
先登录数据库,创建一个zabbix数据库和zabbix用户,操作如下:
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> flush privileges;
接下来开始导入zabbix的表信息,需要执行三个sql文件,sql文件在zabbix源码包中database/mysql/目录下。先进入这个mysql目录,然后进入sql命令行,按照如下SQL语句执行顺序导入SQL,执行如下操作:
mysql> use zabbix;
mysql> source schema.sql;
mysql> source images.sql;
mysql> source data.sql;
2.4、配置zabbix server端
zabbix的安装路径为/usr/local/zabbix,那么zabbix的配置文件位于/usr/local/zabbix/etc目录下,zabbix_server.conf就是zabbix server的配置文件,
打开此文件,修改如下几个配置项:
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
ListenIP=0.0.0.0
StartPollers=5
StartTrappers=10
StartDiscoverers=10
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
其中,每个选项含义介绍如下:
ListenPort是zabbix server默认监听端口
LogFile用来指定zabbix server日志输出路径
DBHost为数据库的地址,如果数据库在本机,可不做修改
DBName为数据库名称
DBUser为连接数据库的用户名
DBPassword为连接数据量对应的用户密码
ListenIP为zabbix server监听的IP地址,也就是zabbix server启动的监听端口对哪些ip开放,Agentd为主动模式时,这个值建议设置为0.0.0.0。
StartPollers用于设置zabbix serve服务启动时启动Pollers(主动收集数据进程)的数量,数量越多,则服务端吞吐能力越强,同时对系统资源消耗越大。
StartTrappers用于设置zabbix server服务启动时启动Trappers(负责处理Agentd推送过来的数据的进程)的数量。Agentd为主动模式时,zabbix server需要设置这个值大一些。
StartDiscoverers用于设置zabbix server服务启动时启动Discoverers进程的数量,如果zabbix监控报Discoverers进程忙时,需要提高该值。
AlertScriptsPath用来配置zabbix server运行脚本存放目录,一些供zabbix server使用的脚本,都可以放在这里。
接着,还需要添加管理维护zabbix的脚本并启动服务,可从zabbix源码包misc/init.d/fedora/core/目录中找到zabbix_server和zabbix_agentd管理脚本,然后复制到/etc/init.d目录下。
[root@localhost ~]#cp /app/zabbix-zabbix-4.0.0/misc/init.d/fedora/core/zabbix_server /etc/init.d/zabbix_server
[root@localhost ~]#cp /app/zabbix-zabbix-4.0.0/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
[root@localhost ~]#chmod +x /etc/init.d/zabbix_server #添加脚本执行权限
[root@localhost ~]#chmod +x /etc/init.d/zabbix_agentd #添加脚本执行权限
[root@localhost ~]#chkconfig zabbix_server on #添加开机启动
[root@localhost ~]#chkconfig zabbix_agentd on #添加开机启动
最后,可直接启动zabbix server:
[root@localhost ~]#/etc/init.d/zabbix_server start
Zabbix Server可能会启动失败,抛出如下错误:
Starting Zabbix Server: /usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
这个问题一般发生在源码方式编译安装MySQL的环境下,可编辑/etc/ld.so.conf 文件,添加如下内容:
/usr/local/mysql/lib
其中,/usr/local/mysql是mysql的安装路径。然后执行如下操作,即可正常启动Zabbix Server:
[root@zabbix_server sbin]# ldconfig
[root@zabbix_server sbin]# /etc/init.d/zabbix_server start
2.5、安装与配置zabbix agent
1、zabbix agent端的安装
zabbix agent端的安装建议采用rpm包方式安装,可从http://repo.zabbix.com/zabbix/ 下载zabbix的agent端rpm包,版本与zabbix server端保持一致,安装如下:
[root@localhost app]#wget \http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.11-1.el7.x86_64.rpm
[root@localhost app]#rpm -ivh zabbix-agent-3.4.11-1.el7.x86_64.rpm
安装完成后,zabbix agent端已经安装完成了,zabbix agent端的配置目录位于/etc/zabbix下,可在此目录进行配置文件的修改。
2、zabbix agent端的配置
zabbix agent端的配置文件是/etc/zabbix/zabbix_agent.conf,需要修改的内容为如下:
LogFile=/var/log/zabbix/zabbix_agentd.log #zabbix agentd日志文件路径
Server=172.16.213.231 #指定zabbix server端IP地址
StartAgents=3 #指定启动agentd进程的数量,默认是3个,设置为0,表示关闭agentd的被动模式(zabbix server主动来agent拉取数据)。
ServerActive=172.16.213.231 #启用agentd的主动模式(zabbix agent主动推送数据到zabbix server),启动主动模式后,agentd将主动将收集到的数据发送到zabbix server端,ServerActive后面指定的ip就是zabbix server端IP。
Hostname=172.16.213.232 #需要监控服务器的主机名或者IP地址,此选择的设置一定要和zabbix web端主机配置中对应的主机名一致。
Include=/etc/zabbix/zabbix_agentd.d/ #相关配置都可以放到此目录下,自动生效。
UnsafeUserParameters=1 #启用agent端自定义item功能,设置此参数为1后,就可以使用UserParameter指令了。UserParameter用于自定义itme。
所有配置修改完成后,就可以启动zabbix_agent了:
[root@slave001 zabbix]#systemctl start zabbix-agent
2.6、安装zabbix gui
Zabbix web是php代码编写的,因此需要有php环境,前面已经安装好了lnmp环境,因此可以直接使用。
这里我们将zabbix web安装到/usr/loca/nginx/html目录下,因此,只需将Zabbix web的代码放到此目录即可。
Zabbix web的代码在Zabbix 源码包中的frontends/php目录下,将这个php目录拷贝到/usr/loca/nginx/html目录下并改名为zabbix即可完成Zabbix web端的安装。
在浏览器输入http://ip/zabbix,然后会检查zabbix web运行环境是否满足,
如下图所示:
点击进入下一步,见下图:
此步骤会检测PHP环境是否满足zabbix web的运行需求,重点关注红框里面的内容,红框左边是系统PHP的当前环境,红框右边是zabbix对环境的最低要求,如果满足要求,最后面会显示OK字样。如果显示失败,就根据提示进行配置即可,主要是PHP参数配置,还有就是PHP中依赖的一些模块。
设置完成后,进入下一步,如下图所示:
这是配置连接数据库的信息,数据库类型选择mysql,然后输入数据库的地址,默认mysql在在本机的话就输入127.0.0.1,输入localhost可能出问题,下面就输入zabbix数据库使用的端口、数据库名,登录数据库的用户名和密码即可,然后进入下一步,如下图所示:
这个步骤是配置zabbix server信息,输入zabbix server的主机名或ip,以及端口等信息即可,接着进入配置信息预览界面:
确认输入无误后,进入下一步所示界面:
这个过程是将上面步骤配置好的信息组成一个配置文件,然后放到zabbix配置文件目录,如果此目录没有权限的话,就会提示让我们手动放到指定路径下,这里按照zabbix的提示进行操作即可。
将配置文件放到指定的路径下后,点击“finish”完成zabbix web的安装过程。这样就可以登录zabbix的web平台了。
默认的zabbix平台登录用户名为Admin,密码为zabbix。
2.7、测试zabbix server监控
如何知道zabbix server监控已经生效呢,可通过zabbix server上的zabbix_get命令来完成,在zabbix server上执行如下命令即可进行测试:
[root@zabbix_server sbin]#/usr/local/zabbix/bin/zabbix_get -s 172.16.213.232 -p 10050 -k "system.uptime"
其中:
-s是指定zabbix agent端的IP地址。
-p是指定zabbix agent端的监听端口。
-k是监控项,即item。
如果有输出结果,表面zabbix server可以从zabbix agent获取数据,配置成功。
至此,zabbix监控平台构建完成了。