分散トレーシングによる ソフトウェアの信頼性構築 鈴⽊ 章太郎 Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト デジタル庁 省庁業務グループ ソリューションアーキテクト
Elastic Technical Product Marketing Manager/Evangelist デジタル庁 省庁業務グループ ソリューションアーキテクト 元 Microsoft Technical Evangelist Twitter : @shosuz Shotaro Suzuki
アジェンダ • 分散トレーシングってどんなもの︖ • トレーシングの観点から⾒た Metrics • 最新技術の展望と課題 • Observability Journey の簡素化 • Enterprise Search と Observability による カスタマーエクスペリエンス向上 @shosuz
本⽇ご紹介するソースコードは 最後のリソースのスライドに纏めて 掲載してあります︕ ぜひダウンロードして試してみて ください。
@riferrei @riferrei
分散トレーシングって どんなもの︖
開発者にありがちな信頼性の捉え⽅
開発者にありがちな信頼性の捉え⽅
デプロイした後は、コードをテストしない システムのテストをしている 同時接続 Network 不具合 ディストロ、 カーネル、OSの バージョン キャッシュのヒット とハズレ スケジューラと そのクセ クライアントの バックオフ、 リトライ メモリガベージ コレクション デプロイメント コードの不具合 コードレース 条件 クロックシンクの 問題
「機械に限界まで負荷をかけ、それを維持しようとするならば、 その限界はどこなのか、ある程度⾒極めなければならない。 外を⾒てごらん。あそこには完璧なラップがある。ミスは許され ない。すべてのギアチェンジ、すべてのコーナー。完璧に。 」- ケン・マイルズ
お客様から︓ 「503 エラーが発⽣しま した。」
Ops の問題︓503 エラーを⾒つける 疑う 掘り下げる 解決する • メトリクスの値を⾒る • アラートで追いつかれる • トポロジーを理解する • 異常の切り分け • コンテキストデータの収集 • ログやイベントの読み込み • コードパッチの作成 • 新しいリリースの作成 10% 60% 30%
分散型トレースによるレスキュー
Black-Box White-Box • コードは変更されない • ランタイムによる処理 • 最⼩限の実⾏可視化 • コードは変更される • アプリケーションによる処理 • 完全な実⾏可視化 インスツルメンテーション︓ブラックボックスとホワイトボックスの⽐較
トレーシングの観点 から⾒た Metrics
4つのゴールデンシグナル レイテンシー トラフィック エラー 飽和状態
これまでで最⾼のモニタリングアドバイス : "ユーザーが満⾜ しなければ、99.999 も意味がない"
4つのゴールデンシグナル、1つのパースペクティブ レイテンシー トラフィック エラー 飽和状態 ビジネス トランザクション
4つのゴールデンシグナル、1つのパースペクティブ
最新技術の展望と 課題
物事がシンプルだったことを覚えていますか︖
ハードコードされたログ記録⽂ type Log struct { request_path string request_size int64 status int32 latency_ms float64 } logEntry := Log{ "/customers/find", 840, 200, 35 } fmt.Printf("%+v", logEntry) ログ⽂はそれぞれ "スキーマ "を持つ
スレッドトラブルシューティングのフォロー API Customer Database Thread 1 API Customer Database Thread 2 Log{"/api/find", 840, 200, 35} Log{"/customer/find", 235, 200, 30} Log{"/db/find", 450, 200, 5} Log{"/api/find", 840, 200, 45} Log{"/customer/find", 235, 200, 42} Log{"/db/find", 450, 200, 3}
カオスの始まり︓分散コンピューティング Thread 1 Host 1 Thread 2 Thread 1 Host 2 Thread 2
仮想化技術の活⽤ Host 1 VM 1 VM 2 API Customer Database Thread 1 API Customer Database Thread 2 API Customer Database Thread 1 API Customer Database Thread 2
コンテナ化の活⽤ Host 1 VM 1 VM 2 Container 1 Container 2 API Customer Database Thread 1 API Customer Database Thread 2 API Customer Database Thread 1 API Customer Database Thread 2
私は、あなたにとって 冗談のような存在 ですか︖ Ops の⼈々: “それではサービスを機能に 分解してみよう"
トレースによりシステム全体のステッチングを⾃動化 Service A Service B Service C Service D ビジネストランザクション トランザクションデータを収集し、検索可能な状態にする
トレース、スパン、コンテキストの伝播 Service A (Child Span) Service B (Child Span) Service C (Child Span) Service D (Child Span) Transaction (Root Span) Trace ID: 12345 Trace ID: 12345 Trace ID: 12345 Trace ID: 12345 Trace ID: 12345 ⬅ This is the context! Time: 55ms Time: 30ms Time: 15ms Time: 5ms Time: 5ms
しかし、サービスが同期でない場合はどうでしょうか︖ REST API Analytics
Observability Journey を 簡素化する
Three pillars of observability Logs Metrics Traces ⼈、 プロセス、 ツール ⼈、 プロセス、 ツール ⼈、 プロセス、 ツール
統⼀された Observability : さらに良い Logs Traces Metrics すべてのデータを、ひとつのコンテクストで 統合されたビジネスと オペレーション KPI
可能な限りオープンスタンダードを使⽤する https://openTelemetry.io
The Elasticsearch Platform Enterprise Search Observability Security Kibana Explore, Visualize, Engage Elasticsearch Store, Search, Analyze Integrations Connect, Collect, Alert Public cloud Hybrid On-premises In a world where endless data creates endless possibility, search helps people and organizations thrive.
• あらゆる種類のテレメトリーデータに対応する シングルエージェント • 全エージェントを対象とした集中管理および ポリシー設定 • OpenTelemetry のサポート • 豊富な可視化機能とデータ探索機能により、 すぐに使える分析、その場限りの分析が可能 Elastic の特⻑
Enterprise Search と Observability による カスタマーエクスペリエンス向上
The Gallivant Web Shop
Architecture of The Gallivant Web Shop Internet Ship metrics & logs End user Elastic Stack Actions Backend micro services Monitoring Cart Catalog Ordering Checkout Search React Client DevOps Engineer SecOps Engineer Marketer … End user Public Cloud
マイクロサービスアーキテクチャの採⽤はメリットも多いが、 同時に問題発⽣時の根本的な原因を⾒つけるのが難しくなる
Observability で解決できる主なビジネス課題 開発者、DevOps、 SRE の⽣産性 ⾼い信頼性 コストパフォーマンスの 最適化 デジタルトランスフォーメーションの達成には新たなアプローチが不可⽋ クラウドネイティブアプリと モノリシックなアプリの ⼀元管理 迅速な復旧 リリースや運⽤に関する コストの最⼩化
サービスとしての Observability︖ マネージドクラウドサービス です。
Elastic Cloud はあなたのためにある https://cloud.elastic.co/registration
リソース • ブログ記事 「分散トレーシングによるソフトウェア信頼性の構築」 • ビジネスと運⽤の課題解決に、オブザーバビリティがカギとなる理由 • DevOps のためのオブザーバビリティ ― 不可⽋なビジネスイニシアチブ • Elastic APM on GitHub(GitHub の Elastic APM ページ) • Elastic Observability documentation on GitHub(GitHub の Elastic オブザーバビリティ ドキュメントページ) • OpenTelemetry in Java with Elastic Observability on GitHub(GitHub の Open Telemetry in Java with Elastic Observability ページ) • Elastic Cloud を無料で試⽤する
.NETラボ 勉強会 2022年4⽉ 2022/4/23 13:30-18:00 https://dotnetlab.connpass.com/event/243974/
Elastic セキュリティワークショップ 2022/4/27 14:00-17:00 https://www.elastic.co/jp/virtual-events/elastic-security-workshop
Jaguʻeʼr Cloud Native #5 クラウドネイティブ設計コンペバトル 2022/4/28 13:00-15:00 https://jaguer-cloud-native.connpass.com/event/244567/ Jaguʼeʼr 会員企業所属のみです。ごめんなさい︕
Thank you for your attention!

Building Software Reliability through Distributed Tracing.pdf