目录

五、zabbix实现数据库监控

1、在agent端设置

2、在浏览器前端设置 

六、zabbix对JMX(Java)应用的支持

七、server和agent的关系

1、agent端的信息采集变被动为主动

2、zabbix的server端的分布式架构——zabbix代理

第一步:参考官网文档

 第二步:引入代理机制的概念

 第三步:实验环境

第四步:安装软件包

第五步:安装并配置proxy

第六步:在agent端配置(server8上)

 八、zabbix的监控报警

1、实验环境:先注册一个可以实现微信报警功能的帐号

2、zabbix报警平台的使用

3、配置zabbix_server

4、在浏览器中查看

5、在云报警平台上的配置

6、模拟问题


 一般提供的模板都中都有自带的插件,没有的话可以导入第三方插件,再没有就自己编译插件。

五、zabbix实现数据库监控

1、在agent端设置

第一步:实验环境

在zabbix服务端(server6)中安装监控mysql的zabbix插件。其实测试时应该是在agent端安装,但是server6上已经有了mysql了,所以直接在本机上安装监控插件。换言之,server6既是mysql客户端,也是zabbix的agent端;同时也是zabbix的server端。自己监控自己!!!

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库

第二步:复制模板到</etc/zabbix/zabbix_agentd.d/>目录下,因为此目录中的配置文件模板可以用来直接作为监控项。复制完成后重启zabbix-agent服务使其生效。

systemctl restart zabbix-agent.service        #重启zabbix-agent服务

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_02

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_03

以下图为例:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_04

 第三步:执行脚本和php文件

 具体操作步骤为:(1)zabbix的监控配置文件中的监控命令</etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf>,调用的是(2)</var/lib/zabbix/percona/scripts>目录中的shell脚本,(3)脚本中调用的是同一目录下的<ss_get_mysql_stats.php>文件。php文件中获取到数据库的基本信息后,返回给shell脚本,zabbix监控配置目录中调用脚本得到要监控的参数。

修改 php文件中访问数据库的帐号和密码。

vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php 
      30 $mysql_user = 'root';
      31 $mysql_pass = 'Westos+007';

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_05

第四步:执行脚本测试

直接执行的话,报错,因为找不到执行路径下的php环境变量。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_06

 通过以下方式解决:

rpm -qa| grep php
rpm -ql rh-php72-php-cli-7.2.24-1.el7.x86_64                
ln -s /opt/rh/rh-php72/root/usr/bin/php /usr/bin/php        #在所需路径中创建软链接
which php

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_07

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_08

脚本执行结果如下图,执行成功后,会将获取到的参数存放在</tmp/localhost-mysql_cacti_stats.txt>文件中。

/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg     #执行脚本

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_09

注意:以root用户身份执行脚本后,生成的“.log”文件的所有人也是root。在浏览器端应该使用zabbix用户身份运行,之前产生的文件将导致zabbix身份运行的结果无法操作。因此在正式执行前应先将该文件删除,以防对后续操作产生影响。 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_10

2、在浏览器前端设置 

操作步骤如下:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_11

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_12

这里导入一个模板文件<zbx_percona_mysql_template.xml>

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_13

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_14

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_15

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_16

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_17

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_18

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_19

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_20

添加完成后查看server6主机,监控mysql的模板已添加。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_21

模板添加完成后,令其在图形中显示:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_22

这里所有关于“MySQL”的参数,都是刚才的模板创建的。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_23

选择几个参数,查看图形统计效果:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_24

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_25

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_26

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_27

 所有采集信息的模板文件都是在</etc/zabbix/zabbix_agentd.d/>中的“***.conf”文件。

六、zabbix对JMX(Java)应用的支持

实验环境:在server8中测试zabbix对java插件的支持。

1、下载安装tomcat

第一步:下载并移动到指定目录下

tar zxf apache-tomcat-8.5.24.tar.gz          #解压tomcat
yum install -y java-1.8.0-openjdk            #安装支持java的软件openjdk

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_28

移动tomcat目录到</usr/local/tomcat>下,方便编译。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_29

更改配置文件参考tomcat官网:

Apache Tomcat® - Apache Tomcat 8 Software Downloadshttps://tomcat.apache.org/download-80.cgi

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_30

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_31

第二步:更改配置文件:

vim /usr/local/tomcat/bin/catalina.sh        #编辑文件内容如下

    109 CATALINA_OPTS=-'Dcom.sun.management.jmxremote.port=8888
    110   -Dcom.sun.management.jmxremote.ssl=false
    111   -Dcom.sun.management.jmxremote.authenticate=false'

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_32

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_33

第三步:启动tomcat

启动完以后,查看端口出现上一步设置的8888。这个端口是上一步手动设置的监控端口,其他端口为tomcat调用的端口。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_34

第四步:在zabbix的server服务器(server6)中安装zabbix-java插件

这个插件是zabbix监控java应用的组件,所有的java应用必须通过这个java网关

yum install -y zabbix-java-gateway        #安装插件来监控java网关
systemctl enable --now zabbix-java-gateway.service        #设置zabbix-java开机自启动
netstat -antlp |grep 10052                 #检查端口10052,证明启动成功

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_35

第五步:编辑zabbix-java的server端

编辑zabbix-server端的配置文件,告诉zabbix怎么去调用java-gateway

vim /etc/zabbix/zabbix_server.conf     #编辑zabbix-server的配置文件
    297 JavaGateway=172.25.254.6
    305 JavaGatewayPort=10052
    313 StartJavaPollers=5
systemctl restart zabbix-server.service        #重启zabbix-server服务

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_36

其中配置文件更改内容如下:分别表示java网关为<172.25.254.6>;监听端口为10052端口;线程数为5个(和上图所示一致)。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_37

第六步:在浏览器前端设置

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_38

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_39

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_40

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_41

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_42

 以下两个模板都可以,一般来说选择“通用模板”,监控的参数更多

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_43

添加完成后,刷新。“server8”的“JMX”已经亮了,证明JMX可以正常使用。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_44

具体的执行流程是:zabbix-server——>java-gateway:10052——>jmx:8888——>tomcat 

第六步:通过图形可视化

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_45

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_46

通过浏览器访问,增加8080端口的访问量 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_47

 在统计界面可以监视到,已经有访问量进来。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_48

 七、server和agent的关系

对agent来说,它的主动模式和被动模式都是支持的。agent的模式由server端决定,主动被动主要取决于server端给agent端加的什么模板。

1、agent端的信息采集变被动为主动

下图所示,agent端通过这些端口被server端监听。那么是否可以让agent端主动将数据传到server端?随着agent端的增多,每个agent端又有许多监控项,那么如果让server端主动去监控agent端的话,agent端的压力会很大;所以需要让agent主动将自己的数据发送给server端。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_49

以agent端(server7)为例:

取消server上的模板:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_50

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_51

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_52

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_53

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_54

选择完成后,看到主机页面已经切换到“agent active”模板,表示agent主动将数据回传给server端。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_55

随便选一个监控项,这里显示此监控项已经成为了“主动式”的。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_56

 查看图形统计,也可以统计出来。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_57

2、zabbix的server端的分布式架构——zabbix代理

因为即使agent端主动向server端发送采集的信息,在agent节点过多时,对server端的压力还是会很大。因此就需要对serber端进行水平扩容,以提高其处理数据峰值的能力。

第一步:参考官网文档

1 代理https://www.zabbix.com/documentation/5.0/zh/manual/distributed_monitoring/proxies

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_58

 第二步:引入代理机制的概念

Zabbix proxy 使用场景:

监控远程区域设备;
监控本地网络不稳定区域;
监控上千设备时,减轻 zabbix server 的负荷;
简化分布式监控的维护。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_59

proxy的功能只有数据采集,无法用来做事件处理。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_60

 第三步:实验环境

从zabbix监控界面将server7移除,将server7设置为zabbix_proxy。

第四步:安装软件包

yum install -y zabbix-proxy        #安装软件包

systemctl disable --now zabbix-agent.service        #关闭zabbix-agent并禁止自启动

第五步:安装并配置proxy

1 Red Hat Enterprise Linux/CentOShttps://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/rhel_centos在server6中为zabbix-proxy配置数据库:

由于zabbix是分布式的,所以数据库可以在其他主机配置。这里选用server6中的数据库。

mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
                                #创建数据库
mysql> grant all on zabbix_proxy.* to zabbix@'%' identified by 'Westos+007';
                                #授权用户访问
mysql> flush privileges;        #刷新授权表

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_61

更改server7中的zabbix_proxy配置:

vim /etc/zabbix/zabbix_proxy.conf 
         30 Server=172.25.254.6
         49 Hostname=server7
        162 DBHost=172.25.254.6
        173 DBName=zabbix_proxy
        196 DBPassword=Westos+007

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_62

 向server6数据库中导入proxy的数据(proxy主机只需要安装mysql的客户端即可):

proxy主机上的文件为</usr/share/doc/zabbix-proxy-mysql-5.0.19/schema.sql.gz>,将其导入到server6中的数据库中。

cd /usr/share/doc/zabbix-proxy-mysql-5.0.19            #进入目录
zcat schema.sql.gz | mysql -h 172.25.254.6 -uzabbix -pWestos+007 zabbix_proxy
                                                    #导入该目录下的数据库到172.25.254.6

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_63

在server6的数据库中查看,proxy的数据已导入到数据库中。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_64

 在server7中启动zabbix-proxy:

systemctl start zabbix-proxy.service            #启动zabbix-proxy

启动完成后查看进程,可以看到进程都已启用。注意:如果这一步启动失败,很可能是数据库问题

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_65

查看zabbix_proxy的日志,发现proxy服务找不到“server7”对应的主机。

cat /var/log/zabbix/zabbix_proxy.log         #查看zabbix_proxy的日志

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_66

为了解决上述问题,因此需要在浏览器中做以下更改:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_67

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_68

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_69

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_70

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_71

zabbix_server -R config_cache_reload        #刷新zabbix_server端的配置缓存

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_72

 再次查看日志,可以看到proxy端的服务已经成功启动

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_73

 查看server6(zabbix_server)端的日志,显示代理已成功发送数据 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_74

第六步:在agent端配置(server8上)

更改server8中的配置文件,令其指向的master成为proxy服务器 。 更改完成后重启zabbix-agent服务。

vim /etc/zabbix/zabbix_agentd.conf                 #更改agent端的配置文件
        117 Server=172.25.254.7              #改成proxy的地址
        158 ServerActive=172.25.254.7
systemctl restart zabbix-agent.service             #重启zabbix-agent服务

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_75

在proxy端中查看端口:

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_76

测试:在浏览器中查看

可以看到agent端可以正常使用,但是其中的JMX服务失效了。 这是因为agent端的java应用需要通过“java-geteway”访问,原本的zabbix_server中安装了JMX服务,可以访问agent的java;但是proxy端并没有设置”java-gateway“的端口,因此proxy要采集angent端的java信息的话,必须设置“java-gateway”端口。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_77

修正方法:在proxy中添加“java-gateway”

vim /etc/zabbix/zabbix_proxy.conf             #编辑zabbix-proxy的配置文件
        338 JavaGateway=172.25.254.6
        346 JavaGatewayPort=10052
        354 StartJavaPollers=5

grep -v ^# /etc/zabbix/zabbix_proxy.conf | uniq

systemctl restart zabbix-proxy.service            #重启zabbix-proxy服务

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_78

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_79

 配置更改完成后,重启“zabbix-proxy.service”服务,在浏览器中已看到JMX已经连接上。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_80

 八、zabbix的监控报警

1、实验环境:先注册一个可以实现微信报警功能的帐号

睿象云-AIOps智能运维平台 | 用人工智能点亮传统IT运维睿象云AIOps智能运维平台方案提供商,为传统IT运维插上人工智能的翅膀,云监控平台、云压测平台、业务可用性监测平台、云告警平台,为IT运维人员提供一站式AIOps 可视化智能运维解决方案,用人工智能点亮传统运维。https://www.aiops.com/

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_81

2、zabbix报警平台的使用

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_82

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_83

3、配置zabbix_server

wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.0.tar.gz
                                #获取Cloud Alert Agent包:
tar zxf ca_zabbix_release-4.0.0.tar.gz -C /usr/lib/zabbix/alertscripts
                                #解压到zabbix脚本目录

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_84

进入到刚解压的目录下,执行脚本。并输入上一步中获得到的“Appkey",接着输入要报警的zabbix地址,以及登录zabbix时设置的用户名和密码。

cd /usr/lib/zabbix/alertscripts/cloudalert/bin/        #进入zabbix脚本目录
./install.sh 933177f39ca247c59fe2f76d8db18848          #执行启动脚本,并注册认证用户
    请输入Zabbix管理地址:http://172.25.254.6/zabbix
    Check connection success!
    请输入Zabbix管理员账号:Admin
    请输入Zabbix管理员密码: zabbix

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_85

 更改zabbix脚本的权限:

chown zabbix.zabbix cloudalert/ -R

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_86

4、在浏览器中查看

列表中出现了许多类型的报警信息。为了方便测试,我们仅测试一项报警信息。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_87

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_88

其他项目中也出现了“云平台”的信息。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_89

这里是具体的执行动作: 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_90

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_91

5、在云报警平台上的配置

新增通知策略: 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_92

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_93

6、模拟问题

关掉server8上的agent。

systemctl stop zabbix-agent.service

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_94

 在浏览器中查看,server8已经“失联”了。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_php_95

 查看“监测栏“的“问题”选项,故障信息已经出现,并且报警信息也发送到报警平台上。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_96

查看云平台的服务日志:

cat /usr/lib/zabbix/alertscripts/cloudalert/logs/cloudalert.log
                    #显示云平台报警信息日志

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_97

在平台和微信上都能看到相应的通知: 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_mysql_98

 

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_zabbix 主动获取数据的命令_99

 server8中重新启动zabbix-agent服务,监测窗口显示”已解决“ ,云平台上也显示问题已解决。

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_数据库_100

zabbix 主动获取数据的命令 zabbix从数据库获取告警信息_java_101