GuanceCloud / dd-trace-java

Datadog APM client for Java
https://docs.datadoghq.com/tracing/languages/java
Apache License 2.0
9 stars 3 forks source link

jvm 采集需要添加线程状态等相关指标 #25

Closed yangwenwei666 closed 1 year ago

yangwenwei666 commented 1 year ago

目前支持的如下: image

期望目标:

b76576e806066cfff62d5594a93d0eb5

image

songlonqi-java commented 1 year ago

如何通过ddtrace获得jvm线程指标

dd-java-agent 本身集成了 jmxfetch ,但是默认的线程指标只有一个:jvm.thread_count

这时候 需要自定义配置文件和指标。

首先需要配置文件:

  1. 创建文件夹 /usr/local/ddtrace/conf.d 目录随意(注意权限),下面用的着。
  2. 在文件夹下创建配置文件 guance.d/conf.yaml , 文件必须是 yaml 格式。
  3. conf.yaml 文件配置看最后。

java服务开启jmx,需要的启动参数为:

  -Ddd.jmxfetch.enabled=true\
  -Dcom.sun.management.jmxremote.host=127.0.0.1 \
  -Dcom.sun.manaagement.jmxremote.port=9012 \
  -Dcom.sun.management.jmxremote.ssl=false \
  -Dcom.sun.management.jmxremote.authenticate=false \

ddagent 需要增加启动参数:此处的配置对应上文的目录和文件

-javaagent:/usr/local/dd-java-agent.jar \
-Ddd.jmxfetch.config.dir="/usr/local/ddtrace/conf.d/" \
-Ddd.jmxfetch.config="guance.d/conf.yaml" \

我的服务名为 tmall.jar 合并启动参数为:

java -javaagent:/usr/local/dd-java-agent.jar \
  -Ddd.trace.debug=true\
  -Ddd.jmxfetch.enabled=true\
  -Dcom.sun.management.jmxremote.host=127.0.0.1 \
  -Dcom.sun.manaagement.jmxremote.port=9012 \
  -Dcom.sun.management.jmxremote.ssl=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Ddd.jmxfetch.config.dir="/usr/local/ddtrace/conf.d/" \
  -Ddd.jmxfetch.config="guance.d/conf.yaml" \
  -jar tmall.jar

conf.yaml 配置文件如下:

init_config:
  is_jmx: true
  collect_default_metrics: true

instances:
  - jvm_direct: true
    host: localhost
    port: 9012
    conf: 
      - include:
          domain: java.lang
          type: Threading
          attribute:
            TotalStartedThreadCount:
              alias: jvm.total_thread_count
              metric_type: gauge
            PeakThreadCount:
              alias: jvm.peak_thread_count
              metric_type: gauge
            DaemonThreadCount:
              alias: jvm.daemon_thread_count
              metric_type: gauge

注意:java 服务必须开启 jmx 端口。

lrwh commented 1 year ago

这种场景只适合单实例场景,对于多实例场景可能不适用了,任何多出来的应用端口,对于部署来说都是致命的。看看是否可以探索其他方式进行指标输出。

lrwh commented 1 year ago

这种场景只适合单实例场景,对于多实例场景可能不适用了,任何多出来的应用端口,对于部署来说都是致命的。看看是否可以探索其他方式进行指标输出。

后面我想了下,其实在云原生环境下,我们可以通过annotation来配置prometheus的采集,避免了端口冲突问题。可以close了。