Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発フェーズでのオブザーバビリティ活用やプロファイルのススメ / getting-starte...

開発フェーズでのオブザーバビリティ活用やプロファイルのススメ / getting-started-profile-o11y

findy さんのイベントの LT 資料です。 #o11y_findy
開発フェーズでもオブザーバビリティツールやプロファイルを使っていきましょうという話をしました。
https://findy.connpass.com/event/328935/

アーカイブ動画:https://www.youtube.com/watch?v=F49m7ZSF6oM

逆井(さかさい)

September 24, 2024
Tweet

More Decks by 逆井(さかさい)

Other Decks in Technology

Transcript

  1. 自己紹介 オブザーバビリティ - 実践までの道のり - Findy Lunch LT 逆 井 啓

    佑 さかさい • 所属:Datadog Japan • コミュニティ: ◦ OpenTelemetry Meetup ◦ Google Cloud Champion Innovators • 前回は #OTel_findy で登壇させて頂きました
  2. 今日 15 分くらいで話そうと思っていること オブザーバビリティ - 実践までの道のり - Findy Lunch LT

    ✔ 内容 ◦ プロファイルのお話 ◦ トップバッターなので、少し理論的な話も含めながら ✔ ゴール ◦ 開発フェーズにおいてもオブザーバビリティは意味があり、 プロファイルを活用するという "道のり" もあるよ。と示すこと ✔ 参考 ◦ 『効率的なGo』の 3 章、6 章 - 9 章を多分に参考にさせて頂いています 『効率的なGo』(Bartłomiej Płotka 著、山口 能迪 訳 ISBN978-4-8144-0053-9)
  3. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT オブザーバビリティとは

    • 外部シグナルから推測されるシステムの状態を推論する能力 入力 出力 システム ? 外部シグナル
  4. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 入力

    出力 システム ? 外部シグナル 主要なシグナル(Primary Signals) • ログ • トレース • メトリクス • プロファイル これらを総称して、 テレメトリーシグナルと呼びます。 Ref: tag-observability / whitepaper.md オブザーバビリティとは • 外部シグナルから推測されるシステムの状態を推論する能力
  5. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT オブザーバビリティにおける重要なトピック

    ✔ 計装:シグナルをどのように計測し、収集するか(e.g. OpenTelemetry) ✔ 活用:シグナルをどのように活用するか
  6. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT オブザーバビリティにおける重要なトピック

    ✔ 計装:シグナルをどのように計測し、収集するか(e.g. OpenTelemetry) ✔ 活用:シグナルをどのように活用するか
  7. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT オブザーバビリティにおける重要なトピック

    ✔ 計装:シグナルをどのように計測し、収集するか(e.g. OpenTelemetry) ✔ 活用:シグナルをどのように活用するか オブザーバビリティ獲得後のよくあるトピックとしては • トラブルシュートの迅速化、MTTR の短縮 • 多角的に問題分析しユーザー影響の調査 • サービス遅延時にどのコンポーネントに影響があるかの調査 など、運用フェーズ(や有事の際)の文脈 でのトピックが肌感的に多い。実際とても有効的
  8. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 運用フェーズでのみオブザーバビリティは有効なのか?

    Observability can be used in literally all phases of the development lifecycle of a system. You can use it while testing your new feature, monitoring production resiliency, having insights about how your customers use your product, or making data-driven decisions about your product roadmap. Once you have either of those goals in mind, you'll start thinking about the outputs, or what we call them, the signals. tag-observability / whitepaper github.com/cncf/tag-observability/blob/main/whitepaper.md
  9. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 運用フェーズでのみオブザーバビリティは有効なのか?

    Observability can be used in literally all phases of the development lifecycle of a system. You can use it while testing your new feature, monitoring production resiliency, having insights about how your customers use your product, or making data-driven decisions about your product roadmap. Once you have either of those goals in mind, you'll start thinking about the outputs, or what we call them, the signals. オブザーバビリティ(可観測性)は、システムの開発ライフサイクルのあらゆる段階で使 うことができます。新しい機能をテストするとき、実運用の安定性を監視するとき、顧客がどのよう に製品を使っているかのインサイトを得るとき、または製品のロードマップに関するデータに基づいた 意思決定を行うときなどに活用できます。これらの目標のいずれかを考え始めると、出力、つまり「シ グナル」と呼ばれるものについて考えるようになります。 tag-observability / whitepaper github.com/cncf/tag-observability/blob/main/whitepaper.md
  10. イントロ: オブザーバビリティ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 運用でのみオブザーバビリティは有効なのか?

    Observability can be used in literally all phases of the development lifecycle of a system. You can use it while testing your new feature, monitoring production resiliency, having insights about how your customers use your product, or making data-driven decisions about your product roadmap. Once you have either of those goals in mind, you'll start thinking about the outputs, or what we call them, the signals. オブザーバビリティ(可観測性)は、システムの開発ライフサイクルのあらゆる段階で使 うことができます。新しい機能をテストするとき、実運用の安定性を監視するとき、顧客がどのよう に製品を使っているかのインサイトを得るとき、または製品のロードマップに関するデータに基づいた 意思決定を行うときなどに活用できます。これらの目標のいずれかを考え始めると、出力、つまり「シ グナル」と呼ばれるものについて考えるようになります。 tag-observability / whitepaper github.com/cncf/tag-observability/blob/main/whitepaper.md 開発フェーズにおけるオブザーバビリティの活用を 敢えて再考してみる。 ※ 既に活用してる人からしたら至極当たり前の話です。
  11. 開発フェーズ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 『効率的なGo』の 効率性を考慮した開発フロー

    より、 Ref:『効率的なGo』図3-5: 効率性を考慮した開発フロー • TFBO フロー ◦ Test / Fix / Benchmark / Optimization • 機能フェーズ で機能要件をクリアした後に、 効率化フェーズ で性能要件をチェック。 満たしていない場合は繰り返す • 機能フェーズ、効率化フェーズのいずれも クリアしたらリリース
  12. TFBO フローおける効率化フェーズ オブザーバビリティ - 実践までの道のり - Findy Lunch LT Ref:『効率的なGo』図

    6-1: 図 3-5 から、    オブザーバビリティを重視した部分を抜粋 効率化フェーズ では、 「改善したいレイテンシーやリソースの使用量の 主な原因がコード のどこにあるか を知ること」が重要 • オブザーバビリティの活用 主な原因がコードのどこにあるか を特定するために • ログ、トレース、メトリクスも有用ではあるが間接的 • よりダイレクトにリソースの大量使用や、 高レイテンシーの原因をコードレベルで特定したい プロファイラーの活用
  13. プロファイルのススメ オブザーバビリティ - 実践までの道のり - Findy Lunch LT 開発フローにおける 効率化フェーズ

    では プロファイル が有用 • どのコードが時間 / リソース消費にどれだけ 寄与 するか ◦ CPU 時間 ◦ メモリ使用 ◦ など => フィードバックループを素早くまわし、性能改善 ※ 補足:   『効率的な Go』では、ベンチマーク も言及。   プロファイル を測定し、ベンチマークを実行し、効率よくボトルネックを発見する 性能改善プロセス を紹介。   どのくらい性能改善をするかを考えるための アプリごとのサービスレベル目標(RAER)も言及。詳しくは書籍へ Go ! プロファイルが先、質問は後 『効率的なGo p.383』 

  14. プロファイルのデモンストレーション オブザーバビリティ - 実践までの道のり - Findy Lunch LT app-v1 app-v2

    効率化フェーズ を仮定し、 バージョンの異なる2つの簡単なアプリケーションのプロファイルを取得し、性能改善プロセスをデモ • デモは GitHub に公開してるので興味のある方は確認してください https://github.com/keisukesakasai/o11y-findy-demo 負荷 プロファイル ◾ 補足:  プロファイルのためのツールは OSS だと Grafana Pyroscope や Parca など  参考: Grafana Pyroscope を用いて Go のアプリケーションで継続的プロファイルしてみた
  15. プロファイルのデモンストレーション オブザーバビリティ - 実践までの道のり - Findy Lunch LT app-v1 のプロファイル

    • count 関数の CPU 時間への寄与が支配的 ソース: https://github.com/keisukesakasai/o11y-findy-demo/blob/main/app-v1/main.go#L89-L96
  16. プロファイルのデモンストレーション オブザーバビリティ - 実践までの道のり - Findy Lunch LT app-v2 のプロファイル

    • count 関数の寄与が小さくなり、性能改善を確認。ボトルネックが移動 ソース: https://github.com/keisukesakasai/o11y-findy-demo/blob/main/app-v2/main.go#L89
  17. app-v1 と app-v2 の比較 • app-v1 をベースラインとしたときの、app-v2 のプロファイルの変化を見る => count

    の CPU 時間が減少(緑色)していることを確認できる プロファイルのデモンストレーション オブザーバビリティ - 実践までの道のり - Findy Lunch LT ※ プロファイルツールにより可能。観測範囲だと、Datadog や Cloud Trace、Pyroscope など比較機能が具備
  18. 補足: 継続的プロファイル オブザーバビリティ - 実践までの道のり - Findy Lunch LT  継続的にプロファイルを計測し続け、

     長い時間における効率の変化を計測する手法として、「継続的プロファイル」という手法があります。 • 運用フェーズで、 何かが起きた際に、収集し続けていたプロファイルから変化を追うことが可能(マクロな観点) ⇔ 本スライドのメイントピックは、   開発フェーズで、プロファイルを測定して効率を改善する話(ミクロな観点) • もちろん取り続けることのオーバーヘッドには留意が必要 ◦ サンプリングや、レプリカのうち一つで測定するなどの工夫をし、本番環境で継続的に測定 Ref: オブザーバビリティのマクロからミクロまで https://speakerdeck.com/ymotongpoo/observability-from-macro-to-micro
  19. まとめ オブザーバビリティ - 実践までの道のり - Findy Lunch LT • 開発フェーズにおいてもオブザーバビリティを活用できる文脈で、プロファイルについて紹介

    ◦ (再掲) 本スライドは『効率的なGo』で取得した知識を参考にしています。 本書籍は Go を題材にしているが 性能改善の型 や それに関するオブザーバビリティの活用 については 言語問わず共通的な考え方であり、サービスの効率を考えるすべてのエンジニアにとって有益です。 • プロファイルは繊細な領域に見えるかもしれないが、基本を知れば難しくない ◦ 本日触れなかったが、プロファイル計装自体も容易 様々なテクニックやツールを試し "各社に最適なオブザーバビリティの道のり" を見つけてください