SlideShare a Scribd company logo
分散トレーシング技術について
About me
Mahito Ogura (小倉真人<m.ogura@ntt.com>)
NTTコミュニケーションズ 技術開発部
業務:クラウドや分散システムの調査検証
● コムウェア入社(H21)2014年に異動で現職
● インフラ構築(Chef, Ansible)
● アプリケーション開発(Ruby)
● OpenStackとか分散ミドルとかコンテナ
● 採用のお手伝いとか各種イベント業, etc...
はじめに
現代のサービスは複雑化され、そのシステムは大規模に分散することが多い。
特にサービスの機能ごとに分けて作り、それらを疎結合させるMicroservicesアーキテク
チャの流行もあり、機能ごとに開発チームが異なることや、開発言語が違うことが増え、
サービス内部はより分散し複雑化している。
分散し複雑化したサービスにおいて機能ごとの関係性を把握することは難しく、エラーや
性能問題などが起きた際にその原因特定が非常に難しくなる。
こうした問題に取り組むべく、分散されたサービス内のリクエストをトレース可能な、分散
トレーシング技術が現在注目を浴びている。
分散トレーシングの歴史
2003年「Magpie: Online Modelling and Performance-aware Systems」
2007年「X-Trace: A Pervasive Network Tracing Framework」
2010年「Dapper, a Large-Scale Distributed Systems Tracing Infrastructure」
以降、Dapperの論文を元にZipkinやDapperとZipkinをベースにしたappdash、HDFSや
HBaseに使われているHTraceなどのOSSが開発される。
また、最近では分散Tracingの仕様やAPIを取りまとめたOpenTracingが登場し、
OpenTracingの仕様を実装したライブラリや、上記OSSのOpenTracing対応が進められて
いる。
インターネットサービスはしばしば複雑に実装され、大規模に分散したシステムとなって
いることがある。
これらのシステムはソフトウェアモジュールの集合であり、各ソフトウェアモジュールは、
開発チームが異なることや、開発言語が異なること、そして何千台のマシンの複数のレ
イヤにまたがることがある。
こうした環境においてシステムのしくみの理解や、性能問題の原因特定は難しく、一度
問題が起きると解決に至るまでに膨大なコストがかかることがある。
こうした問題を解決するために、各システムの挙動や性能を把握することができる分散
トレーシング技術が注目を集めている。
なぜ分散トレーシングが注目されているか
参考:OpenStackのアーキテクチャ
分散トレーシングに必要なしくみは次の2つ
● 分散トレーシングのしくみ(ライブラリ含む)
● トレースの結果をモニタリングするためのしくみ
また、トレーシングがシステムの性能に影響を及ぼさないよう、
一部の処理だけをトレースするためのサンプリングレートを設定するしくみを
設けている分散トレーシングツールも存在している(ex.Zipkin, OpenTracing)
分散トレーシング
Trace:Span全体のStartからFinishまでを含むSpanの集合体
Span:ひとつのサービス(境界)内の処理。以下の情報が含まれる
分散トレーシング(OpenTracing)用語解説 -1/2-
Trace
Span
オプション
● Span Tags
● Span Logs
● References
○ 他Spanとの関係性
分散トレーシング(OpenTracing)用語解説 2/2
必須
● Operation Name
● Start / Finish Timestamp
● Span Context
○ Baggage Items
○ tarace / span ID
以下例では、Traceは8つのSpanから構成されている。
各Spanの間には関係性があり有効巡回グラフ(DAG)で表すことができる。
Spanの関係図(DAG)
SpanとReferenceについて
ChildOf Reference:
親Spanが依存する子Spanとの関係(例:RPC, SQL)
FollowsFrom Reference:
親Spanが依存しない子Spanとの関係(例:非同期処理)
分散トレーシングのユースケース
● プログラム内の関数レベルのトレース
● サーバのエンドポイントのトレース
● クライアントコールのトレース
● 分散環境におけるデータの分散 / 転送
● イベントのロギング
● メッセージバス(MQ and Pub/Sub)シナリオのトレース
OpenTracingについて
OpenTracingは、一般的なプラットフォームに向けて、一貫したベンダ非依存なAPIを提
供することにより、開発者に容易にシステムへトレーサの追加、またはトレーサの切り替
えを行うことが出来るしくみを提供する、分散トレーシングの実装である。
また、OpenTracingは分散トレーシングとしてのOSSの実装以外にも、プラットフォーム固
有のトレーサーに向けた共通仕様も用意しており、他の分散トレーシングツールはこの
仕様を実装することで、OpenTracing互換のトレーサーとして実装することが出来るた
め、ユーザは設定の変更だけでトレーサの切り替えを行うことができる。
OpenTracing仕様を実装したトレーサー
● Zipkin:Twitter社が開発したトレーサー
● Jaeger:Uber社が開発したトレーサー
● Appdash:sourcegraph社がGo言語で開発した軽量なトレーサー
● LightStep:OpenTracing互換のトレーサー
● Hawkular:OpenTracing-Javaをサポート
● Instana:OpenTracingのJava, Node.js, Goをサポート
● sky-walking:OpenTracing-Javaをサポート
● inspectIT:OpenTracing-Javaをサポート
● stagemonitor:Javaのバイトコードからトレーシングを行う
Zipkin
GoogleのDapperを参考に作られた分散トレーシングシステム
分散システムのレイテンシ問題の
トラブルシューティングに必要な
データを収集し(Zipkin)、
システムの依存関係を参照するための
UI(Zipkin UI)を提供する
アーキテクチャは右図参照
● ReporterはTransportにデータを転送
● Transporはcollectorにデータを転送
● CollectorはStorageにデータを格納
参考:http://zipkin.io/pages/architecture.html
Jaeger
Uber社がGo言語で開発している分散トレーサーとそのUI
● 2017年9月にプロジェクトがCNCFにホストされることになった
Go言語で書かれた自前のモニタリングツールが用意されている
Go, Python, Node, JavaなどのTracerが用意されている
● Python 3には未対応
Architecture
出典:http://jaeger.readthedocs.io/en/latest/architecture/
分散トレースのしくみ(ex. HTTP Request)
HTTPヘッダに格納された親スパンの
情報をデシリアライズ(extract)
現在のSpanの情報をシリアライズして
HTTPヘッダに格納(inject)
Serialize span ID to a string
{trace_id}:{span_id}:{parent_id}:{flags}
出典:http://jaeger.readthedocs.io/en/latest/architecture/
sourcegraph社がGo言語で開発した軽量なトレーサー
Go言語で書かれた自前のモニタリングツールが用意されている
● 一応OpenTracingへの対応はしているとドキュメントに書かれている
● 開発の更新は2016/11で止まっている(2017/9/19時点)
● DAGの表示はできない
Go, Python, Ruby(サードパーティー)などのTracerが用意されている
● しかしながらRubyはOpenTracing未対応かつ壊れている可能性が高い
参考:Appdashを動かしてみた - Qiita
Appdash
LightStep
OpenTracing互換のTracer
● Go / JavaScript / Python / PHP / Ruby / Java / iOS / Android
MonitoringはSplunk/kibanaを利用する模様
詳細はLightStep社に問い合わせが必要
Hawkular
RedHatが支援している既存のモニタリングの課題を解決するためのツール
以下の4つの機能を有する
● Federated Alerting
● Distributed Tracing
● Metrics TSDB
● ManageIQ Provider
分散トレーシングについてはJaegerとコラボをすることでOpenTracing対応をしているらし
い。
サンプル(OpenStack Novaへの実装)
nova-computeがnova-schedulerにインスタンスの情報を同期する流れ
22
nova-compute
Queue
<conductor>
RabbitMQ
nova-conductor
Queue
<reply_xxx>
nova-scheduler
Queue
<scheduler>
①
②
③
① call to ”conductor” for DB access
② reply to ①
③ cast to ”scheduler”
Database
Jaeger UI上でのトレース結果
①
① call to ”conductor” for DB access
② reply to ①
③ cast to ”scheduler”
① + ②
②
③
● 分散システムの挙動やレイテンシの把握は難い
● 分散トレーシングの仕様としてOpenTracingがある
● OpenTracing実装として各種ツールがあるが、
現状はUber社が開発をしているJaegerがよさそう
● まだ全体的にドキュメントが足りておらずコードを
読まないとわからないことが多い
まとめ
Presentation by NTT Communications

More Related Content

PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PPTX
世界一わかりやすいClean Architecture
PPTX
Istioサービスメッシュ入門
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PPTX
コンテナネットワーキング(CNI)最前線
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
世界一わかりやすいClean Architecture
Istioサービスメッシュ入門
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナネットワーキング(CNI)最前線
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)

What's hot (20)

PPTX
KeycloakでAPI認可に入門する
PPTX
Amazon EKS への道 ~ EKS 再入門 ~
PPTX
本当は恐ろしい分散システムの話
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Ingress on Azure Kubernetes Service
PDF
Dockerからcontainerdへの移行
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PDF
マイクロサービス 4つの分割アプローチ
PDF
The Twelve-Factor Appで考えるAWSのサービス開発
PDF
3分でわかるAzureでのService Principal
PPTX
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
PDF
ドメイン駆動設計サンプルコードの徹底解説
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
PPTX
テストコードの DRY と DAMP
PDF
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
PPTX
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
PDF
DockerとPodmanの比較
KeycloakでAPI認可に入門する
Amazon EKS への道 ~ EKS 再入門 ~
本当は恐ろしい分散システムの話
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Ingress on Azure Kubernetes Service
Dockerからcontainerdへの移行
Dockerfile を書くためのベストプラクティス解説編
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
マイクロサービス 4つの分割アプローチ
The Twelve-Factor Appで考えるAWSのサービス開発
3分でわかるAzureでのService Principal
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
ドメイン駆動設計サンプルコードの徹底解説
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
テストコードの DRY と DAMP
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
DockerとPodmanの比較
Ad

More from NTT Communications Technology Development (20)

PDF
クラウドを最大限活用するinfrastructure as codeを考えよう
PPTX
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PPTX
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
PDF
SpinnakerとKayentaで 高速・安全なデプロイ!
PDF
100Gbps OpenStack For Providing High-Performance NFV
PDF
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
PDF
AWS re:Invent2017で見た AWSの強さとは
PDF
Mexico ops meetup発表資料 20170905
PDF
NTT Tech Conference #2 - closing -
PPTX
イケてない開発チームがイケてる開発を始めようとする軌跡
PDF
GPU Container as a Service を実現するための最新OSS徹底比較
PDF
SpinnakerとOpenStackの構築
PDF
Troveコミュニティ動向
PPTX
Web rtc for iot, edge computing use cases
PDF
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
PDF
NTT Tech Conference #1 Opening Keynote
PDF
NTT Tech Conference #1 Closing Keynote
PDF
OpsからみたOpenStack Summit
クラウドを最大限活用するinfrastructure as codeを考えよう
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
SpinnakerとKayentaで 高速・安全なデプロイ!
100Gbps OpenStack For Providing High-Performance NFV
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
AWS re:Invent2017で見た AWSの強さとは
Mexico ops meetup発表資料 20170905
NTT Tech Conference #2 - closing -
イケてない開発チームがイケてる開発を始めようとする軌跡
GPU Container as a Service を実現するための最新OSS徹底比較
SpinnakerとOpenStackの構築
Troveコミュニティ動向
Web rtc for iot, edge computing use cases
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
NTT Tech Conference #1 Opening Keynote
NTT Tech Conference #1 Closing Keynote
OpsからみたOpenStack Summit
Ad

分散トレーシング技術について(Open tracingやjaeger)