目 录CONTENT

文章目录

Prometheus监控java应用程序

Seven
2024-07-17 / 0 评论 / 2 点赞 / 54 阅读 / 7591 字 / 正在检测是否收录...

Prometheus结合JMX export监控java应用程序

JMX export简介

1.1、什么是jmx export

jmx exporter是prometheus官方提供的用于采集JMV数据的exporter,而且新出jmx exporter有两种监控方式,分别为“java agent”模式和“http server”模式。

1.2、什么是 “java agent”监控模式?

“java agent”监控模式是jmx exproter的最初的形式,该模式是将jmx exporter的这个jar包集成在tomcat内,在tomcat启动时jmx exporter也会一起启动,然后变成一个展示JVM数据的代理。最后由prometheus采集代理展示出来的数据。

1.3、什么是 “http server”监控模式?

“http server”监控模式,顾名思义就是让jmx exporter变成一个采集JVM数据的server。然后jmx exporter会通过http来采集远程的tomcat服务的数据

安装JMX export

下载地址:https://github.com/prometheus/jmx_exporter
特别说明:由于本次测试使用的版本为最新的。导致获取参数值,仪表盘等大多无法使用。官方文档:https://github.com/prometheus/jmx_exporter/tree/release-1.0.1/docs 官方推荐使用agent方法使用。 官方使用说明: https://prometheus.github.io/client_java/migration/simpleclient/#jvm-metrics

image-xewb.png

2、以Java Agent方式使用

2.1、下载和配置

下载文件:jmx_prometheus_javaagent-1.0.1.jar

创建config.yaml:

lowercaseOutputLabelNames: false
lowercaseOutputName: false
rules:
- pattern: ".*"

2.2、运行

在启动的java应用中添加-javaagent:./jmx_prometheus_javaagent-1.0.1.jar=9400:config.yaml参数,如下:

java -javaagent:./jmx_prometheus_javaagent-1.0.1.jar=9400:config.yaml -jar my-app.jar

在其它容器内使用也是类似,比如在tomcat中,在catalina.sh启动脚本中添加以下配置

set "JAVA_OPTS=-javaagent:./jmx_prometheus_javaagent-1.0.1.jar=9400:./config.yaml"

注意在tomcat 容器中jmx_prometheus_javaagent-1.0.1.jar和config.yaml两个文件也需要放在$TOMCAT_HOME/bin目录内。
如果使用的是基于JDK的docker容器需要注意将 jmx_prometheus_javaagent-1.0.1.jarconfig.yamlmy-app.jar(自己的应用)放到一个目录内。给一个DOCKERFILE的示例:

FROM freshworks/oraclejdk8:latest
MAINTAINER seven
COPY ./my-app.jar /opt/server/bootstrap.jar
COPY ./jmx_prometheus_javaagent-1.0.1.jar /opt/server/jmx_prometheus_javaagent-1.0.1.jar
COPY ./config.yaml /opt/server/config.yaml
ENV JAVA_OPTS="-server -Xms256m -Xmx256m -Xmn128m -Dspring.profiles.active=test -Dserver.connection-timeout=60000  -Dserver.tomcat.accept-count=100  -Dserver.tomcat.max-threads=300"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /opt/server
CMD ["/bin/sh","-c","java -javaagent:./jmx_prometheus_javaagent-1.0.1.jar=9400:config.yaml -jar $JAVA_OPTS /opt/server/bootstrap.jar"]

对上说明:本次测试网络模式使用了HOST。

2.3、配置prometheus拉取数据

vim prometheus.yml
  - job_name: "prometheus"
    static_configs:
      - targets: ["xxx.xxx.xxx.xxx:9400"]

重启prometheus生效配置。

3、以独立http服务方式使用

3.1、下载和配置

下载文件:jmx_prometheus_httpserver-1.0.1.jar

创建config.yaml

---

hostPort: xxx.xxx.xxx.xxx:9799 #应用JAR包运行的IP地址及JMX的端口
username:
password:

rules:
- pattern: ".*"

3.2、运行

3.2.1、启动java应用,需要先开启应用的jmx
java -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9799 -Dcom.sun.management.jmxremote.authenticate=false -jar my-app.jar
3.2.2、启动jmx_prometheus_httpserver通过应用暴露的jmx 9799端口,采集应用的jvm数据,并把采集到的数据通过9400端口暴露给prometheus拉取
java -jar jmx_prometheus_httpserver-0.17.1.jar 9400 config.yaml

3.3、访问jmx_exporter监控的数据

http://xxx.xxx.xxx.xxx:9400/metrics #jmx_exporter所在IP

3.4、与prometheus集成

vi /usr/local/prometheus-2.37.0.linux-amd64/prometheus.yml

# my global config

global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# scrape_timeout is set to the global default (10s).

# Alertmanager configuration

alerting:
alertmanagers:
    - static_configs:
        - targets:
             - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

# - "first_rules.yml"

# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

- job_name: "prometheus"
# metrics_path defaults to '/metrics'

# scheme defaults to 'http'.

static_configs:

- targets: ["localhost:9090"]

- job_name: 'jmx'
    static_configs:
       - targets:["xxx.xxx.xxx.xxx:9400"]

3 配置Grafana仪表盘

官网上对jmx_prometheus_httpserver的仪表盘真的很少,大多数都对于Agent方式。有时间可以自己去配置一下。这里给几个JMX的:ID:8563、ID:14845、ID:3066 、ID:7727。

我这次测试并未加入仪表盘。

最后扩展:

JMX参数配置

配置 说明 参数
-Dcom.sun.management.jmxremote.authenticate 开启鉴权 (鉴权) false/ture
-Dcom.sun.management.jmxremote.ssl 启用ssl连接 false/ture
-Dcom.sun.management.jmxremote.local.only 是否只接受本地连接 false/ture
-Dcom.sun.management.jmxremote.host jmx绑定指定地址,默认绑定到所有地址 绑定ip
-Dcom.sun.management.jmxremote.port jmx绑定端口 19006
-Dcom.sun.management.jmxremote.rmi.port rmi绑定端口,可以与jmx端口一致 19006
-Djava.rmi.server.hostname 多选择 IP/域名 绑定ip
-Dcom.sun.management.jmxremote.access.file 远程访问角色文件路径 路径
-Dcom.sun.management.jmxremote.password.file 身份验证配置启用文件路径时的远程身份验证文件 验证文件

基于kubernetes 安装jmx_exporter

prometheus自动发现并拉取数据:

https://cloud.tencent.com/document/practice/457/48724

2

评论区