【入門編】Datadog Universal Service Monitoring(USM)で言語非依存のサービス可視化を実現する方法 – 運用監視・オブザーバビリティ活用バイブル

こんにちは!マイクロサービスの海原を航海するエンジニアの皆さん、日々の運用お疲れ様です。

Java、Go、Python、Node.js、さらにはRustやC++まで……。組織が成長し、システムがモダンになるにつれ、気がつけば社内は「多言語の要塞(マイクロサービス)」と化していませんか?

障害が起きたとき、「どのサービスが、どのサービスを叩いて沈黙しているのか」を突き止めるために、各言語のエージェントを入れて、コードを書き換えて、ビルドし直して……と奔走した苦い経験、きっとあなたにもあるはずです。

今回は、そんな地獄のような依存関係の迷宮から私たちを解放してくれる、Datadogの奥義「Universal Service Monitoring(以下、USM)」について、徹底的に解説していきます。

これをマスターすれば、コードを1行も触ることなく、OSの深層からサービス間の通信が丸裸になります。毎日の障害調査やアーキテクチャの把握が劇的に楽になりますよ。さあ、一緒に扉を開けていきましょう!

—

1. そもそもUSM(Universal Service Monitoring)とは何か?

従来のAPM(Application Performance Monitoring)は、非常に強力でした。しかし、そこには一つの「宿命」がありました。それは「言語ごとのエージェントをアプリケーションコードやランタイムに組み込む必要がある」ということです。

  • Javaなら `-javaagent` を仕込み、
  • Pythonならコード内でライブラリを初期化し、
  • 新しくマイナーな言語で作られたサービスがあれば、対応エージェントがないと途方に暮れる。

これでは開発チームに負担がかかりますし、サードパーティ製のブラックボックスなバイナリや、レガシーなシステムは監視の網から零れ落ちてしまいます。

APMとUSMの決定的な違い

| 比較項目 | 従来のAPM | Universal Service Monitoring (USM) |
| :— | :— | :— |
| 監視の仕組み | アプリケーションコード内にSDK/エージェントを埋め込む | Linuxカーネル空間(eBPF)でネットワークパケットを盗聴・解析 |
| 対象言語 | エージェントがサポートする言語のみ | 言語非依存(C++, Go, Java, Rust, 自家製スクリプト何でもOK) |
| コード変更 | 必要(再ビルドやデプロイが必要な場合も) | 不要(コードは1文字も変えない) |
| 取得できる情報 | コードレベルの詳細なプロファイル、例外スタックトレース | サービス間の通信レイテンシ、スループット、エラー率、HTTP/gRPCのステータス |

そう、USMの正体は、Linuxカーネルの機能であるeBPF(Extended Berkeley Packet Filter)の力を借りて、OSのネットワークレイヤーから直接トラフィックをキャプチャし、「どのサービスとどのサービスが通信しているか」を自動でマッピングする技術です。

アプリケーションが何語で書かれていよう関係ありません。TCP/UDPのパケットが流れ、HTTPやgRPCなどのプロトコルが解釈できれば、Datadogが勝手に「サービス」として認識してくれます。

—

2. 導入の前提条件とセットアップの全体像

「eBPFとかカーネルとか、なんだか難しそう……」と思いましたか?
大丈夫、安心してください。現代のDatadog Agentは、この複雑な仕組みを驚くほどシンプルにパッケージングしてくれています。

必要な前提条件

1. Linuxカーネルバージョン: `4.14` 以上(eBPFの機能要件を満たすもの。最近のモダンなLinuxディストリビューションなら大抵クリアしています)
2. Datadog Agent: バージョン `7.35.0` 以上
3. 権限: カーネルプローブ(kprobes)やソケットフィルタをアタッチするための権限(通常はコンテナであれば特権コンテナ、あるいは適切なCAP_SYS_ADMINなどのケイパビリティ)

—

3. 実践!コード書き換えゼロのUSMセットアップ手順

それでは、実際にKubernetes環境(あるいはLinuxホスト)にUSMを導入する手順を見ていきましょう。今回は最も一般的なKubernetes(Helmチャート)をベースに解説します。

Step 1: Datadog AgentのHelm設定を書き換える

Datadog AgentのHelm値(`values.yaml`)で、System ProbeとeBPF、そしてUSMの機能を有効化します。これが魔法のスイッチです。

datadog-values.yaml
datadog:
apiKey: “”
site: “datadoghq.com” # 契約しているリージョンに合わせて変更

# デフォルトのAPM(トレーシング)に加えて、システムプローブを有効化
apm:
enabled: true

# eBPFを利用する機能群の親設定
systemProbe:
enabled: true
# USM(Universal Service Monitoring)を有効化
serviceMonitoring:
enabled: true

Network Performance Monitoring (NPM) も併用するとシナジーが高いので推奨
agents:
enabled: true
containers:
systemProbe:
securityContext:
capabilities:
add:

  • SYS_ADMIN
  • SYS_RESOURCE
  • NET_ADMIN
  • NET_BROADCAST
  • NET_RAW
  • IPC_LOCK
タイトルとURLをコピーしました