Prometheus jmx_exporter
一、简介
地址:https://github.com/prometheus/jmx_exporter
JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。
那么,JMX 又是什么呢?它的全称是:Java Management Extensions
。顾名思义,是管理 Java 的一种扩展框架,JMX Exporter 正是基于此框架来读取 JVM 的运行时状态的。
二、K8s中监控java进程
采用 javaagent 的形式运行 JMX-Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
制作java镜像,导入jmx_exporter
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | FROM openjdk:8u121-alpine LABEL maintainer= "tunan" ENV JAVA_VERSION 8u121 ENV JAVA_OPTS= "" RUN set -x \ && addgroup -g 1010 -S admin \ && adduser -S -D -u 1010 -s /sbin/nologin -G admin -g admin admin \ && mkdir -p /app && mkdir -p /data/logs/server-admin \ && chown -R admin.admin /app && chown -R admin.admin /data/logs/server-admin \ && ln -sf /dev/stdout /data/logs/server-admin/all_pb-server-admin .log \ && ln -sf /dev/stderr /data/logs/server-admin/err_pb-server-admin .log \ && rm -rf /var/lib/apt/lists/ * WORKDIR /app USER admin COPY pb-server-admin-1.0-SNAPSHOT.jar /app COPY jmx_prometheus_javaagent-0.14.0.jar /app EXPOSE 8084 ENTRYPOINT java ${JAVA_OPTS} -jar pb-server-admin-1.0-SNAPSHOT.jar |
jmx_exporter的配置文件
prometheus-jmx-config.yaml
1 2 3 4 | --- ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false |
创建
1 2 3 4 5 6 7 8 9 | # 创建一个namespace # kubectl create ns kube-test # kubectl create cm jmx-config --from-file=prometheus-jmx-config.yaml -n kube-test configmap /jmx-config created # kubectl get cm -n kube-test NAME DATA AGE jmx-config 1 8s |
启动一个监控项目
jmx-exporter.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | apiVersion: v1 kind: Service metadata: name: jmx-exporter namespace: kube- test labels: k8s-app: jmx-exporter spec: selector: k8s-app: jmx-exporter ports: - name: application port: 8084 protocol: TCP - name: jmx-metrics port: 9084 protocol: TCP type : ClusterIP --- apiVersion: apps /v1 kind: Deployment metadata: name: jmx-exporter namespace: kube- test labels: k8s-app: jmx-exporter spec: replicas: 1 selector: matchLabels: k8s-app: jmx-exporter template: metadata: labels: k8s-app: jmx-exporter spec: containers: - name: admin image: pb-server-admin:1.0.2 imagePullPolicy: IfNotPresent env : - name: JAVA_OPTS value: "-javaagent:/app/jmx_prometheus_javaagent-0.14.0.jar=9084:/config/prometheus-jmx-config.yaml" volumeMounts: - name: jmx-config mountPath: /config readOnly: true - name: tz-config mountPath: /etc/localtime readOnly: true nodeSelector: monitor: "true" volumes: - name: tz-config hostPath: path: /usr/share/zoneinfo/Asia/Shanghai - name: jmx-config configMap: name: jmx-config |
-
通过9084这个端口来采集metrics
使用prometheus-operator,通过创建 ServiceMonitor 的 CRD 对象来配置 Prometheus
jmx-exporterMonitor.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | apiVersion: monitoring.coreos.com /v1 kind: ServiceMonitor metadata: labels: k8s-app: jmx-exporter name: jmx-exporter namespace: monitoring spec: endpoints: - interval: 30s port: jmx-metrics scheme: http tlsConfig: insecureSkipVerify: false jobLabel: k8s-app namespaceSelector: matchNames: - kube- test selector: matchLabels: k8s-app: jmx-exporter |
修改默认的clusterRole,使用Prometheus能采集其他namespace下的pod中的数据
vim prometheus-clusterRole.yaml
1 2 3 4 5 6 7 8 9 10 11 12 | ... resources: - nodes /metrics - namespaces - services - endpoints - pods verbs: - get - list - watch ... |
1 | # kubectl replace -f prometheus-clusterRole.yaml |
创建
1 2 3 | # kubectl create -f jmx-exporter.yaml service /jmx-exporter created deployment.apps /jmx-exporter created |
查看Prometheus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2017-11-24 Rsync+inotify自动同步数据