跳转至

使用 OpenTelemetry Java Agent 暴露 JVM 监控指标

在 Opentelemetry Agent v1.20.0 及以上版本中,Opentelemetry Agent 新增了 JMX Metric Insight 模块, 它也是通过检测应用程序中本地可用的 MBean 公开的指标,对其进行收集并暴露指标,它还针对常见的 Java Server 或框架内置了一些监控的样例,请参考预定义的指标。 如果你的应用已经通过 Opentelemetry Operator 将 Opentelemetry Agent 自动注入到了你的应用中了,那么你不再需要另外引入其他 Agent 去为我们的应用暴露 JMX 指标。比如以下 Demo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  replicas: 1
  template:
    metadata:
      labels:
        app: my-app
      annotations:
        instrumentation.opentelemetry.io/inject-java: "insight-system/insight-opentelemetry-autoinstrumentation" # 注入 otel agent 需要
        # 以下是指标采集需要的 3 个注解
        insight.opentelemetry.io/metric-scrape: "true" # 是否采集
        insight.opentelemetry.io/metric-path: "/metrics"      # 采集指标的路径
        insight.opentelemetry.io/metric-port: "9464"   # 采集指标的端口
    spec:
      containers:
      - name: myapp
        image: jaegertracing/vertx-create-span:operator-e2e-tests
        ports:
          - containerPort: 8080
            protocol: TCP
          - containerPort: 9464 # 容器也需要对应暴露 9464 端口,同时 Deployment 对应的 SVC 也需要申明 9464 端口
            protocol: TCP

在以上的 Deployment 中,我们在 template.metadata.annotations 下添加了四个注解,它们各种有自己的作用。其中的 insight.opentelemetry.io/metric-port 指定的就是 Opentelemetry Agent 默认的指标暴露端口。如果端口发生了冲突,你可以给你的应用指定一个新的指标端口: -Dotel.exporter.prometheus.port=8464, 在改动后其他位置的的端口值也要一并修改。

为 Java 中间件暴露指标

Opentelemetry Agent 也内置了一些中间件监控的样例,请参考 预定义指标

默认没有指定任何类型,需要通过 -Dotel.jmx.target.system JVM Options 指定,比如 -Dotel.jmx.target.system=jetty,kafka-broker

参考

评论