03.08 面试官:如何用zabbix来监控Tomcat

概述

zabbix监控tomcat只有一个zabbix-java-gateway,可以部署在zabbix-sever端也可以部署在其他机器上,需要和zabbix-server网络可达。Zabbix-Javagateway就相当于一个代理,它负责收集客户端tomcat数据,zabbix-server只要向zabbix-java-gateway取数据添加到数据库即可。但zabbix官方提供的jvm和tomcat监控模版,存在item书写格式的坑,导致很多内容无法获取到监控。

所以就自己写脚本来监控了,先介绍一下传统方式的监控。


一、tomcat+jvm监控点

1、tomcat监控

Tomcat请求数:包括每秒请求数,每秒出错数;Tomcat网络流量统计:包括进流量统计,出流量统计;Tomcat线程:包括最大线程数,当前线程数,当前繁忙线程数。

2、JVM监控

内存使用状态:堆内存(Heap memory)和非堆内存(No Heap memory),包括已用值、最大值、已提交;

堆内存内存池:新生代(eden space),survivor space,老年代(old gen)的内存使用状态;

非堆内存内存池:代码缓存(Code cache),元空间(meta space),压缩类空间(compressed class space);

类加载:加载总数,已加载,已卸载。

Java线程:总开启线程,活动线程,线程峰值

这里没有在zabbix中添加垃圾回收(gc)的监控,而是在catalina配置里面添加gc日输入来给开发进行分析,设置方式如下。

CATALINA_OPTS=”-XX:ParallelGCThreads=4 -XX:+PrintGCDetails -Xloggc:日志存放路径”


二、zabbix客户端配置

1、部署zabbix_agent

<code> rpm -ivh zabbix-agent-4.2.6-1.el7.x86_64.rpm/<code>

2、修改zabbix_agent配置文件

<code>vim /etc/zabbix/zabbix_agentd.conf
=======================================================================
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log #错误日志
LogFileSize=0
ListenPort=10050 #启动监听端口
StartAgents=3 #被动模式下选择,主动模式则为0
ListenIP=0.0.0.0 #监听所有IP
Server=xxxx #被动模式下必填,将zabbix-server端的ip填入
ServerActive=xxxx #主动模式下填写这个参数
Hostname=xxx #本机的hostname,此值必须与zabbix的网页上创建的主机名一致
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
=======================================================================/<code>

3、启动zabbix_agent

<code>systemctl start zabbix-agent
systemctl enable zabbix-agent
systemctl status zabbix-agent/<code>


4、添加catalina-jmx-remote.jar

下载地址:http://archive.apache.org/dist/tomcat/tomcat-8/

找到对应tomcat版本的catalina-jmx-remote.jar,catalina-jmx-remote.jar文件在tomcat版本的/bin/extras/目录下,然后放到tomcat/lib下

<code>wget  http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/extras/catalina-jmx-remote.jar
chmod u+x catalina-jmx-remote.jar/<code>


5、添加tomact中JMX的参数

打开tomcat/bin/catalina.sh文件,在#!/bin/sh下面添加如下,注意hostname填本机的ip地址。

<code>CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12345
-Djava.rmi.server.hostname=xxxx4"/<code>
面试官:如何用zabbix来监控Tomcat/JVM实例性能

6、重启tomcat与监控测试

6.1、下载cmdline-jmxclient-0.10.3.jar

cmdline-jmxclient.jar主要用于抓取jmx的信息。

下载地址:http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar

6.2、测试jmx监控项

面试官:如何用zabbix来监控Tomcat/JVM实例性能

7、监控项数据采集

--堆内存

java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Memory HeapMemoryUsage

--内存池eden space

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=MemoryPool,name=PS\\ Eden\\ Space Usage

--内存池survivor space

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=MemoryPool,name=PS\\ Survivor\\ Space Usage

--内存池old gen

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:name=PS\\ Old\\ Gen,type=MemoryPool Usage

--非堆内存

java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Memory NonHeapMemoryUsage

--内存池meta space

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=MemoryPool,name=Metaspace Usage

--内存池code cache

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=MemoryPool,name=Code\\ Cache Usage

--内存池compressed class space

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=MemoryPool,name=Compressed\\ Class\\ Space Usage

--类加载

加载总数: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=ClassLoading TotalLoadedClassCount

已加载: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=ClassLoading LoadedClassCount

已卸载: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=ClassLoading UnloadedClassCount

--JAVA线程

总开启线程: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Threading TotalStartedThreadCount

活动线程: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Threading PeakThreadCount

线程峰值: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Threading PeakThreadCount

--tomcat线程

最大线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=ThreadPool maxThreads

当前线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=ThreadPool currentThreadCount

繁忙线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=ThreadPool currentThreadsBusy

--网络流量

接收的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=GlobalRequestProcessor bytesReceived

发送的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=GlobalRequestProcessor bytesSent

--tomcat请求

tomcat请求数:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=GlobalRequestProcessor requestCount

tomcat出错请求:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 Catalina:name=\"http-nio*\",type=GlobalRequestProcessor errorCount

面试官:如何用zabbix来监控Tomcat/JVM实例性能



三、配置zabbix服务端

1、安装zabbix-java-gateway

仓库地址:https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/

zabbix-java-gateway默认工作在10052端口(zabbix-server默认工作在10051端口,zabbix-agent默认工作在10050端口)

<code>#安装
wget https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-java-gateway-4.2.6-1.el7.x86_64.rpm
rpm -ivh zabbix-java-gateway-4.2.6-1.el7.x86_64.rpm
#启动
systemctl start zabbix-java-gateway

#开机启动
systemctl enable zabbix-java-gateway/<code>
面试官:如何用zabbix来监控Tomcat/JVM实例性能

2、配置zabbix_java_gateway.conf和zabbix_server.conf

重点:Java-gateway配置文件的START_POLLERS参数 >= zabbix_server配置文件的StartJavaPollers参数,建议一样,都设为5。

2.1、配置zabbix_java_gateway.cnf

<code># vim /etc/zabbix/zabbix_java_gateway.conf
==================================================================================================
PID_FILE="/var/run/zabbix/zabbix_java.pid"
#LISTEN_IP="xxxx" #本机ip地址,如果和server安装在相同的位置可以不修改
LISTEN_PORT=10052 #端口可以修改为其他,在server段需要相同的配置

START_POLLERS=5 #设置启动多个线程,这里和server段相同
TIMEOUT=3 #超时时间
==================================================================================================/<code>


2.2、配置zabbix_server.conf:

让zabbix-server服务能连接到zabbix-java-gateway服务

<code># vim /data/zabbix/etc/zabbix_server.conf
==================================================================================================
JavaGateway=xxx #如果是本机安装直接使用127.0.0.1
JavaGatewayPort=10052 #端口号和javagateway要对应
StartJavaPollers=5 #线程数和客户端配置对应 不能少于客户端数目 StartJavaPollers<=START_POLLERS
==================================================================================================/<code>


3、重启zabbix-server和zabbix-java-gateway服务

<code>systemctl restart zabbix_server
systemctl restart zabbix-java-gateway/<code>
面试官:如何用zabbix来监控Tomcat/JVM实例性能



四、web界面配置jmx监控

Zabbix-server通过JavaPollers进程调用zabbix-java-gateway获得tomcat数据,而zabbix-java-gateway就是通过这里配置的tomcat地址和端口,连接到tomcat从而获取到数据。

1、配置-->主机-->创建主机-->JMX添加-->输入IP(tomcat服务器IP)和端口(12345)

面试官:如何用zabbix来监控Tomcat/JVM实例性能


2、配置-->主机-->tomcat服务器-->模版-->Template App Apache Tomcat JMX、Template App Generic Java JMX-->添加-->更新

面试官:如何用zabbix来监控Tomcat/JVM实例性能

3、配置成功显示

找到主机,如果JMX显示颜色,则配置成功。

面试官:如何用zabbix来监控Tomcat/JVM实例性能



觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~


面试官:如何用zabbix来监控Tomcat/JVM实例性能


分享到:


相關文章: