JMX Exporter 介紹與實戰操作(Trino)
一、概述
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地址:https://github.com/prometheus/jmx_exporter
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官方文檔:https://trino.io/docs/current/
這里為了快速部署就選擇docke-compose部署了。
git clone https://gitee.com/hadoop-bigdata/docker-compose-presto.git
cd docker-compose-presto
2)修改配置
#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
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
docker-compose up -d
# 查看
docker-compose ps
圖片
web訪問,就可以看到采集的數據了。
圖片
4)開始配置 Prometheus 采集 Trino JMX 指標數據
Prometheus 的安裝可以參考我這篇文章:Prometheus on k8s 部署與實戰操作進階篇
1、下載 prometheus 安裝包
#官方下載地址:https://github.com/prometheus-operator/kube-prometheus
#在官方的基礎之上進行了修改和增加內容
git clone https://gitee.com/hadoop-bigdata/kube-prometheus.git
cd kube-prometheus
2、導入鏡像
鏡像下載日志:
鏈接:https://pan.baidu.com/s/10ksK1OtKwlvZqbExKmZgLw?pwd=bcu6提取碼:bcu6
# 下載完鏡像包,批量分發到所有k8s節點,解壓進入鏡像包目錄,直接執行以下命令就可將所有鏡像加載
sh load-images.sh
3、開始安裝 prometheus
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for cnotallow=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/
# 查看
kubectl get all -n monitoring
圖片
4、開始配置 Prometheus 采集 Trino JMX 指標數據
jmx/trino.yaml 文件內容如下:
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
執行
kubectl apply -f trino.yaml
# 查看
kubectl get ServiceMonitor,Service,Endpoints -n monitoring
檢測 Prometheus 上是否已經采集 trino jmx
圖片
4、配置 Trino JMX Grafana 監控面板
官方模塊下載地址:https://grafana.com/grafana/dashboards/
用的比較多的模板是 https://grafana.com/grafana/dashboards/8563 ,可以直接導入,面板效果圖:
圖片
這里是根據上面的模板修改了幾個指標,小伙伴可以根據自己需要添加面板
圖片
這里給一份阿里云常用 Trino 監控指標參考:https://help.aliyun.com/document_detail/474222.html