JMX简单介绍:
即java管理拓展,是JAVA平台为应用程序,设备,系统等植入管理功能的框架。

优点:可以详细的监控各类JAVA程序的运行状态
缺点:监控机上需要安装zabbix-java-gateway

1.工作原理

当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix-JavaGateway请求数据,而ZabbixJavagateway收到请求后使用“JMXmanagementAPI”去查询特定的应用程序,而前提是应用程序这端在开启时需要“-Dcom.sun.management.jmxremote”参数来开启JMX远程查询就行。Java程序(被监控端)会启动自身的一个简单的小程序端口12345向Zabbix-JavaGateway提供请求数据。

zabbix监控进程的表达式 zabbix监控java进程_tomcat

配置Zabbix监控Java应用程序的关键点在于:配置Zabbix-JavaGateway、让Zabbix-Server能够连接Zabbix-JavaGateway、Tomcat开启JVM远程监控功能等

核心:在zabbix中,JMX数据的获取由zabbix-java-gateway代理程序来负责数据的采集。

2.搭建实验环境

主机名(IP) 	          服务
server1(172.25.63.1) 	zabbix-server ,zabbix-web,zabbix-agent,java-gateway
server2(172.25.63.2) 	zabbix-agent,tomcat

3.具体实现过程如下(zabbix监控tomcat的部署)

可以看出目前zabbix平台还没有监控server2上面的java应用(server2 可用性的JMX并没有显示 说明不可以被监控)

https://www.zabbix.com/documentation/4.0/zh/manual/config/items/itemtypes/jmx_monitoring1>获取 jdk 和 tomcat

实验之前:首先开启zabbix服务,数据库服务等

[root@server1 ~]# systemctl start zabbix-server
[root@server1 ~]# systemctl start zabbix-agent
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# systemctl start mariadb

(1)在server2上配置

下载tomcat和jdlk,解压,作软链接方便更新。
从真机传过来安装包
	tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
	cd /usr/local/–> ls
	ln -s apache-tomcat-8.5.24 tomcat

zabbix监控进程的表达式 zabbix监控java进程_java_02

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_03


2.修改配置使 tomcat 支持监控,端口自定义
复制 zabbix 手册,也可以在 tomcat 官网

#http://tomcat.apache.org/tomcat-8.5-doc/monitoring.html
查看官网,修改配置文件,开启服务并查看端口。
在tomcat的文件中添加JMA参数,JMA全称Java Management Extensions
即为java应用提供管理扩展功能,本次实验为开启远程监控功能
cd /usr/local/tomcat/bin
[root@server2 bin]# vim catalina.sh 

	CATALINA_OPTS='-Dcom.sun.management.jmxremote    #开启远程监控
  -Dcom.sun.management.jmxremote.port=8888      #远程监控端口(就是通过这个端口给java-zabbix-gateway提供数据)
  -Dcom.sun.management.jmxremote.ssl=false    #远程ssl验证为false
  -Dcom.sun.management.jmxremote.authenticate=false'
  
	[root@server2 bin]# ./startup.sh   #开启tomcat服务
	[root@server2 bin]# netstat -ntlp   #查看端口8080

(选做)编辑tomcat测试文件
[root@server2 tomcat]#vim webapps/ROOT/test.jsp
The time is :<%=new java.util.Date() %>

zabbix监控进程的表达式 zabbix监控java进程_数据_04

zabbix监控进程的表达式 zabbix监控java进程_数据_05

开启 tomcat

cd /usr/local/tomcat/bin
	./startup.sh

netstat -antlp | grep java

zabbix监控进程的表达式 zabbix监控java进程_数据_06

zabbix监控进程的表达式 zabbix监控java进程_数据_07

端口开启,可以在浏览器中访问tomcat默认的发布页面

在浏览器里面测试一下tomcat是否可以访问,指定访问我刚才编辑的测试文件

172.25.63.2:8080/test.jsp 可以看到目前时间时期等等

(3)【server1】直接将在server1节点上部署zabbix-java-gateway**
zabbix-server通过zabbix-java-gateway 监控tomcat:8888
.配置java-gateway端 为了节省资源,直接将在server1节点上部署zabbix-java-gateway,开启服务并设置服务开机自启动,并查看端口10052
zabbix-server:10051
zabbix-agent:10050
zabbix-java-gateway:10052
	
	yum install  zabbix-java-gateway-4.0.5-1.el7.x86_64.rpm -y

zabbix监控进程的表达式 zabbix监控java进程_数据_08

#启动 systemctl start zabbix-java-gateway
[root@server1 zabbix]# netstat -antlp | grep 10052
就是zabbix-java-Gateway:10052

访问顺序:

client -> webui -> zabbix server -> zabbix jmx:10052 ->  tomcat:8888

4:修改 zabbix_server 配置
添加javagateway的相关信息,重启服务

vim /etc/zabbix/zabbix_server.conf#重新加载
288 JavaGateway=172.25.78.1
296 JavaGatewayPort=10052
304 StartJavaPollers=5
systemctl restart zabbix-server

zabbix监控进程的表达式 zabbix监控java进程_数据_09

zabbix监控进程的表达式 zabbix监控java进程_tomcat_10

zabbix监控进程的表达式 zabbix监控java进程_数据_11

zabbix监控进程的表达式 zabbix监控java进程_数据_12

cat /var/log/zabbix/zabbix_server.log    很多个started
	    ps ax

5: 在 zabbix 界面添加 jmx 监控

添加 jmx

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_13

删除原来的http监控 不删除也可以

zabbix监控进程的表达式 zabbix监控java进程_tomcat_14

添加jmx,注意右上角

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_15

zabbix监控进程的表达式 zabbix监控java进程_java_16

打开一个 jmx 监控的图形,发现没有数据

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_17

zabbix监控进程的表达式 zabbix监控java进程_tomcat_18


#编辑配置文件

[root@server1 ~]# vim /etc/zabbix/zabbix_java_gateway.conf#重启
9 LISTEN_IP=“172.25.78.1”
17 LISTEN_PORT=10052
35 START_POLLERS=5
systemctl restart zabbix-java-gateway

zabbix监控进程的表达式 zabbix监控java进程_java_19

zabbix监控进程的表达式 zabbix监控java进程_tomcat_20

zabbix监控进程的表达式 zabbix监控java进程_数据_21

zabbix监控进程的表达式 zabbix监控java进程_tomcat_22

6:网页重新刷新页面,server2:JMX绿色

zabbix监控进程的表达式 zabbix监控java进程_tomcat_23

二.zabbix-proxy分布式监控配置

监控流程
一个监控系统运行的大概的流程是这样的:

agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,
zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。

主动监测】通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。
很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,
如果获取失败,那么将会在60秒之后重试。分两个部分:

(1)获取ACTIVE ITEMS列表

Agent打开TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据

(2)主动检测提交数据过程如下:

Agent建立TCP连接
Agent提交items列表收集的数据
Server处理数据,并返回响应状态
关闭TCP连接

【被动监测】通信过程如下:

Server打开一个TCP连接
Server发送请求agent.ping\n
Agent接收到请求并且响应<HEADER><DATALEN>1
Server处理接收到的数据1
关闭TCP连接

这里,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。
一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。

常用的监控架构平台
1,这个是最简单的架构了,常用于监控主机比较少的情况下。
2、server-proxy-agentd模式:
这个常用于比较多的机器,使用proxy进行分布式监控,有效的减轻server端的压力。

当需要监控的agent很多的时候,并且每个agent上面有很多的数据项被监控,这对于zabbix-server来说无疑是一种压力
因此zabbix-server不再主动去找agent,而是由zabbix-proxy去主动找agent拿监控的数据,然后再发送给zabbix-server
这样就可以缓解监控方zabbix-server的压力

实验环境说明
主机名(IP) 服务名称
server1(172.25.63.1) zabbix-server监控方
server3(172.25.63.3) zabbix-proxy代理
server2(172.25.63.2) zabbix-agent被监控方

zabbix-server<----------zabbix-proxy------------>zabbix-agent
proxy主动去采集被监控方agent的数据然后再主动发给server

一个IP几个端口:65535

100台-10000台 什么增大----风险增大,基于端口的攻击

IDC服务器
如果在IDC中有个proxy,这样只有一个端口(链接防火墙)
下游设备信息–给proxy–定时反馈给server
proxy–自带数据库–数据备份

如果总管挂了,proxy不能升值,万年老二
因为:不支持GUI图形

【server3】

.zabbix-proxy 配置

1:先删除 server3 的监控,用来做 proxy

zabbix监控进程的表达式 zabbix监控java进程_tomcat_24

2:hostnamectl set-hostname proxy

zabbix监控进程的表达式 zabbix监控java进程_tomcat_25

#停掉 agent,添加解析(每个节点都添加)
systemctl stop zabbix-agent

vim /etc/hosts
172.25.78.3 server3 proxy

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_26

zabbix监控进程的表达式 zabbix监控java进程_数据_27

3:添加代理 管理->agent代理程序->创建代理(右上角)->填写信息->添加

zabbix监控进程的表达式 zabbix监控java进程_tomcat_28

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_29

zabbix监控进程的表达式 zabbix监控java进程_tomcat_30


4:proxy 上安装包

yum install -y zabbix-proxy-mysql-4.0.5-1.el7.x86_64.rpm fping-3.10-1.el7.x86_64.rpm
#数据走向 Server -> proxy -> agent

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_31


proxy 上要安装 mariadb-server,然后初始化

安装数据库,这里的数据库用来存放监控项模板

zabbix-server会告诉zabbix-proxy应该去拿哪些数据,因此zabbix-proxy也要有数据库

yum install mariadb-server -y
systemctl start mariadb
mysql_secure_installation   设置密码

登陆数据库,创建数据库,用户授权
 MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin; 
 MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'redhat';

zabbix监控进程的表达式 zabbix监控java进程_tomcat_32

zabbix监控进程的表达式 zabbix监控java进程_tomcat_33

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_34


5:导入数据库

cd /usr/share/doc/zabbix-proxy-mysql-4.0.5
zcat schema.sql.gz | mysql -p zabbix_proxy
##密码redhat

6:修改配置

vim /etc/zabbix/zabbix_proxy.conf
30 Server=172.25.78.1
39 ServerPort=10051
49 Hostname=proxy
173 DBName=zabbix_proxy
188 DBUser=zabbix
196 DBPassword=redhat
329 JavaGateway=172.25.78.1  ##因为agent是指向proxy的,但是proxy上面没有javagateway服务,因此如果不添加这个,到时候web界面发现agent的zabbix监控正常,但是jmx是灰色的。
337 JavaGatewayPort=10052
345 StartJavaPollers=5
#启动proxy
systemctl start zabbix-proxy

zabbix监控进程的表达式 zabbix监控java进程_java_35

zabbix监控进程的表达式 zabbix监控java进程_tomcat_36

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_37

zabbix监控进程的表达式 zabbix监控java进程_tomcat_38

zabbix监控进程的表达式 zabbix监控java进程_java_39

zabbix监控进程的表达式 zabbix监控java进程_数据_40

#查看日志
tail -f /var/log/zabbix/zabbix_proxy.log

zabbix监控进程的表达式 zabbix监控java进程_java_41

#web 端看 proxy 已生效

zabbix监控进程的表达式 zabbix监控java进程_数据_42

zabbix监控进程的表达式 zabbix监控java进程_java_43

7:server2 上配置把数据发送到 proxy
在agent(server2)上设置——server2 将server指向proxy
也就是server2和proxy通信

vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.78.3
ServerActive=172.25.78.3

zabbix监控进程的表达式 zabbix监控java进程_java_44

zabbix监控进程的表达式 zabbix监控java进程_java_45

zabbix监控进程的表达式 zabbix监控java进程_数据_46

#重启 agent
systemctl restart zabbix-agent
cat /var/log/zabbix/zabbix_agent.log
报错 找不到172.25.63.3

选做:

在server1上重新加载,使得server1和proxy数据同步

zabbix_server -R config_cache_reload

zabbix监控进程的表达式 zabbix监控java进程_数据_47


在web界面设置

配置—> 主机 —> server2—>主机(在下面找) agent代理程序接口—> 由agent代理程序检测(填写proxy) —> 更新

配置–主机–发现此时的server2前面会出现proxy

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_48

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_49


8:web 端添加代理

#重启 zabbix-server ,
server2 上的 zabbix-agent
systemctl restart zabbix-agent
重启server3的zabbix-proxy
systemctl restart zabbix-proxy

zabbix监控进程的表达式 zabbix监控java进程_java_50

启用 proxy 后,主机前都会加上 proxy

zabbix监控进程的表达式 zabbix监控java进程_java_51

如果没有就把服务都重启一下:

重启proxy,查看日志

systemctl restart zabbix-proxy
cat /var/lo/zabbix/zabbix_Proxy.log

发现proxy可以收到server发给它的数据项模板

received configuretion data from 172.25.63.1

在agent(server2)上重启服务,查看日志

systemctl restart zabbix-agent.service
cat /var/log/zabbix/zabbix_agentd.log
发现agent正常启动

简单来说就是:
server3:关闭agent 安装proxy 重命名 添加解析 安装数据库 初始化 授权 导入数据库 编辑配置文件 在web界面添加代理 开启服务
server2:web界面添加由agent监测 编辑配置文件指向proxy 重启服务
server1:是server和proxy数据同步
重启agent 重启proxy

可以编辑拓扑图

zabbix监控进程的表达式 zabbix监控java进程_zabbix监控进程的表达式_52