【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战

news/2024/5/19 1:32:47 标签: 云原生, 服务器, prometheus

前言

大家好,我是沐风晓月,今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式:Java agent模式。

如果你想使用http server模式,请参考:【云原生prometheus结合jmx exporter 的http server模式采集tomcat监控实战

本文中的是prometheus已经安装好,如果你还未安装,可以参考上一篇文章:prometheus安装及使用入门

文章目录

  • 前言
  • 一. 实验环境
  • 二. 安装tomcat8
    • 2.1 安装jdk8
    • 2.2 安装tomcat8.5
      • 2.2.1 下载tomcat8.5二进制安装包
      • 2.2.2 解压tomcat8.5二进制安装包
      • 2.2.3 创建tomcat用户
      • 2.2.4 修改tomcat8目录的文件所属
      • 2.2.5 查看tomcat的帮助
      • 2.2.6 启动tomcat
      • 2.2.7 查看启动情况
  • 三、JMX exporter简介
    • 3.1 什么是jmx exporter?
    • 3.2 下载jmx exporter
    • 3.3 jmx exporter的启动依赖
  • 四、安装JMX exporter
    • 4.1 下载jmx exporter
    • 4.2 添加config.yaml文件
    • 4.3 jmx exporter集成到tomcat
    • 4.4 修改jmx exporter的所属
    • 4.5 重新启动tomcat
    • 4.6 查看启动情况
    • 4.7 查看jmx exproter采集的数据
  • 五、配置prometheus拉取jmx exporer采集的数据
  • 六.查看prometheus的监控数据
  • 七、导入grafana模板
    • 7.1 导入模板
    • 7.2 查看模板效果
  • 八、总结

在这里插入图片描述

一. 实验环境

本次实验环境见下表:

操作系统服务器IPhostname
centos7.910.0.0.7mufengrow7

二. 安装tomcat8

本次实验使用tomcat8.5.87版本进行演示。

2.1 安装jdk8

  1. 为什么要安装jdk8呢?

我们可以从tomcat官方网站上得知,tomcat8.5版本需要在java7或者更高版本的java环境中运行。而且现在国内普遍都是使用java8的环境,所以我们的环境也是安装java8。

  1. 使用yum命令安装jdk8

安装jdk8有两种方式,一种是到orcale官网上下载官方编译好的jdk二进制安装包,另一种是使用yum命令安装centos7仓库中的opnjdk8,本次使用的是第二种方式,安装openjdk8。

[root@mufengrow7 apps]# yum install -y java-1.8.0-openjdk
  1. 查看jdk8版本

查看jdk版本

[root@mufengrow7 apps]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

2.2 安装tomcat8.5

2.2.1 下载tomcat8.5二进制安装包

本次安装的是taomcat8.5,所以我们到tomcat官方下载最新版的tomcat8.5.87的二进制安装包

#创建tomcat安装目录
[root@mufengrow7 ~]# mkdir -p /apps
#进入安装目录
[root@mufengrow7 ~]# cd /apps
#使用wget命令下载tomcat8.5.87的二进制安装包
[root@mufengrow7 apps]# wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz

代码注释:

--no-check-certificate:下载文件不验证安全证书

2.2.2 解压tomcat8.5二进制安装包

解压tomcat8.5.87的二进制安装包

[root@mufengrow7 apps]# tar zxvf apache-tomcat-8.5.87.tar.gz

代码注释:

zxvf:这里可以拆分为z,x,v,f四个选项

z:解压的文件包含gzip属性

x:从归档中解压文件

v:列出解压的文件

f:指定解压的文件

2.2.3 创建tomcat用户

在公司的环境中,不会直接使用root用户启动tomcat,所以我们创建一个用户,用于启动tomcat

[root@mufengrow7 apps]# useradd www

2.2.4 修改tomcat8目录的文件所属

既然要用新创建的www用户启动tomcat,那么我们需要将tomcat文件夹和里面的文件的所属都改为www用户,避免以后启动出现权限拒绝的问题

[root@mufengrow7 apps]# chown -R www.www apache-tomcat-8.5.87

代码注释:

-R:递归修改属性

2.2.5 查看tomcat的帮助

对于不熟悉tomcat启动的朋友来说,我们先查看一下tomcat的帮助文档,看看tomcat是如何启动的

#进入到tomcat文件夹下的bin目录里
[root@mufengrow7 apps]# cd apache-tomcat-8.5.87/bin/

#查看帮助
[root@mufengrow7 bin]# ./catalina.sh --help

为了更直观一些,我们把常用的参数用表格来展示:

参数描述
debug以调试的方式启动tomcat
run前台启动tomcat
start后台启动tomcat
stop停止tomcat,在5秒内等待进程的结束
stop -force停止tomcat,如果5秒后进程不结束就直接把进程kill掉强制结束进程
configtest检查server.xml文件的语法
version查看tomcat的信息

2.2.6 启动tomcat

我们使用www用户启动tomcat

[root@mufengrow7 bin]# su - www -c "/apps/apache-tomcat-8.5.87/bin/catalina.sh start"
Using CATALINA_BASE:   /apps/apache-tomcat-8.5.87
Using CATALINA_HOME:   /apps/apache-tomcat-8.5.87
Using CATALINA_TMPDIR: /apps/apache-tomcat-8.5.87/temp
Using JRE_HOME:        /
Using CLASSPATH:       /apps/apache-tomcat-8.5.87/bin/bootstrap.jar:/apps/apache-tomcat-8.5.87/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

2.2.7 查看启动情况

我们使用ps命令来查看tomcat的进程状态,使用ss命令来查看tomcat的端口

#使用ps命令来查看tomcat的进行状态
#通过查看下面的结果,我们得知现在的tomcat的确是使用了“www”用户进行启动

[root@mufengrow7 bin]# ps -ef | grep tomcat | grep -v grep

#tomcat的启动后的默认端口为8080,所以通过命令来查找8080端口确认tomcat的端口是否有启动
[root@mufengrow7 bin]# ss -tnl | grep 8080
LISTEN     0      100       [::]:8080                  [::]:*

代码注释:

  • -e:显示所有执行程序的进程(除会话领导者与终端关联的进程)

  • -f:显示UID,PPIP,C与STIME栏位

三、JMX exporter简介

3.1 什么是jmx exporter?

jmx exproter是prometheus官方提供的用于采集JVM数据的exporter。
其中jmx exporter有两种监控方式:

第一种:使用Java Agent进行监控

该exporter可以集成在java服务里,并且在启动后当做java的agent并且暴露出该exporter的端口,prometheus就可以通过HTTP服务来采集数据。

本文就是通过启动jmx exporter的java agent模式进行采集数据。

第二种:使用HTTP Server进行监控

这种方式是将exporter作为一个独立的采集JMX数据的HTTP服务运行,通过HTTP服务程的方式来采集JVM的数据。

使用HTTP Server方式进行监控,可以看【云原生prometheus结合jmx exporter 的http server模式采集tomcat监控实战

3.2 下载jmx exporter

我们可以从prometheus官方的下载页面上看到。prometheus官方并没有提供这个exproter的下载地址。

既然官方的下载网页没有提供jmx exporter的下载地址,为什么说这个是prometheus官方提供的用于采集jmx数据的exporter呢?

其实,在prometheus官方的下载页面里,有推荐给我们使用的exporter

点击进入页面,找到jmx exporter,点击连接就可以进入jmx exporter的github页面

Jmx exporter的github地址为:https://github.com/prometheus/jmx_exporter

3.3 jmx exporter的启动依赖

通过浏览jmx exporter的github页面我们可以看到jmx exporter的启动依赖,通过下图可以我们可以知道jmx exporter最低可以支持到java6版本。我们服务器的环境是安装了jdk8的所以需要下载的是没有“_java6”后缀的jar包

四、安装JMX exporter

4.1 下载jmx exporter

在jmx exporter的github里点击右方的“Releases”后选择版本进行下载

我们这次下载最新版本的jmx exporter,进入到“Releases”页面,找到最新的“1.18.0”版本,选择“jmx_prometheus_javaagent-0.18.0.jar”进行下载。

#进入到tomcat的bin目录下
[root@mufengrow7 ~]# cd /apps/apache-tomcat-8.5.87/bin/
#使用weget命令进行下载
[root@mufengrow7 bin]# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar

这里可能会有朋友问到,为什么jmx exporter的jar包要放在这里呢?
原因有两个:

  1. tomcat使用的jar包基本都是放在这里的,所以我也就下载到这里。

  2. 由于本次演示,只会启动一个tomcat,放在这里比较好管理,如果有多个tomcat的话,那就把jmx exporter下载到一个公共目录,供所有的tomcat一起使用。

4.2 添加config.yaml文件

我们在jmx exproter的github页面的提示中可以看到启动jmx exporter的时候需要有一个config.yaml的文件,然后在下面也提示了该文件在哪里可以找到范例

接着我们进入到存放config.yaml范例的文件夹

找到tomcat.yaml文件,点击进去

在看到文件内容后将内容全部复制

[root@mufengrow7 bin]# vim config.yaml
---   
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'
  name: tomcat_$3_total
  labels:
    port: "$2"
    protocol: "$1"
  help: Tomcat global $3
  type: COUNTER
- pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):'
  name: tomcat_servlet_$3_total
  labels:
    module: "$1"
    servlet: "$2"
  help: Tomcat servlet $3 total
  type: COUNTER
- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'
  name: tomcat_threadpool_$3
  labels:
    port: "$2"
    protocol: "$1"
  help: Tomcat threadpool $3
  type: GAUGE
- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'
  name: tomcat_session_$3_total
  labels:
    context: "$2"
    host: "$1"
  help: Tomcat session $3 total
  type: COUNTER
- pattern: ".*"  #显示所有的信息

4.3 jmx exporter集成到tomcat

把jmx exporter集成到tomcat里也很简单,只需要修改启动脚本,在启动Tomact时也一起启动jmx exporter即可。

我们修改tomcat的启动脚本catalina.sh,内容如下:

[root@mufengrow7 bin]# vim catalina.sh
.....
# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
JAVA_OPTS="-javaagent:/apps/apache-tomcat-8.5.87/bin/jmx_prometheus_javaagent-0.18.0.jar=38081:config.yaml" #添加这行内容,放哪里都行。建议此处写绝对路径
......

代码注释:

-javaagent:作为javaagent启动

=38081:设置javaagent的端口,可以根据需求进行修改端口。

:config.yaml:设置读取的yaml文件,可以根据需求修改文件名称。

4.4 修改jmx exporter的所属

由于我们是用root用户将jmx exporter下载和添加config.yaml文件的,而我们启动tomcat的用户是www,所以我们需要将这两个文件所属修改为www用户,避免启动时出现权限拒绝的问题。

[root@mufengrow7 bin]# chown www.www jmx_prometheus_javaagent-0.18.0.jar config.yaml

4.5 重新启动tomcat

#关闭tomcat
[root@mufengrow7 bin]# ./shutdown.sh 

#启动tomcat
[root@mufengrow7 bin]# ./catalina.sh start

Tomcat started.

4.6 查看启动情况

通过ps命令来查找tomcat启动时是否集成到“jmx_prometheus_javaagent”,同时通过ss命令查看java agent的端口

#通过ps命令查看
[root@mufengrow7 bin]# ps -ef | grep jmx_prometheus_javaagent | grep -v grep

#通过ss命令查看
[root@mufengrow7 bin]# ss -tnl | grep 38081 | grep -v grep
LISTEN     0      3         [::]:38081                 [::]:*

4.7 查看jmx exproter采集的数据

  1. 使用命令查看jmx exporter采集的数据
[root@mufengrow7 bin]# curl 10.0.0.7:38081/metrics
# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
# TYPE jvm_memory_pool_allocated_bytes_total counter
jvm_memory_pool_allocated_bytes_total{pool="Code Cache",} 5475584.0
jvm_memory_pool_allocated_bytes_total{pool="PS Eden Space",} 1.09051904E8
jvm_memory_pool_allocated_bytes_total{pool="PS Old Gen",} 1.3875544E7
jvm_memory_pool_allocated_bytes_total{pool="PS Survivor Space",} 5454976.0
jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 2042872.0
jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 1.86804E7
# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
# TYPE jvm_memory_objects_pending_finalization gauge
jvm_memory_objects_pending_finalization 0.0
......
  1. 使用浏览器查看jmx exporter采集的数据

浏览器访问:

10.0.0.7:38081/metrics

浏览器页面显示的结果如下:

在这里插入图片描述

prometheusjmx_exporer_398">五、配置prometheus拉取jmx exporer采集的数据

prometheus_400">5.1 修改prometheus配置文件

修改的方式如图:

其中job_name、prometheus读取配置文件的方式、目标的ip和端口都可以根据需求自行修改。

prometheus_409">5.2 让prometheus重新读取配置文件

  1. 检查prometheus配置文件语法
[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml 
Checking prometheus.yml
 SUCCESS: prometheus.yml is valid prometheus config file syntax
  1. 重启prometheus

通过重启,让prometheus重新读取配置文件

[root@mufengrow7 prometheus]# systemctl restart prometheus

prometheus_429">六.查看prometheus的监控数据

prometheus_431">6.1 到网页端查看prometheus监控目标

我们到prometheus的网页端,查看prometheus采集数据的目标是否有tomcat,通过下图,我们知道prometheus已经连接上jmx exporter了。

prometheus_438">6.2 在prometheus网页查询结果

接下来我们到prometheus的查询面板查看prometheus有没有采集到tomcat的数据

  • 查看jmx exporter版本

  • 查看JVM信息

七、导入grafana模板

本文中的grafana已经安装好了,如果你还未安装,可以参考文章:promehtheus整合grafana实现可视化监控实战

7.1 导入模板

grafana推荐模板:8563、8704、8878、3066

以编号8563为例

  • 输入模板编号,点击Load

  • 修改job的名称为prometheus配置文件里的“job_name”,点击import

7.2 查看模板效果

以下为编号“8563”模板的效果,如果有什么问题可以自行修改。

注意:每个jmx模板需要的config.yaml文件可能有不同,所以我们可以到该模板的网页查看要求。

八、总结

prometheus监控tomcat的步骤为:

  1. 安装prometheus

  2. 安装java8环境和tomcat

  3. 下载jmx exporter和添加config.yaml并修改tomcat的启动文件。
    注意:添加的config.yaml文件需要根据后面的grafana模板的添加而进行修改

  4. 修改prometheus的配置文件,添加tomcat实例,并重新读取配置文件

  5. 进入prometheus的WEB页面进行验证


http://www.niftyadmin.cn/n/164514.html

相关文章

数据结构:链表

1.单链表的逻辑结构与存储结构1.1逻辑结构逻辑结构&#xff1a;数据元素之间的逻辑关系集合、线性结构&#xff08;一对一&#xff09;、树形结构&#xff08;一对多&#xff09;、图结构&#xff08;多对多&#xff09;1.2存储结构存储结构&#xff1a;顺序存储、链式存储、索…

【三层交换技术】交换机

文章目录1.三层交换机1.1 三层交换机简介1.2 二层交换机作用1.3 三层交换技术2.三层交换机的转发原理2.1 一次路由&#xff0c;多次交换2.2 VLANIF虚接口2.3 三层交换机转发数据过程3.实验&#xff1a;实现主机PC1与主机PC2互通4.总结1.三层交换机 1.1 三层交换机简介 三层交…

Redis的基本使用

Redis介绍 Redis(Remote Dictionary Server)远程字典服务&#xff0c;是一个开源的使用 ANSI C语言编写、支持网络、可基于内存亦可持久性的日志型、key-value 数据库&#xff0c;并提供多种语言的 API&#xff0c;是当下最流行的NoSQL技术之一。 Redis八种数据类型 2.1. St…

Halcon常用算子解释笔记

** Halcon常用算子解释笔记 ** 一、机器视觉所包含的部分 学科:数学、图像、软件、光学 1 光源 (照明系统) 2 镜头 (光学成像) 3 相机 (光电捕捉) 4 软件 (图像处理与决策模块) 采集、预处理、分割、识别及显示 5、控制系统 二、blob分析——案例5 ( bal l.hdev) (★★★…

RT-Thread qemu-virt64-aarch64开启 rt-smart

前言 前面搭建了基于 RT-Thread BSP qemu-virt64-aarch64 的开发编译环境&#xff0c;接下来开启 rt-smart&#xff0c;确认是否可以正常工作 开启 rt-smart 经过初步的验证&#xff0c;发现 qemu-virt64-aarch64 开启 rt-smart&#xff0c;只需要 scons --menuconfig 图形配…

Redis(四):线程模型

前言 上一篇介绍了 Redis 定义的九大数据类型。这节开始介绍 Redis 中的线程模型&#xff1a;单线程模型和多线程模型。 单线程模型 Redis 的单线程&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的。但其他部分功能&#xff0c;比如持久化、异步删除…

【软件设计】常见限流排队业务设计

文章目录一、限流排队目的二、架构说明2.1 架构图&#xff1a;2.2 步骤说明2.3 架构层级图2.4 申请资格技术流程图:2.5 排队资格转化流程图:三、流程说明3.1 流程图-其他项目排队流程3.2 流程图-热门项目排队流程图一、限流排队目的 限制客户端访问用户的并发数量&#xff0c;…

[图神经网络]图特征工程

一、图的特征 图点本身就具备的特征称为属性特征&#xff08;如&#xff1a;连接权重、节点类型等&#xff09;&#xff0c;属性特征大部分时候都是多模态的。 图中一个节点和其他节点之间的连接关系称为连接特征(结构信息) 人工提取并构造的特征称为特征工程。&#xff08;将图…