一、概述
JMX Exporter
是一个用于将 Java
应用程序的 JMX(Java Management Extensions)
指标导出为 Prometheus
格式的度量数据的开源工具。Prometheus
是一种流行的开源监控和告警工具,它使用 Pull
模型来收集和存储度量数据,而JMX Exporter允许你将 Java 应用程序的内部性能指标导出到Prometheus
中,从而实现对 Java
应用程序的监控和警报。
以下是 JMX Exporter
的一些关键特点和用途:
-
度量数据导出 :
JMX Exporter
允许你选择并配置要从Java
应用程序导出的JMX
指标。这些指标可以是JVM
内部的性能指标,也可以是应用程序特定的自定义指标。 -
Prometheus 格式 :
JMX Exporter
将导出的JMX
指标转换为Prometheus
格式的度量数据。Prometheus
格式是一个文本格式,易于阅读和处理,并且适用于Prometheus
服务器的存储和查询。 -
适用于各种 Java 应用程序 :
JMX Exporter
可以用于各种Java
应用程序,包括独立的Java
进程、Tomcat、Spring Boot 应用程序等。只要你的应用程序支持JMX
,就可以使用JMX Exporter
来导出度量数据。 -
配置灵活性 :
JMX Exporter
允许你通过配置文件来定义要导出的指标和匹配规则。这使得你可以根据应用程序的需求进行高度定制和配置。 -
支持标签(labels) :与
Prometheus
一样,JMX Exporter
支持标签,这意味着你可以为导出的指标添加元数据,以便更容易进行查询和可视化。 -
轻量级和高性能 :
JMX Exporter
被设计为轻量级和高性能,以最小化对监控的影响。
使用 JMX Exporter
,你可以将你的 Java 应用程序的关键性能指标导出到 Prometheus
,并利用 Prometheus
提供的灵活查询和警报功能来监控和诊断你的应用程序。这有助于及时发现和解决问题,确保你的应用程序在生产环境中保持可靠性和稳定性。
三、下载 JMX Exporter jar包
JMX Exporter GitHub地址:github.com/prometheus/...
bash
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
四、JMX Exporter 实战操作(Trino指标采集)
1)安装 Trino
1)安装 Trino
如果想快速部署,可以参考我之前的文章:
Trino官方文档:trino.io/docs/curren...
这里为了快速部署就选择docke-compose部署了。
bash
git clone https://gitee.com/hadoop-bigdata/docker-compose-presto.git
cd docker-compose-presto
2)修改配置
bash
#1、下载
mkdir jmx-exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar -O jmx-exporter/jmx_prometheus_javaagent-0.19.0.jar
# 需要重新构建镜像,将jar包放在镜像包里。
#2、创建jmx 配置文件,可以设置采集规则,默认是采集所有指标
touch jmx-exporter/jmx_config.yaml
# 内容如下:
rules:
- pattern: ".*"
# 修改配置
vi etc/coordinator/jvm.config
vi etc/worker/jvm.config
# 增加如下内存
-javaagent:/opt/apache/trino/lib/jmx_prometheus_javaagent-0.19.0.jar=3900:/opt/apache/trino/etc/jmx_config.yaml
修改编排文件 docker-compose.yaml
bash
version: '3'
services:
trino-coordinator:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino-jmx-exporter:416
user: "hadoop:hadoop"
container_name: trino-coordinator
hostname: trino-coordinator
restart: always
privileged: true
env_file:
- .env
volumes:
- ./etc/coordinator/config.properties:${TRINO_HOME}/etc/config.properties
- ./etc/coordinator/jvm.config:${TRINO_HOME}/etc/jvm.config
- ./etc/coordinator/log.properties:${TRINO_HOME}/etc/log.properties
- ./etc/coordinator/node.properties:${TRINO_HOME}/etc/node.properties
- ./etc/catalog/:${TRINO_HOME}/etc/catalog/
ports:
- "30080:${TRINO_SERVER_PORT}"
- "30980:${JMX_RMIREGISTRY_PORT}"
- "30981:${JMX_RMISERVER_PORT}"
- "3900"
command: ["sh","-c","/opt/apache/bootstrap.sh trino-coordinator"]
networks:
- hadoop-network
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]
interval: 10s
timeout: 20s
retries: 3
trino-worker:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416
user: "hadoop:hadoop"
restart: always
privileged: true
deploy:
replicas: 1
env_file:
- .env
volumes:
- ./etc/worker/config.properties:${TRINO_HOME}/etc/config.properties
- ./etc/worker/jvm.config:${TRINO_HOME}/etc/jvm.config
- ./etc/worker/log.properties:${TRINO_HOME}/etc/log.properties
- ./etc/worker/node.properties:${TRINO_HOME}/etc/node.properties
- ./etc/catalog/:${TRINO_HOME}/etc/catalog/
- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml
- ./jmx-exporter/jmx_prometheus_javaagent-0.19.0.jar:${TRINO_HOME}/lib/jmx_prometheus_javaagent-0.19.0.jar
ports:
- "${TRINO_SERVER_PORT}"
command: ["sh","-c","/opt/apache/bootstrap.sh trino-worker"]
networks:
- hadoop-network
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]
interval: 10s
timeout: 10s
retries: 3
# 连接外部网络
networks:
hadoop-network:
external: true
3)开始执行安装 Trino
bash
docker-compose up -d
# 查看
docker-compose ps
web访问,就可以看到采集的数据了。
4)开始配置 Prometheus 采集 Trino JMX 指标数据
Prometheus 的安装可以参考我这篇文章:Prometheus on k8s 部署与实战操作进阶篇
1、下载 prometheus 安装包
bash
#官方下载地址:https://github.com/prometheus-operator/kube-prometheus
#在官方的基础之上进行了修改和增加内容
git clone https://gitee.com/hadoop-bigdata/kube-prometheus.git
cd kube-prometheus
2、导入镜像
镜像下载日志:
链接:pan.baidu.com/s/10ksK1OtK... 提取码:
bcu6
bash
# 下载完镜像包,批量分发到所有k8s节点,解压进入镜像包目录,直接执行以下命令就可将所有镜像加载
sh load-images.sh
3、开始安装 prometheus
bash
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/
# 查看
kubectl get all -n monitoring
4、开始配置 Prometheus 采集 Trino JMX 指标数据
jmx/trino.yaml
文件内容如下:
bash
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: trino
namespace: monitoring
labels:
app.kubernetes.io/name: trino
spec:
namespaceSelector:
matchNames:
- monitoring
selector:
matchLabels:
app.kubernetes.io/name: trino
endpoints:
- port: metrics
interval: 10s
path: /
---
apiVersion: v1
kind: Service
metadata:
name: trino
namespace: monitoring
labels:
app.kubernetes.io/name: trino
spec:
ports:
- name: metrics
port: 3900
targetPort: 49215
protocol: TCP
type: ClusterIP
clusterIP: None
---
apiVersion: v1
kind: Endpoints
metadata:
name: trino
namespace: monitoring
labels:
app.kubernetes.io/name: trino
subsets:
- addresses:
- ip: 192.168.182.110
ports:
- name: metrics
port: 49215
protocol: TCP
执行
bash
kubectl apply -f trino.yaml
# 查看
kubectl get ServiceMonitor,Service,Endpoints -n monitoring
检测 Prometheus 上是否已经采集 trino jmx
4、配置 Trino JMX Grafana 监控面板
官方模块下载地址:grafana.com/grafana/das...
用的比较多的模板是 grafana.com/grafana/das... ,可以直接导入,面板效果图:
这里是根据上面的模板修改了几个指标,小伙伴可以根据自己需要添加面板 这里给一份阿里云常用 Trino 监控指标参考:help.aliyun.com/document_de...
到此JMX Exporter 介绍与实战操作(Trino)讲解就先到这里了,有任何疑问也可关注我公众号:大数据与云原生技术分享
,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~