Successfully reported this slideshow.
Your SlideShare is downloading. ×

OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 46 Ad

OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022

Download to read offline

https://djangocongress.jp/#talk-10

OpenTelemetryは、複数のプロセス、システムをまたがってアプリケーションの処理を追跡する分散トレースの仕組みを提供するフレームワークで、2021年春に1.0.0がリリースされました。このライブラリを活用し、Djangoアプリおよび周辺システムの処理を追跡する方法について紹介します。

Google Slide(スライド内のリンクをクリックできます)
https://docs.google.com/presentation/d/e/2PACX-1vRtqRQ6USDeV32_aTPjSaNXpKdn5cbitkmiX9ZfgwXVE-mh74I4eICFOB8rWGz0LPUIEfXn3APRKcrU/pub

コード
https://github.com/shimizukawa/try-otel/tree/20221112-djangocongressjp2022

Let's trace web system processes with opentelemetry djangocongress jp 2022

https://djangocongress.jp/#talk-10

OpenTelemetryは、複数のプロセス、システムをまたがってアプリケーションの処理を追跡する分散トレースの仕組みを提供するフレームワークで、2021年春に1.0.0がリリースされました。このライブラリを活用し、Djangoアプリおよび周辺システムの処理を追跡する方法について紹介します。

Google Slide(スライド内のリンクをクリックできます)
https://docs.google.com/presentation/d/e/2PACX-1vRtqRQ6USDeV32_aTPjSaNXpKdn5cbitkmiX9ZfgwXVE-mh74I4eICFOB8rWGz0LPUIEfXn3APRKcrU/pub

コード
https://github.com/shimizukawa/try-otel/tree/20221112-djangocongressjp2022

Let's trace web system processes with opentelemetry djangocongress jp 2022

Advertisement
Advertisement

More Related Content

More from Takayuki Shimizukawa (20)

Recently uploaded (20)

Advertisement

OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022

  1. 1. Takayuki Shimizukawa OpenTelemetryで Webシステムの処理を 追跡しよう 1 DjangoCongress JP 2022
  2. 2. おまえ誰よ ● BeProud IT Architect ○ 受託開発(Webアプリ / 機械学習 / 数理最適化) ○ 自社サービス( connpass / PyQ / TRACERY) ○ Python研修(Python基礎、Django、Pandas、その他) ● 一般社団法人PyCon JP Association 会計理事 ○ PyCon JP 年次イベントの見守り ○ Python Boot Camp 主催 ● Sphinx コミッター ● 書籍執筆・翻訳 2 @shimizukawa (清水川)
  3. 3. アジェンダ 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答 3
  4. 4. Webアプリ開発の困りごと 4 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  5. 5. 5 ● 現代のWebアプリは構成要素が多すぎる ○ フロントエンド (JS) ○ Webサーバー(Nginx) ○ Serverless API (Lambda/Functions) ○ バックエンド (Python) ○ ミドルウェア (RDB,KVS,ES, ...) ○ 各種サービスAPI (認証、決済、...) ● あるリクエストで呼び出された、処理全体の把握が難しい ● 処理を流れるデータの把握には、デバッグログ仕込みが必要 ● ログを追うにも集約が必要 ● 集約したログから処理全体を再構成して把握するのも難しい 本番、開発、テスト、あらゆるシーンで、状態の追跡(トレース)をしたい Webアプリ開発の困りごと
  6. 6. こういった困りごとを OpenTelemetry で解決したい 6
  7. 7. デモ 7 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  8. 8. デモの概要 ● Uptraceで ○ 収集した情報を見れるよ ● OpenTelemetry-Collector で ○ 色んな情報を収集してるよ ● Vectorで ○ ログを収集してるよ ● OpenTelemetry SDK で ○ アプリ内でも情報収集するよ 8
  9. 9. デモ1: 社内システム 9
  10. 10. デモ1:社内システム ● Nginx ● Redmine ● MySQL 10 社内 Network Web Server Redmine Server
  11. 11. デモ1:社内システム ● Nginx ● Redmine ● MySQL ● Docker (snapd) ● OpenTelemetry Collector ● Vector ● opentelemetry-ruby 11 社内 Network Web Server Redmine Server
  12. 12. デモ1:社内システム ● Nginx ● Redmine ● MySQL ● Docker (snapd) ● OpenTelemetry Collector ● Vector ● opentelemetry-ruby ● Uptrace (Cloud) 12 社内 Network Web Server Redmine Server
  13. 13. demonstration 13
  14. 14. デモ2: デモ用アプリ 14
  15. 15. ● Nginx ● React App ● Django App ● Python Requests App ● PostgreSQL デモコード https://github.com/shimizukawa/ try-otel/tree/20221112-djangoco ngressjp2022 デモ2: デモ用アプリ 15 devcontainer Web Server
  16. 16. ● Nginx ● React App ● Django App ● Python Requests App ● PostgreSQL ● OpenTelemetry Collector ● opentelemetry/plugin-react-load ● opentelemetry-python ● opentelemetry-cpp-contrib/nginx デモ2: デモ用アプリ 16 devcontainer OpenTelemetry Collector Web Server
  17. 17. ● Nginx ● React App ● Django App ● Python Requests App ● PostgreSQL ● OpenTelemetry Collector ● opentelemetry/plugin-react-load ● opentelemetry-python ● opentelemetry-cpp-contrib/nginx ● Uptrace (OSS) デモ2: デモ用アプリ 17 devcontainer OpenTelemetry Collector Web Server
  18. 18. demonstration コード https://github.com/shimizukawa/try-otel/tree/20221112-djangocongressjp2022 18
  19. 19. デモのまとめ ● Uptraceは ○ 監視ツールだよ ○ OSS版とクラウド版があるよ ○ 収集した情報を色々な角度で見れるよ ● OpenTelemetry-Collector で ○ システム情報を収集してるよ ○ ログ収集もできるけど、 Vectorの方が楽だったよ ● Vectorで ○ ログを楽に収集できるよ ● OpenTelemetry SDKで ○ アプリコードにも仕込んで直接情報収集できるよ 19
  20. 20. 計装とテレメトリ 20 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  21. 21. 計装とテレメトリ ● 計装(インスツルメンテーション) ○ 各コードに組み込んでいる部分 ● テレメトリ ○ 赤い破線 ● エクスポート ○ 計装したコードで集めた情報を取り出し、テ レメトリを送信すること 21
  22. 22. テレメトリの3要素 ● トレース ○ 1つのリクエストを元に発生する、各コ ンポーネントでの 処理(SPAN)の集まり ● メトリック ○ 統計情報 ○ 時間単位のアクセス数、負荷、等 ● ログ 22 ログ メトリック トレース トレース ログ トレース ログ メトリック
  23. 23. Python/Djangoへの計装 23 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  24. 24. デモ2のコード ● https://github.com/shimizukawa/try-otel/tree/2022111 2-djangocongressjp2022 ● DevContainer / GitHub Codespaces で動かせます 24
  25. 25. はい、Djangoはここまで 25
  26. 26. 後はザッと流しますね 26
  27. 27. 分散トレースとOpenTelemetry 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答 27
  28. 28. 分散トレースとは 28
  29. 29. 分散トレースとは 29 ● 分散している、 ● 各コンポーネントの処理を、 ● 各所で収集し、 ● 1箇所に集約し、 ● contextで関連付ける context=0x0123 context=0x0123 Request http://~~ Request 0x0123 0x0123 0x0123 0x0123 context=0x0123
  30. 30. context の伝搬 ● context = trace-id + span-id + α ● trace-id ○ 発生源が同じ処理(SPAN)に付けられる共通 のid ● span-id ○ 処理(SPAN)それぞれのid ● contextの伝搬 ○ contextを traceparent ヘッダーで渡す ■ W3Cで規定されている ■ https://w3c.github.io/trace-context/ 30 context=0x0123 context=0x0123 Request http://~~ Request 0x0123 0x0123 0x0123 0x0123 context=0x0123
  31. 31. contextで関連付けたTRACEとSPAN 31 Frontend GET POST DB保存 Email traca-id => {context} {context} {context} {context} {context} Frontend GET POST DB保存 Email DB取得 {context} DB取得 時間 TRACE SPAN
  32. 32. OpenTelemetryとは 32
  33. 33. OpenTelemetryとは ● 標準仕様 ○ 複数のプロセス、システムをまたがってアプリケーションの処理を追跡する 仕組み。その仕様。 ○ TRACE(通信の流れ)、LOG(ログ)、METRIC(統計情報)を収集し、関連付 ける ● リファレンス実装 ○ 各言語向けのSDK, OpenTelemetry Collector ● 守備範囲外 ○ バックエンド(テレメトリデータ保存、ビジュアライズ、監視) 33
  34. 34. Before OpenTelemetry ● 各種サービスを使い監視してきた ○ Nagios (サーバメトリクス監視 ) ○ Sentry (エラー監視) ○ DataDog (パフォーマンス監視 ) ○ Fluentd (ログ収集) ● 各サービスに共通仕様がなかった ○ 守備範囲が異なる ○ 複数サービス併用でカバー ○ 複数のエージェントの導入 ○ サービス間の情報分断 ● ベンダーロックイン ○ ベンダー都合は制御不能 ○ 一度使い始めると乗換が困難 34
  35. 35. After OpenTelemetry ● OpenTelemetryが要件を整理 ○ Trace, Metrics, Log の3要素に整理 ○ 3要素のトレーサビリティを確保 ● OpenTelemetryが共通仕様を策定 ○ 共通プロトコル OTLP を策定 ○ Trace, Metrics, Logのデータ構造を定義 ○ API仕様を定義 ● OpenTelemetryが実装を提供 ○ Instrumentation SDKの提供 ○ OpenTelmetry Collectorの提供 ○ Collectorの拡張をcontribで提供 ● ベンダーロックインの回避 ○ 共通プロトコルでサービス間のデータ流通を可能に ○ OpenTelemetry Collectorが既存プロトコルをサポート 35
  36. 36. 詳しくは.... 歴史、目的、守備範囲などを、 分かりやすく解説してくれているトークを紹介します。 Obervability Conference 2022、OpenTelemetryの概要をGoogleのアドボケイ トが解説 | Think IT(シンクイット) https://thinkit.co.jp/article/19572 36 グーグル合同会社 デベロッパーアドボケイト 山口 能迪 氏 「OpenTelemetryのこれまでとこれから」 https://event.cloudnativedays.jp/o11y2022/talks/1347
  37. 37. 各種サービスの動向 37 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  38. 38. 各種サービスの動向 1. NewRelic: ○ OTLP対応中 https://docs.newrelic.com/jp/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/opentelemetry-introduction/ 2. DataDog: ○ 対応予定なし? ○ 併用するための、 trace_idの共通化方法を提示 https://docs.datadoghq.com/ja/tracing/connect_logs_and_traces/opentelemetry/ ■ Vector (by DataDog) はotlp対応予定 https://github.com/vectordotdev/vector/issues/1444 3. AWS X-RAY ○ 2021/9 ~ OpenTelemetry対応 https://aws.amazon.com/jp/otel/ 4. Sentry ○ 対応予定なし? ○ OpenTelemetryとの関連を示すリサーチ文書 https://develop.sentry.dev/sdk/research/performance/ 38
  39. 39. なぜ既存サービスではなく OpenTelemetryを使うのか? 39
  40. 40. 既存サービス or OpenTelemetry Q. それ、DataDog/NewRelic/AWS X-Ray/Sentryで出来るのでは? ● A1. 標準規格なので手を出しやすい ○ インタフェースから内部データモデルまで仕様化されている ● A2. OSSだから ○ 必要なら、全てのコードを確認できる(理解できる) ○ 必要なら、仕様に則って拡張・変更できる(待たなくて良い) ○ 必要なら、改修したら元コードにコントリビュートできる ○ 必要なら、etc ● A3. OpenTelemetryだけを使わず、併用してもよい ○ とりあえずOpenTelemetryとUptraceは無料で使い始められるよ 40
  41. 41. Uptrace ● https://uptrace.dev/ ● OpenTelemetryネイティブなバックエンド ○ プロトコルは OTLP ○ TRACE, METRIC, LOG の3つを扱える ● OSSで提供されている ● クラウドサービス(無料プラン~)もある 41
  42. 42. まとめ 42 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  43. 43. まとめ ● 分散トレースとは ○ 多数のインスタンスで構成されるサービスの情報を収集 ○ TRACE(処理の流れ)、METRIC(統計)、LOG(ログ)を収集し、 オブザーバビリティを実現 ● OpenTelemetryとは ○ OpenTelemetryは分散トレースの標準規格 & リファレンス実装 ○ 既存の多くのトレースツールと互換性がある ● OpenTelemetry-Collectorとは ○ 一次受け口、情報をバックエンドに転送する ○ CPUやDISKなどのシステムMETRICも収集できる ● Uptraceとは ○ OSSのOpenTelemetryネイティブなバックエンド ○ クラウド版は無料枠もあり使い始めやすい 43
  44. 44. 参考文献 ● ドキュメント ○ Documentation by OpenTelemetry ■ Documentation | OpenTelemetry https://opentelemetry.io/docs/ ■ specification https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification ■ log specification https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/logs ○ What is OpenTelemetry? by Uptrace https://uptrace.dev/opentelemetry/ ■ Semantic Attributes https://uptrace.dev/opentelemetry/attributes.html ○ The Vector documentation by Vector https://vector.dev/docs/ ■ VRL function reference | Vector documentation https://vector.dev/docs/reference/vrl/functions/#parse_nginx_log ● talk ○ OpenTelemetryのこれまでとこれから | Observability Conference 2022 by CloudNative Days https://event.cloudnativedays.jp/o11y2022/talks/1347 ○ 入門 OpenTelemetry Collector | Observability Conference 2022 by CloudNative Days https://event.cloudnativedays.jp/o11y2022/talks/1354 ● blog ○ 2022年版 OpenTelemetryを知れば世界が平和に - じゃあ、おうちで学べる https://syu-m-5151.hatenablog.com/entry/2022/07/12/115434 ○ 仕様と実装から理解する OpenTelemetryの全体像 https://zenn.dev/ymtdzzz/articles/37c2856f46ea10 ○ nginxのメトリクス・ログ・トレースを Datadogでモニターする方法 - Qiita https://qiita.com/stanabe/items/a208377100a4ba2ea907 ○ 分散トレーシング (OpenTelemetry / Jaeger) | 豆蔵デベロッパーサイト https://developer.mamezou-tech.com/containers/k8s/tutorial/ops/jaeger/#fnref1 ● 記事 ○ いまさら聞けない「メトリクス」とは? ――注目を集めるオブザーバビリティの実現にどう役立つのか 【デブサミ2022夏】 https://codezine.jp/article/detail/16312?p=1&anchor=0 ○ New RelicによるOpenTelemetryの紹介 by NewRelic https://docs.newrelic.com/jp/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/opentelemetry-introduction/ ○ OpenTelemetry トレースとログに接続 by DataDog https://docs.datadoghq.com/ja/tracing/connect_logs_and_traces/opentelemetry/ 44
  45. 45. 質疑応答 45 1. Webアプリ開発の困りごと 2. デモ 3. 計装とテレメトリ 4. Python/Djangoへの計装 5. 分散トレースとOpenTelemetry 6. 各種サービスの動向 7. まとめ、参考文献 8. 質疑応答
  46. 46. 質疑応答(覚えてる範囲) 46 ● Q. Python 向け opentelemetry-sdk の完成度が低い気がしませんか。 asyncで使うとgRPCが詰まる問題が あって困っている ○ A. asyncで試してないので分からないですが、 sdkの完成度は低い感じがします。 opentelemetry-rubyをRedmine(Rails)に 設定してみて、そちらの方が定型コードを書く必要がなかったりして、完成度が高く感じました。 ● Q. Reactに計装しているコードを見てみたんですが、 TRACEを扱う範囲の指定を BaseOpenTelemetryComponent でラップしているようですが、 React hooksを使った場合はどう実装する感 じですか? ○ A. すみません、React初心者なので分からないです。 Reactのexampleコードではこの書き方しか見つかりませんでした。もう ちょっとSDKのAPIを読めばなにか分かるかもしれません。 ● Q. OpenTelemetryを使って、エラーが出たときに検知したり、そのときのリクエストデータや変数などが分かる ようにできますか? ○ A. OpenTelemetryは基本的に生データを扱わないようになっていると思うので、生データを見るために、今日のデモでは Django Instrumentorのrequest/response hookを設定して、そこでカスタマイズする方法で実現しました。エラー時のデー タを見たいのであれば、 Sentryがかなり優秀なので、 Sentryを導入した方が良いと思います。

×