5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kubernetes上で実行されているDatadog AgentでJava JMX カスタムメトリクスを取得する方法

Last updated at Posted at 2022-09-26

はじめに

今回は、Kubernetes上で実行されているDatadog AgentでJMXカスタムメトリクスを取得する方法を記述していきたいと思います。

本記事を読むにあたっての前提条件

  • 本記事で指すアプリケーションはTomcat+SpringBootで作られたアプリケーションのことです。

  • 本記事はKubernetes上で実行されているDatadog AgentでJava JMXカスタムメトリクスを取得するための設定方法に取り上げています。Java JMXカスタムメトリクスをアプリケーションのコード上でどう設定するか等については触れません。

  • なお、Datadog-AgentはDaemonSetで動かします。

実行環境

  • Kubernetes環境
    • EKS
  • application
    • Java
      • Tomcat + SpringBoot

設定方法

Datadog Agent側

Configmap.yamlの設定

configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: <任意の名前>
  namespace: kube-support
  labels: {}
data:
  metrics-yaml: |
    jmx_metrics:
      - include:
          domain: <取得したいカスタムメトリクスのドメイン>
          type: Pool
          name: ConnectionPool
          attribute:
            PoolStats.available:
              #aliasには任意の文字列を入れてください。
              alias: <application_name>.poolstats.available 
              metric_type: gauge

今回は、コネクションプールを取得しようとしているので上記のような設定を行っています。

Datadog-agent.yamlの設定

datadog-agent.yaml(imageの変更)
spec:
    spec:
      containers:
        - name: agent
-          image: "gcr.io/datadoghq/agent:latest"
+          image: "gcr.io/datadoghq/agent:latest-jmx"          
          imagePullPolicy: IfNotPresent
datadog-agent.yaml(metric.yamlのmount)
          volumeMounts:
+            - {name: metrics-yaml, mountPath: /etc/datadog-agent/conf.d/tomcat.d/metrics.yaml,subPath: metrics.yaml}
      volumes:
+        - {name: metrics-yaml, configMap: {name: <任意の名前>, items: [{key: metrics-yaml, path: metrics.yaml}]}}

※Kubernetesマニフェストファイルの重要な部分のみ本記事では記載しています

初めて、Datadog Agentの構築を行う場合は、Kubernetes に Datadog Agent をインストールする
を参考にしつつ本記事で記載している設定を行なってください。

point

Deployment.yamlの設定

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: tomcat_sample_application
  name: tomcaat_sample_application
spec:
  template:
    metadata:
      annotations:
+        ad.datadoghq.com/tomcaat_sample_application.check_names: '["tomcat"]'
+        ad.datadoghq.com/tomcaat_sample_application.init_configs: '[{"is_jmx": true, "collect_default_metrics": true}]'
+        ad.datadoghq.com/tomcaat_sample_application.instances: '[{"host": "%%host%%","port":"8086"}]'
+        ad.datadoghq.com/tomcaat_sample_application.logs: '[{"source":"tomcat","service":"tomcat"}]'
      containers:
        - name: tomcat_sample-application
          image: tomcat_sample-application
          env:
+            - name: POD_IP
+             valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+            - name: JAVA_TOOL_OPTIONS
+              value: "-Dspring.jmx.enabled=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=8086 -Dcom.sun.management.jmxremote.port=8086 -Djava.rmi.server.hostname=$(POD_IP)"

※Kubernetesマニフェストファイルの重要な部分のみ本記事では記載しています

point

動作確認

Datadog AgentがアプリケーションのJMXに接続できているかについての確認

Pod内のターミナル(DatadogAgent)
$agent status
出力結果(一部抜粋)
========
JMXFetch
========

  Information
  ==================
    runtime_version : 11.0.15
    version : 0.46.0
  Initialized checks
  ==================
    tomcat
      instance_name : tomcat-{Node_IP}-8086
      message : <no value>
      metric_count : metricの数
      service_check_count : 0
      status : OK
  Failed checks
  =============
    no checks

statusの部分がOKになっていればアプリケーションとDatadog Agentが接続できています。

metric_countは、350個の制限があります。metric_countが、350個を超える場合には、Datadog サポートチームに問い合わせる必要があります。
ref: JMX:メトリクスの収集

イメージ

空白の図 - 3ページ.png

JMX カスタムメトリクスがDatadogに送信できているかについての確認

Pod内のターミナル(DatadogAgent)
$agent jmx list collected
出力結果(一部抜粋)
2022-09-20 00:29:29 GMT | JMX | DEBUG | Connection | Querying bean names on scope: <bean domain>:name=ConnectionPool,type=Pool,*

agent jmx list collected で該当のmetricが取得できなかった場合

agent jmx list collectedで該当のmetricが取得できなかった場合は、agent jmx list not-matchingコマンドなどを利用してなぜmatchingしていないのか理由を知るのがよいと思います。

イメージ

空白の図 - 3ページ (1).png

実際にDatadog でデータが取得できているか確認

最後に、Datadog で反映されているかを確認します。
スクリーンショット 2022-09-20 9.44.10.png
Datadog でJava JMX カスタムメトリクスが取得できていることがわかります。

まとめ

本記事では、Kubernetes上で実行されているDatadog AgentでJava JMXカスタムメトリクスを取得する方法をまとめました。Datadog AgentでJMX カスタムメトリクスを取得する際の参考になれば幸いです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?