JavaアプリケーションのパフォーマンスをDatadogで可視化しようとしたときにハマったので、
誰かの役に立てばと思い、残しておきます。
やりたかったこと
- JVMHeap使用状況などのメトリクスを取得したかった。
公式ドキュメントは以下にあるので、ドキュメントを参考にやってみます。
JMX Checks
JavaのIntegrationを有効にする
DatadogはデフォルトではJavaのメトリクスを取得するようになっていません。
なので明示的に設定をOnにする必要があります。
サイドバーのIntegrationから、Javaを検索し設定をOnにします。
availableをクリックし詳細画面からinstall integrationをクリック
jmx.yamlを追加
次にdatadog-agentをinstallしたサーバ内に入り、Javaが動いているサーバの情報をdatadog-agentに教えてあげる必要があります。
datadog-agentはデフォルトで様々なintegrationのコンフィグファイル例を用意してくれており、今回はそれをコピーしてそのまま使います。
$ cp /etc/dd-agent/conf.d/jmx.yaml.example /etc/dd-agent/conf.d/jmx.yaml
$ vim /etc/dd-agent/conf.d/jmx.yaml
init_config:
instances:
- host: localhost
port: 7199
port: 7199など気になる設定はありますが、そのまま使用します。
datadog-agentをrestartする
設定ファイルを変更した際はagentをrestartすると変更した設定が読み込まれます。
$ sudo /etc/init.d/datadog-agent restart
だが値は取れない
dashboardを作成したときに、jmx.hogehogeが候補として出てくることを期待するが出てこない。
Listenしてないportなどを指定していたので当たり前といえば当たり前です。
結論から言うとJavaアプリケーション起動時にJMXのポートを公開しておかないと値が取れません。
JMXとは何かという方は以下を参照してください。
JMX について
起動時に以下のオプションを追加する。
# jmxをonにする
-Dcom.sun.management.jmxremote
# jmxの情報を取得できるportを指定します。jmx.yamlで指定したportはここでの設定したportになります
-Dcom.sun.management.jmxremote.port=7199
# 通信時にsslをonにするかどうか。今回はlocalhostでの通信なのでOffにします。
-Dcom.sun.management.jmxremote.ssl=false
# password認証をするか
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=true