LoginSignup
5
3

More than 5 years have passed since last update.

PlayFramework for Scala でDataDogのAPMを使う

Last updated at Posted at 2018-06-28

ウェブアプリケーションサーバはPlayFramework for Scalaを使うことを想定します。

DataDogとは

サーバ監視サービスです。
類似のサービスにNewRelicなどがあります。

システム構成

公式サイトの動画を見るのが速いですが、一応説明

DataDogAgent : ネットワーク内に常駐させて、DataDogのクラウドに情報を投げるサービス。API_KEYとport:8126 さえ開けておけばとりあえず機嫌よく動いてくれる。なおDataDogはこいつの数が課金単位なので気を付けよう。
APM(datadog-java-agent):アプリケーションサーバの起動箇所にフックしてアプリケーションの挙動をDataDogAgentにチクる装置。送信先のホストとポートが間違ってるとアプリごと死ぬ。

公式の導入方法

DD_AGENT_HOST=$DD_AGENT_PORT_8126_TCP_ADDR \
DD_AGENT_PORT=$DD_AGENT_PORT_8126_TCP_PORT \
java -javaagent:/path/to/the/dd-java-agent.jar -jar /your/app.jar

簡単に言ってくれちゃってこのやろう…
実際の運用でjavaコマンドをダイレクトに叩いてる人はいないんじゃないでしょうか。
そう、例えば sbt docker:publishlocal で最小限のコンテナを構築してコンテナリポジトリからk8sに展開するなど。

sbt docker:publishlocal

docker-compose up

こんな風にね。

そうした場合、-javaagentなんてオプションを差し込むのにも一筋縄では行かず、sbtのプラグインでsbt-javaagentの導入が必要になります。

project/plugins.sbt
scala
addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.4")

lazy val root = (project in file(".")).enablePlugins(PlayScala, JavaAgent, JavaAppPackaging)
  .settings(
    javaAgents += "com.datadoghq" % "dd-java-agent" % "0.7.0"
  )

libraryDependencies += "com.datadoghq" % "dd-java-agent" % "0.7.0"

dd-java-agent のplayframework対応は、β版で、標準では対応していません。
そのため、java実行時に以下のオプションを指定する必要があります。

-Ddd.integration.java_concurrent.enabled=true -Ddd.integration.play.enabled=true

参考:https://docs.datadoghq.com/tracing/setup/java/#beta-instrumentation

これも一筋縄では行かない。
結論から言うとdockerエントリポイントに引数を追加しましょう。

dockerEntrypoint := Seq("bin/" + name , "-Ddd.integration.java_concurrent.enabled=true", "-Ddd.integration.play.enabled=true")

なぜdockerエントリポイントに引数を追加するのがオプションになっているのかというと、
sbt-dockerの生成する自動起動スクリプトの構造で、引数の中で-D*, -agentlib*, -J* *のオプションはjava実行時に引数として渡すようになっているからです。

参考:
https://github.com/sbt/sbt-native-packager/blob/v1.3.4/src/main/resources/com/typesafe/sbt/packager/archetypes/scripts/bash-template#L197-L198

5
3
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
3