企业级zabbix监控系统的搭建和运用(安装,zabbix-proxy,tomcat篇)

概念

什么是zabbix?zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

为什么要用zabbix?或者说为什么要用监控系统?监控系统不仅可以给运维人员提供各主机运行状态的信息以便运维人员方便预测未来可能出现的问题,监控系统也可以在系统出现故障的时候及时提醒运维人员,由此可见监控系统在一个完整的系统中是何等的重要,这篇博客我就记录在企业中zabbix的用法。


实践

准备

五台CentOS7.3虚拟机

IP地址从101到105各自角色分别为:
101,zabbix server
102,zabbix proxy
103,web server
104,mysql-master
105,mysql-slave


安装zabbix server

[root@testsrv1 ~]# yum install gcc  libxml2-devel   net-snmp net-snmp-devel   curl  curl-devel php  php-bcmath  php-mbstring mariadb mariadb-devel –y #在安装整个过程中所需要的依赖包
[root@testsrv4 ~]# yum install mariadb-server -y #安装mariadb
[root@testsrv5 ~]# yum install mariadb-server -y
[root@testsrv4 ~]# systemctl start mariadb #mysql-master服务器启动mariadb服务
[root@testsrv4 ~]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock #把sock文件软链接至/tmp下
#因为在写这篇博客的时候zabbix的官网不知道什么原因上不去,所以就找了个3.0.6的版本代替
[root@testsrv1 src]# tar xf zabbix-3.0.6.tar.gz #解压源码包
[root@testsrv1 src]# cd zabbix-3.0.6/ #进入源码目录
[root@testsrv1 zabbix-3.0.6]# ./configure  --prefix=/usr/local/zabbix  --enable-server  --enable-agent  --with-mysql   --with-net-snmp  --with-libcurl  --with-libxml2  --enable-java #执行配置
#如果安装上面的顺序执行的话将会遇到这样的报错信息:
checking for javac... no
configure: error: Unable to find "javac" executable in path
[root@testsrv1 zabbix-3.0.6]# 
#这就说明java没装,这里我就直接用yum装java了
[root@testsrv1 zabbix-3.0.6]# yum install java-1.8.0-openjdk-devel -y #装好jdk后再次执行configure便可以了
[root@testsrv1 zabbix-3.0.6]# ./configure  --prefix=/usr/local/zabbix  --enable-server  --enable-agent  --with-mysql   --with-net-snmp  --with-libcurl  --with-libxml2  --enable-java
[root@testsrv1 zabbix-3.0.6]# make #编译生成各种模块
[root@testsrv1 zabbix-3.0.6]# make install #将各模块安装到指定目录
[root@testsrv4 ~]# mysql #登陆数据库
MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8 collate utf8_bin; #创建数据库zabbix并设置编码格式为utf8
MariaDB [(none)]> GRANT ALL ON zabbix.* to 'zabbix'@'%' identified by 'zabbix'; #创建并授权一个zabbix用户
[root@testsrv1 zabbix]# mysql -uzabbix -pzabbix -h172.16.2.104 zabbix < /root/src/zabbix-3.0.6/database/mysql/schema.sql #导入zabbix源码包中的sql文件
[root@testsrv1 zabbix]# mysql -uzabbix -pzabbix -h172.16.2.104 zabbix < /root/src/zabbix-3.0.6/database/mysql/images.sql
[root@testsrv1 zabbix]# mysql -uzabbix -pzabbix -h172.16.2.104 zabbix < /root/src/zabbix-3.0.6/database/mysql/data.sql
[root@testsrv1 zabbix]# cp /root/src/zabbix-3.0.6/misc/init.d/fedora/core/zabbix_server /etc/init.d/ #把zabbix的server端和agent端启动脚本复制到init.d下
[root@testsrv1 zabbix]# cp /root/src/zabbix-3.0.6/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@testsrv1 zabbix]# vim /usr/local/zabbix/etc/zabbix_server.conf #打开zabbix_server配置文件确保以下配置值:
DBHost=172.16.2.104
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
Timeout=30(建议配置为30,默认是4)
[root@testsrv1 zabbix]# service zabbix_server start #启动服务

#这里要注意一个问题,我这样启动虽然提示是OK但是通过ss -ntl是看不到对应端口监听的,服务并没有正常启动。问题出在了启动脚本上,启动脚本中的BASEDIR路径是/usr/local然而我的zabbix的安装路径是/user/local/zabbix,所以启动不了是正常的,这一点的报错信息可以通过查看/var/log/messages来获取。同时启动zabbix_server服务不能用root用户来启动,所以我还得创建一个zabbix用户,那么具体操作如下。
[root@testsrv1 zabbix]# vim /etc/init.d/zabbix_server #打开启动脚本
BASEDIR=/usr/local改成BASEDIR=/usr/local/zabbix保存退出
[root@testsrv1 zabbix]# useradd zabbix -s /sbin/nologin #创建zabbix用户
[root@testsrv1 zabbix]# service zabbix_server start #再次启动zabbix_server服务
[root@testsrv1 zabbix]# ss -ntl
State       Recv-Q Send-Q               Local Address:Port                              Peer Address:Port              
LISTEN      0      128                              *:22                                           *:*                  
LISTEN      0      100                      127.0.0.1:25                                           *:*                  
LISTEN      0      128                              *:10051                                        *:*                  
LISTEN      0      128                             :::22                                          :::*                  
LISTEN      0      100                            ::1:25                                          :::*                  
[root@testsrv1 zabbix]# 
#10051端口成功监听
[root@testsrv1 zabbix]# mkdir /var/www/html/zabbix #在httpd默认路径下创建zabbix文件夹
[root@testsrv1 zabbix]# cp -a /root/src/zabbix-3.0.6/frontends/php/* /var/www/html/zabbix/ #把zabbix的php文件复制到httpd的zabbix路径下
[root@testsrv1 zabbix]# systemctl start httpd #启动httpd

到这一步就可以打开浏览器开始访问web内容了,这里我访问172.16.2.101/zabbix

如上图,看到这个画面就说明zabbix已经成功搭建起来了,但是现在并不能正常运行,我们还需要配置不少内容,点击next step便可以看到,如下图

#首先解决php包不足的问题
[root@testsrv1 zabbix]# yum install php-gettext php-session php-ctype php-xmlreader php-xmlwriter php-xml php-net-socket php-gd php-mysql -y
[root@testsrv1 zabbix]# systemctl restart httpd #重启httpd

刷新页面后就可以看到错误提示已经少很多了,如图

包不足的问题解决了下面该解决php配置的问题了。

[root@testsrv1 zabbix]# vim /etc/php.ini #打开php配置文件按错误提示配置以下内容
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
#保存退出
[root@testsrv1 zabbix]# chown -R apache /var/www/html/zabbix #这里建议把zabbix网页路径改成apache的属主,不这样做的话无法自动生成zabbix.conf.php
[root@testsrv1 zabbix]# systemctl restart httpd #再次重启httpd

刷新页面如果看到如下图所示没有任何报错信息就可以点击下一步了

这个界面是配置数据库的,一一对应填写即可

下一步后是配置zabbix server的配置界面如图,host直接填写101本机就可以了名字只要方便识别就行

配置好后点击下一步出现下图再次点击下一步即可。

如图下所示,出现这样的界面就是zabbix.conf.php创建成功,如果没有设置目录为apache属主的话这里会提示把配置文件下载然后上传到服务器上的指定位置,设置属主后apache有写入权限可以直接自动生成。

点击finish后便出现登陆界面,zabbix就算是安装完成,默认的账号是:Admin(注意大写)密码是:zabbix

如下图,成功安装zabbix

这里要说一点,zabbix默认是英文的,而且官方也自带了中文设置,但是如果直接设置成中文的话会存在乱码问题,要解决乱码问题的话需要复制一个字体文件到zabbix的web目录下的fonts中然后配置zabbix根目录下的include下的defines.inc.php文件,把注释为“//font file name”这行的文件名字改为添加的字体文件的名字保存退出就行了,不需要重启服务。不过我不太建议用中文界面,因为用惯了中文界面忽然面对英文界面会比较手足无措,而用惯了英文界面用中文界面是没有问题的。

那么,到这里zabbix安装部分就结束了,下面开始演示几种服务的zabbix监控方案。


监控tomcat

#首先搭建java gateway
[root@testsrv4 zabbix]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb-devel java-1.8.0-openjdk-devel -y #安装所需要的包
#准备好zabbix的源码包放在104上
[root@testsrv4 src]# tar xf zabbix-3.0.6.tar.gz #解压源码包
[root@testsrv4 src]# cd zabbix-3.0.6/ #移动到目录
[root@testsrv4 zabbix-3.0.6]# ./configure --prefix=/usr/local/zabbix --enable-java --with-net-snmp --with-mysql --with-ssh2 #编译配置
[root@testsrv4 zabbix-3.0.6]# make && make install #编译生成模块并安装
[root@testsrv4 zabbix-3.0.6]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh #打开配置文件
START_POLLERS=50 #这个值默认是5,如果要监控的tomcat比较多的话这个值需要大一些,表示的意思是启动多少个进程轮询java
TIMEOUT=30 #默认是3,建议改大以防误判
#保存退出
[root@testsrv4 zabbix-3.0.6]# /usr/local/zabbix/sbin/zabbix_java/startup.sh #启动
[root@testsrv4 zabbix-3.0.6]# ss -ntl
State       Recv-Q Send-Q               Local Address:Port                              Peer Address:Port              
LISTEN      0      50                               *:3306                                         *:*                  
LISTEN      0      128                              *:22                                           *:*                  
LISTEN      0      100                      127.0.0.1:25                                           *:*                  
LISTEN      0      128                             :::22                                          :::*                  
LISTEN      0      100                            ::1:25                                          :::*                  
LISTEN      0      50                              :::10052                                       :::*                  
[root@testsrv4 zabbix-3.0.6]# 
#10052端口成功监听

#在企业中为了方便升级和管理程序在必要的情况下要么编译要么用二进制包来安装程序,下面我在103上装tomcat就以二进制包安装方式来
[root@testsrv3 ~]# tar xf jdk-7u79-linux-x64.tar.gz -C /usr/local/ #解压jdk到/usr/local下
[root@testsrv3 ~]# tar xf apache-tomcat-7.0.82.tar.gz -C /usr/local/ #解压Tomcat到/usr/local下
[root@testsrv3 ~]# ln -s /usr/local/{apache-tomcat-7.0.82,tomcat} #分别创建软链接为了方便升级管理
[root@testsrv3 ~]# ln -s /usr/local/{jdk1.7.0_79,jdk}
[root@testsrv3 ~]# vim /etc/profile.d/java.sh #写环境变量配置文件
export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/usr/local/tomcat
export PATH=JAVA_HOME/bin:JAVA_HOME/jre/bin:TOMCAT_HOME/bin:PATH
export CLASSPATH=.CLASSPATH:JAVA_HOME/lib:JAVA_HOME/jre/lib:JAVA_HOME/lib/tools.jar
[root@testsrv3 ~]# source /etc/profile.d/java.sh #配置生效
[root@testsrv3 ~]# java -version #测试环境变量是否配置成功
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

#打开zabbix server的### Option: JavaGateway配置段
[root@testsrv1 zabbix]# vim /usr/local/zabbix/etc/zabbix_server.conf #在javagateway段添加以下配置:
JavaGateway=172.16.2.104
StartJavaPollers=50 #和javagateway的配置对应
#保存退出
[root@testsrv1 zabbix]# service zabbix_server restart #重启服务
[root@testsrv3 ~]# catalina.sh start #启动tomcat服务
[root@testsrv3 ~]# mkdir /usr/local/tomcat/webapps/test #创建测试页面目录
[root@testsrv3 ~]# vim /usr/local/tomcat/webapps/test/index.html #写一个测试页面,内容任意写好了最好测试一下能否访问
[root@testsrv3 ~]# tar xf zabbix-3.0.6.tar.gz #复制一份zabbix的源码包到tomcat server上解压
[root@testsrv3 ~]# cd zabbix-3.0.6/ #cd到源码目录
[root@testsrv3 zabbix-3.0.6]# yum install gcc gcc-c++ -y #装编译工具
[root@testsrv3 zabbix-3.0.6]# ./configure --prefix=/usr/local/zabbix --enable-agent #编译配置
[root@testsrv3 zabbix-3.0.6]# make && make install #编译安装
[root@testsrv3 ~]# vim /usr/local/tomcat/bin/catalina.sh #打开tomcat启动脚本添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS 
-Dcom.sun.management.jmxremote #启动远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #默认端口
-Dcom.sun.management.jmxremote.authenticate=false #不使用认证
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl
-Djava.rmi.server.hostname=172.16.2.103" #tomcat地址
[root@testsrv3 ~]# catalina.sh stop #重启tomcat
[root@testsrv3 ~]# catalina.sh start
[root@testsrv3 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf #打开zabbix agent的配置文件
Server=172.16.2.101
Hostname=172.16.2.103 #这里的名字和之后添加的主机名要一致
StartAgents=3
#保存退出
[root@testsrv3 ~]# cp -a zabbix-3.0.6/misc/init.d/fedora/core/zabbix_agentd /etc/init.d #复制启动脚本到/etc/init.d下
[root@testsrv3 ~]# vim /etc/init.d/zabbix_agentd #打开启动脚本更改以下配置
BASEDIR=/usr/local/zabbix
[root@testsrv3 ~]# useradd zabbix -s /sbin/nologin #创建zabbix用户,这个很重要
[root@testsrv3 ~]# service zabbix_agentd start #启动服务

#这里要注意启动服务后检查一下日志中服务启动时使用的配置文件路径是否正确,很重要否则无法获取数据

以上配置完毕,现在去zabbix添加主机

添加主机操作看下图

需要注意的配置项如下图

然后点击templates添加一些自带模板,如果添加不上的话就是模板之间重复关联的原因,去掉Zabbix Agent模板就可以了

从上面的图中不难看出,zabbix server的监控没有通,那是因为在zabbix server上还没有把agent启动起来,那先启动起来吧

[root@testsrv1 zabbix]# vim /etc/init.d/zabbix_agentd #首先还是要更改启动脚本的BASEDIR路径,不同的编译安装路径这里就需要不同的配置
[root@testsrv1 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf #打开配置文件更改以下配置
StartAgent=3
#保存退出
[root@testsrv1 zabbix]# service zabbix_agentd start #启动服务

如图,如果各可用性(Availability)都是绿色的就行了

如下图,tomcat-server已经监控到数据了


主动模式搭建,zabbix-proxy

被动模式就是由zabbix server向zabbix agent发出指令获取数据,即zabbix agent被动的去获取数据并返回给zabbix server,zabbix server周期性的向agent 索取数据,这总模式的最大问题就是会加大zabbix server的工作量,在数百台服务器的环境下zabbix server不能及时获取到最新数据,但这也是默认的工作方式。

主动模式是由zabbix agent主动采集数据并返回给zabbix server,不再需要zabbix serve进行干预,因此主动模式在一定程度上可减轻zabbix server的压力。

[root@testsrv2 ~]# yum install gcc  libxml2-devel   net-snmp net-snmp-devel   curl  curl-devel php  php-bcmath  php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel  -y #在102上安装之后操作所需要的依赖包
#事先准备好zabbix的源码包
[root@testsrv2 ~]# tar xf zabbix-3.0.6.tar.gz #解压包
[root@testsrv4 ~]# mysql #在104上登陆mariadb
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin; #创建zabbix_proxy数据库
MariaDB [(none)]> grant all on zabbix_proxy.* to 'proxy'@'%' identified by 'proxy'; #授权proxy用户
[root@testsrv2 ~]# cd zabbix-3.0.6/ #切换到源码目录
[root@testsrv2 zabbix-3.0.6]# useradd zabbix -s /sbin/nologin #创建用户
[root@testsrv2 zabbix-3.0.6]# ./configure  --prefix=/usr/local/zabbix  --enable-proxy  --enable-agent  --with-mysql   --with-net-snmp  --with-libcurl  --with-libxml2  --enable-java #编译配置
[root@testsrv2 zabbix-3.0.6]# make && make install #编译安装
[root@testsrv2 zabbix-3.0.6]# mysql -h172.16.2.104 -uproxy -pproxy zabbix_proxy < database/mysql/schema.sql #导入sql文件
[root@testsrv2 zabbix-3.0.6]# vim /usr/local/zabbix/etc/zabbix_proxy.conf #打开配置文件配置以下内容
ProxyMode=0
Server=172.16.2.101
Hostname=proxy1 #这里配置的是什么添加主机的时候主机名也要写什么
DBHost=172.16.2.104
DBName=zabbix_proxy
DBUser=proxy
DBPassword=proxy
ProxyLocalBuffer=24 #数据保存时间(小时)
ProxyOfflineBuffer=720
HeartbeatFrequency=60 #心跳检测时间(秒)
ConfigFrequency=60 #新加入的主机检测时间(秒)
StartPollers=50
JavaGateway=172.16.2.104
StartJavaPollers=50
Timeout=30
CacheSize=1024M
DataSenderFrequency=10
#保存退出
[root@testsrv2 zabbix-3.0.6]# cp -a misc/init.d/fedora/core/zabbix_server /etc/init.d/ #复制启动脚本到/etc/init.d下
[root@testsrv2 zabbix-3.0.6]# vim /etc/init.d/zabbix_server #打开启动脚本更改
BASEDIR=/usr/local/zabbix
BINARY_NAME=zabbix_proxy
#保存退出
[root@testsrv2 zabbix-3.0.6]# service zabbix_server start #启动服务

配置完毕,下面去web上操作,如下图

填写相应配置

点击Add

这个时候zabbix_proxy是没有数据的,因为在102上没有配置agent,所以现在去配一下。

[root@testsrv2 zabbix-3.0.6]# vim /usr/local/zabbix/etc/zabbix_agentd.conf #打开配置文件配置以下内容
Server=172.16.2.102 #这里要注意要设置为代理的IP地址
ServerActive=172.16.2.102 #同时配置主动模式和被动模式
StartAgents=1
Hostname=172.16.2.102
Timeout=30
UnsafeUserParameters=1
#保存退出
[root@testsrv2 zabbix-3.0.6]# cp -a misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ #复制启动脚本到/etc/init.d下
[root@testsrv2 zabbix-3.0.6]# vim /etc/init.d/zabbix_agentd #更改BASEDIR
BASEDIR=/usr/local/zabbix
#保存退出
[root@testsrv2 zabbix-3.0.6]# service zabbix_agentd start #启动服务

下面是添加一个合适的模板,我的方法是克隆一个模板然后全部改成主动模式

打开模板界面

选择Template OS Linux

拉到最下面点击Full clone

改个名字然后拉到最下面点Add

改好名字找到模板点进去然后点击监控项(Items)

往下拉,全选然后再往下拉批量更新(Mass update)

把模式改成主动模式,下面的数据更新时间(Update interval (in sec))最好改小一些因为在实验环境能看得清楚一些,改完了拉到最下面点更新

现在新建一个主机把模板关联上去


注意:代理(Monitored by proxy)选项要设置为之前配置的proxy1

添加模板,其实创建主机这个操作可以直接克隆之前的主机来更改就行的,这里要注意的是最好直接改成刚才创建的模板,图中是之前的被动模板

目前zabbix-proxy的agent是主动模式,但是zabbix-server和tomcat-server的agent都还是被动模式,zabbix-server就由本机监控就可以不用改了,改一下tomcat-server的agent配置就行了。这里我就不演示操作了,之前已经演示过主动模式怎么配置了。
要注意的是:
1,agent配置文件中serveractive要写proxy的地址
2,agent配置文件中的server也要写proxy的地址,也就是102
这两点很重要,不然无法获取数据

将服务器上的配置更改完毕并重启服务后回到web界面配置各主机的代理设置为proxy1,还需要将刚才创建的动态模板关联上主机。这些操作没有什么难度,不做图片演示。

最后配置完毕之后可以看到三台主机都是绿色且zabbix-proxy和tomcat-server为代理状态,这样就算是完成配置了。


未完待续

zabbix在实战中用到的地方还有很多很多,因为篇幅和图片太多的问题,这篇博客就介绍到这里,以后还会有其他zabbix的实战用法。
转载请注明源地址,谢谢。