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监控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
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() %>
开启 tomcat
cd /usr/local/tomcat/bin
./startup.sh
netstat -antlp | grep java
端口开启,可以在浏览器中访问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
#启动 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
cat /var/log/zabbix/zabbix_server.log 很多个started
ps ax
5: 在 zabbix 界面添加 jmx 监控
添加 jmx
删除原来的http监控 不删除也可以
添加jmx,注意右上角
打开一个 jmx 监控的图形,发现没有数据
#编辑配置文件
[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
6:网页重新刷新页面,server2:JMX绿色
二.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
2:hostnamectl set-hostname proxy
#停掉 agent,添加解析(每个节点都添加)
systemctl stop zabbix-agent
vim /etc/hosts
172.25.78.3 server3 proxy
3:添加代理 管理->agent代理程序->创建代理(右上角)->填写信息->添加
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
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';
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
#查看日志
tail -f /var/log/zabbix/zabbix_proxy.log
#web 端看 proxy 已生效
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
#重启 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
在web界面设置
配置—> 主机 —> server2—>主机(在下面找) agent代理程序接口—> 由agent代理程序检测(填写proxy) —> 更新
配置–主机–发现此时的server2前面会出现proxy
8:web 端添加代理
#重启 zabbix-server ,
server2 上的 zabbix-agent
systemctl restart zabbix-agent
重启server3的zabbix-proxy
systemctl restart zabbix-proxy
启用 proxy 后,主机前都会加上 proxy
如果没有就把服务都重启一下:
重启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
可以编辑拓扑图