Slide 1

Slide 1 text

© 2025 Wantedly, Inc. Trace Metrics と Istio Metrics で サービス健全性を監視する Japan Datadog User Group Meetup #7 2025-02-26 - Hayato Kawai (@fohte)

Slide 2

Slide 2 text

© 2025 Wantedly, Inc. 自己紹介 名前 Fohte (ふぉーて) 本名: 川井 颯人 (Hayato Kawai) 所属 ウォンテッドリー株式会社 Infra Squad 趣味 🎮 🎹

Slide 3

Slide 3 text

© 2025 Wantedly, Inc. 持ち帰ってほしいこと ● エラーレートやレイテンシーは APM の trace metrics で監視できる ● Istio metrics でも同様の監視ができる

Slide 4

Slide 4 text

© 2025 Wantedly, Inc. やりたいこと ● 特定の機能のエラーレートとレイテンシーを監視したい ● かつアプリケーションのバージョンごとに監視したい

Slide 5

Slide 5 text

© 2025 Wantedly, Inc. 特定の機能のエラーレートとレイテンシーを監視したい ● 例: GET https://wantedly.com/id/:user_id の エラーレートが xx % になったら or レイテンシーが xx 秒以上のリクエストが多くなったら アラート

Slide 6

Slide 6 text

© 2025 Wantedly, Inc. かつアプリケーションのバージョンごとに監視したい ● canary release で canary へのリクエストだけ区別し エラーレートやレイテンシーを監視したい (参考) canary release を実現する仕組み → https://speakerdeck.com/fohte/duan-jie-de-ririsuw oshi-xian-suru-kube-canary

Slide 7

Slide 7 text

© 2025 Wantedly, Inc. ウォンテッドリーの Datadog にあるこれに満たせそうなもの ● Datadog Logs に ALB のアクセスログを入れている ● Datadog APM を使っている

Slide 8

Slide 8 text

© 2025 Wantedly, Inc. Datadog Logs にある ALB のアクセスログで監視できないか ● 💡 Logs から custom metrics を生成できるので それで計測できそう ○ が、Logs Pipeline つらい問題が… ■ 詳しくは → ● 🆖 アプリケーションの バージョン情報が ALB 単体では取れない https://speakerdeck.com/fohte/datadog-logs-wohuo-yong-site- slo-jian-shi-ji-pan-wogou-zhu-suru

Slide 9

Slide 9 text

© 2025 Wantedly, Inc. Datadog APM ● 💡 Datadog APM でもクエリできる ○ 取りたいエラーレートやレイテンシー (duration) をクエリできる ○ これで良さそう => 大きなハマりどころがあった

Slide 10

Slide 10 text

© 2025 Wantedly, Inc. Datadog APM でクエリするときのハマりどころ ● 🆖 クエリは Indexed Spans に対して計算される ○ Indexed Spans はサンプリングされた後のデータ ○ 期待すること: サンプリングされていないデータで計算したい ■ 実際、意図したエラーレートやレイテンシーが算出できなかった https://docs.datadoghq.com/tracing/trace_pipeline/

Slide 11

Slide 11 text

© 2025 Wantedly, Inc. Metrics Summary からメトリクス一覧が見られる Metrics Summary から 今回の用途で使えそうな メトリクスを発見した ● Trace Metrics ○ trace..hits など ● Istio Metics ○ istio.*

Slide 12

Slide 12 text

© 2025 Wantedly, Inc. 今回話す metrics 2 種類ざっくり紹介 Trace Metrics ● Datadog APM のトレースをもとに生成される メトリクス ○ https://docs.datadoghq.com/tracing/metrics/metrics_namespace/ Istio Metrics ● Istio 自体が生成するメトリクスが Datadog の Istio integration で送られる ○ https://docs.datadoghq.com/integrations/istio/

Slide 13

Slide 13 text

© 2025 Wantedly, Inc. Trace Metrics ● Ingested Spans から生成されるメトリクス ○ Indexed Spans ではないのでサンプリングされない ! https://docs.datadoghq.com/tracing/trace_pipeline/

Slide 14

Slide 14 text

© 2025 Wantedly, Inc. Trace Metrics の実用例 APM の Service Summary のグラフは Trace Metrics で クエリされている

Slide 15

Slide 15 text

© 2025 Wantedly, Inc. Trace Metrics で実現できるのか ● ✅ エラーレートを取りたい ○ trace..errors / trace..hits で実現できる ● ✅ レイテンシーを取りたい ○ trace. で duration を取れる ● ❌ canary release かどうかを区別したい ○ version タグはあるものの、それが canary release された version なのかは 判別できない

Slide 16

Slide 16 text

© 2025 Wantedly, Inc. Istio Metrics ● Istio が提供するメトリクスを Datadog でも見られる ○ 例: istio.mesh.request.count (リクエスト数) ● (補足) Wantedly はほぼ全てが k8s cluster に乗っている & pod の通信はすべて Istio を通している

Slide 17

Slide 17 text

© 2025 Wantedly, Inc. Istio Metrics で実現できるのか ● ✅ エラーレートを取りたい ○ istio.mesh.request.count.total で実現できる

Slide 18

Slide 18 text

© 2025 Wantedly, Inc. Istio Metrics で実現できるのか ● ✅ レイテンシーを取りたい ○ istio.mesh.request.duration.milliseconds.sum.total で実現できる

Slide 19

Slide 19 text

© 2025 Wantedly, Inc. Istio Metrics で実現できるのか ● ✅ canary release かどうかを区別したい ○ ウォンテッドリーの canary release の仕組みでは Deployment 名が必ず -canary で終わるので、それをもとにクエリできた ○ Trace Metrics には kube_deployment tag がない

Slide 20

Slide 20 text

© 2025 Wantedly, Inc. Trace Metrics vs Istio Metrics ● すべて Istio Metrics でよいのでは? => 部分的にそう ● Trace Metrics は span の情報でクエリできるのが強み ○ もともと要件として「ある機能のエラーレート等を監視したい」があった ■ 例: Rails のある controller のエラーレート・レイテンシーを監視したい ○ Trace Metrics ではこれが実現できる (resource name が取れる) ■ Istio Metrics では request path などの情報はない (含めようと思えば Telemetry API でできる) ● 結論: 使い分けよう

Slide 21

Slide 21 text

© 2025 Wantedly, Inc. 持ち帰ってほしいこと ● エラーレートやレイテンシーは APM の trace metrics で監視できる ● Istio metrics でも同様の監視ができる