「なぜか本番環境でだけ遅い」「原因不明の500エラーが深夜に飛んでくる」……そんな悪夢にうなされる日々とは、今日で別れを告げましょう。
こんにちは。システムがブラックボックス化することに誰よりも恐怖を感じる、オブザーバビリティのエンジニアです。今日は、皆さんのJava/Spring Bootアプリを「中身がすべて透けて見える魔法の器」に変える、Datadog APMの導入ガイドをお届けします。
初心者の方でも迷わないよう、本質だけを凝縮して解説しますね。これをマスターすれば、障害対応のスピードは劇的に変わり、あなたの精神的な余裕も桁違いになるはずです。
—
1. なぜ「ログ」だけでは不十分なのか?
多くのエンジニアは「ログ」を頼りに障害を追います。しかし、マイクロサービス化が進む現代では、1つのリクエストが複数のサービスをまたぎます。ログだけでは「どこで時間がかかったのか」「どのDBクエリがボトルネックなのか」を特定するのに、膨大な時間を浪費してしまいます。
そこで登場するのがAPM(Application Performance Monitoring)です。
APMは、リクエストの旅路を一本の線(トレース)として記録します。どこで詰まっているのか、どこでエラーが起きたのか。Datadog APMを入れれば、それが一目でわかるようになります。
—
2. インストール:魔法の「エージェント」を添える
Javaアプリケーションの場合、コードを書き換える必要はほとんどありません。Javaの強力な機能である「Java Agent」を使って、実行時に動的に監視機能を注入します。
ステップ1: Datadog Java Agentの準備
まず、`dd-java-agent.jar`をダウンロードします。
プロジェクトのルートや適切なディレクトリに配置してください
wget -O dd-java-agent.jar ‘https://dtdg.co/latest-java-tracer’
ステップ2: Spring Bootの起動時にアタッチする
アプリ起動時の引数に、このエージェントを渡すだけです。これが「最も重要なセットアップ」です。
java -javaagent:./dd-java-agent.jar \
-Ddd.service=my-awesome-app \
-Ddd.env=production \
-Ddd.version=1.0.0 \
-jar target/my-app.jar
- `-Ddd.service`: サービス名を指定します。後でDatadog上で探すときの「名前」になります。
- `-Ddd.env`: 環境(dev, staging, prod)を分けましょう。これだけで監視の精度が段違いになります。
—
3. HelloWorldで動作確認:トレースの「魂」を見る
設定ができたら、Spring Bootのコントローラーで実際にトレースが飛ぶか確認しましょう。特別なおまじないは不要ですが、少しだけ「意味のある名前」をつけると可視化が美しくなります。
@RestController
@RequestMapping(“/api”)
public class HelloController {
@GetMapping(“/hello”)
public String hello() {
// ここにビジネスロジックが入ります
return “Hello, Observability!”;
}
}
アプリを起動して `curl localhost:8080/api/hello` を叩いてください。
数分待つと、Datadogの「APM > Traces」画面に、あなたのリクエストが美しいグラフとなって現れます。
—
4. 現場で差がつく「精度の高い監視」の極意
ここからが、伝説的なアーキテクトからのアドバイスです。ただ動かすだけでなく、「使える」監視にするための2つの鉄則を授けます。
① 分散トレーシングを繋ぐ(Context Propagation)
複数のサービスを呼び出す場合、Datadogはヘッダー情報を引き継いでくれます。これにより、AサービスからBサービスへ、どのような流れでリクエストが伝搬したかを可視化できます。これだけで、システム構成図がいらなくなるほど構造が見えてきます。
② エラーハンドリングの可視化
Spring Bootの `@ControllerAdvice` を使ってエラーを補足する際、`span.setError(true)` を明示的に呼ぶことで、Datadog上で「どのエラーがビジネス上の致命的な失敗か」を即座に特定できるようになります。
// エラー発生時のヒント
Span span = GlobalTracer.get().activeSpan();
if (span != null) {
span.setTag(“error”, true);
span.log(Map.of(“message”, “予期せぬビジネスエラーが発生”));
}
—
まとめ:あなたはもう「暗闇」を歩かなくていい
Datadog APMを導入するということは、「システムに内蔵されたレントゲン室」を持つことと同義です。
- ログをgrepする無駄な時間は消え去ります。
- 「たぶんDBが重いんじゃないかな?」という推測は、「このSQLが90%の時間を使っている」という事実へと変わります。
最初は難しく感じるかもしれませんが、まずは `-javaagent` をつけて起動する。それだけで、あなたの開発者体験は劇的に向上します。
もし何か壁にぶつかったら、いつでも戻ってきてください。監視の世界は奥が深く、知れば知るほど面白くなりますよ。さあ、今すぐあなたのアプリに「視力」を与えてあげましょう!