Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

プレイドにおけるDatadog APMの活用方法

プレイドにおけるDatadog APMの活用方法

大矢 康介 (株式会社プレイド)

2024年7月17日
Datadog セミナー:事例から学ぶCloud SIEMとアプリケーションモニタリングの活用方法
https://www.datadoghq.com/ja/event/casestudies-seminar202407/

PLAID Tech

July 17, 2024
Tweet

More Decks by PLAID Tech

Other Decks in Technology

Transcript

  1. © PLAID, Inc. | Confidential 2024.07.17  |  Datadog セミナー プレイドにおける Datadog APM の活⽤⽅法 APM‧Profiler

    を利⽤した⼤規模 SaaS のパフォーマンス改善事例 © PLAID, Inc. | Confidential
  2. © PLAID, Inc. | Confidential ⾃⼰紹介 ⼤⽮ 康介 株式会社プレイド エンジニア 2020年新卒⼊社 GKEの運⽤、KARTE

    Talkの開発、KARTEの管理画⾯のパフォーマンス改善など DX & Performance © PLAID, Inc. | Confidential 2
  3. © PLAID, Inc. | Confidential プレイドの全体戦略 “マルチチャネル × 1st Party Customer Data

    × リアルタイ ム” をワンストップで 提供するプラット フォーム © PLAID, Inc. | Confidential 5 1st Party Customer Data 戦略策定/ 事業‧組織開発 広告 市場調査/ 顧客調査 カスタマーサポート マーケティングオートメーション オフライン/OMO オンサイト マーケティング EmotionTech CX/EX KARTE Signals Databeat KARTE RightSupport STUDIO ZERO KARTE Message KARTE TALK KARTE Web/App KARTE Blocks
  4. © PLAID, Inc. | Confidential APM 導⼊前 監視⽅法 - ログ - メトリクス(インフラ、アプリケーション)

    - CPU, Memory などの使⽤率 - LB のエラー率、レイテンシ - アプリケーションにカスタムメトリクスを仕込む 課題 - リクエストがどのような経路になっているかわからない - システムの内部状態を把握するためにはコードを変更してリリースする必要がある const dd = require('libs-dogstatsd'); const stats = dd.start(); // measure hoge hoge(); stats.tick('hoge', 1, 1, ['user_id:1234']); カスタムメトリクスの実装例
  5. © PLAID, Inc. | Confidential Datadog APM の導⼊ 導⼊⽅法 JavaScript の場合はこれだけ プラグインも豊富(JavaScript

    の場合は特別な設定なく全て有効になる) - mongo - redis - express - google-cloud などなど import 'dd-trace/init';
  6. © PLAID, Inc. | Confidential Datadog APM の活⽤⽅法 - 異常検知 - Monitor

    - パフォーマンスチェック - Service Catalog - Dashboard - 障害の分析 - Dashboard - Trace Explorer - Continuous Profiler
  7. © PLAID, Inc. | Confidential 異常検知 Monitor - トレースメトリクスや、span から⽣成したメトリクスを使⽤ - Multi

    Alert を使ってサービス横断でエラー率を監視 - 開発中のシステムなどは Mute している
  8. © PLAID, Inc. | Confidential Datadog APM のベストプラクティス Scorecards - ログやデプロイの関連付け -

    Ownership 情報の付与 - これはあまりやってない - SLO や Monitor の作成 100%を⽬指す必要はないが、参考になる
  9. © PLAID, Inc. | Confidential APM を導⼊した効果 - 未知の問題が起きたときに、何が起きたか後から解像度⾼く把握できる - ログやメトリクスを仕込んで再度リリースする必要がない -

    各サービスがどのように監視されているかが、実装者に依存しない - デバッグできる⼈が増える - アラートを統⼀的に管理できる
  10. © PLAID, Inc. | Confidential mongoose アップデートによるパフォーマンス劣化 - mongo 4 系の EOL

    に伴って、クライアントライブラリ(mongoose)をアップデート - リリース後にパフォーマンスが劇的に悪化
  11. © PLAID, Inc. | Confidential Continuous Profiler の活⽤⽅法 Continuous Profiler を使ったボトルネック特定の⼿順 1.

    Continuous Profiler を有効にする 2. トレースメトリクス(trace. <span名> から始まるや つ)を可視化する 3. レイテンシが跳ねた時間帯の trace を View related traces でみに⾏く 4. 外部呼び出しで詰まっているか、CPU で詰まっている かを確認する 5. Compare Profiling を使って CPU を使っている関数 を特定する 環境変数を設定するだけ export DD_PROFILING_ENABLED=true export DD_PROFILING_TIMELINE_ENABLED=1
  12. © PLAID, Inc. | Confidential Continuous Profiler の活⽤⽅法 Continuous Profiler を使ったボトルネック特定の⼿順 1.

    Continuous Profiler を有効にする 2. トレースメトリクス(trace. <span名> から始まるや つ)を可視化する 3. レイテンシが跳ねた時間帯の trace を View related traces でみに⾏く 4. 外部呼び出しで詰まっているか、CPU で詰まっている かを確認する 5. Compare Profiling を使って CPU を使っている関数 を特定する
  13. © PLAID, Inc. | Confidential Continuous Profiler の活⽤⽅法 Continuous Profiler を使ったボトルネック特定の⼿順 1.

    Continuous Profiler を有効にする 2. トレースメトリクス(trace. <span名> から始まるや つ)を可視化する 3. レイテンシが跳ねた時間帯の trace を View related traces でみに⾏く 4. 外部呼び出しで詰まっているか、CPU で詰まっている かを確認する 5. Compare Profiling を使って CPU を使っている関数 を特定する
  14. © PLAID, Inc. | Confidential Continuous Profiler の活⽤⽅法 Continuous Profiler を使ったボトルネック特定の⼿順 1.

    Continuous Profiler を有効にする 2. トレースメトリクス(trace. <span名> から始まるや つ)を可視化する 3. レイテンシが跳ねた時間帯の trace を View related traces でみに⾏く 4. 外部呼び出しで詰まっているか、CPU で詰まっている かを確認する 5. Compare Profiling や Endpoint Profiling を使って CPU を使っている関数を特定する
  15. © PLAID, Inc. | Confidential 使ってみた結果 - イベントループのブロッキングが問題の場合、遅い API があったとしても原因なのか結果なのかを特定するのが難しい - Endpoint

    Profiling により API ごとに Frame Graph を可視化することで調査がしやすかった - いくつかの潜在的なパフォーマンスの問題を特定し、パフォーマンスを向上させつつライブラリを vup することができ た🎉
  16. © PLAID, Inc. | Confidential Continuous Profiler のパフォーマンスオーバーヘッド - いくつかのサービスで試したが、Profiler を有効にするだけでパフォーマンスが少し悪くなるケースもあった -

    Profiler を有効にした Pod と有効にしてない Pod を⽤意して⽐較した - ⾔語ごとに注意事項があるので、公式ドキュメントをしっかり読むべき - Node.js の場合は Node.js 16 よりも前のバージョンを使う場合にオーバーヘッドが⼤きい
  17. © PLAID, Inc. | Confidential Continuous Profiler のコスト - APM と同じく Host

    単位 - 全てのサービスに Profiling を⼊れる必要はない - 複数 Pod がある場合は1台だけ⼊れて利⽤した
  18. © PLAID, Inc. | Confidential まとめと今後 - APM 導⼊による効果 - 複雑なシステムにおいて未知の問題が起きたとしても、新たにコードを修正してリリースするこ となくシステムの状態を把握できる

    - 各マイクロサービスが同じやり⽅で監視‧探索できる - Continuous Profiler の活⽤ - Compare Profiling や Endpoint Profiling などの機能で効率的にボトルネックの特定ができる - パフォーマンス‧コストなどの懸念がある場合はまずは Pod 1台から⼊れてみると良い - 今後やっていきたいこと - Dynamic Instrumentation を導⼊したい - コードを変更したり再デプロイすることなく、ログ‧メトリクス‧スパンを追加できる - Node.js, Typescript は未対応(Java, Python, .NET に対応)