LoginSignup
2
2

More than 5 years have passed since last update.

いろいろな分散トレーシングシステムの予約済みSpanタグキーを見比べる

Last updated at Posted at 2017-11-09

はじめに〜なぜこの記事が必要か

分散トレーシングシステムによってSpanフォーマットが違う。Spanに付与できるメタデータ/タグにはシステムによって予約済み/Well-Knownなキーがあって、そのタグに設定された値はそれぞれWeb UI上で表示するときに特別扱いされたりするらしい。

zipkin-go-opentracingやdd-zipkin-proxyのように、クライアントライブラリ、プロキシエージェントのような形で、様々な分散トレーシングシステムのSpanフォーマットを透過的に変換してくれるようなソフトウェアは存在する。

しかし、ソフトウェアによって、予約済みのSpanタグキーを適切に読み替えてくれたりくれなかったりします。もし、そのようなソフトウェアを利用して期待通りの結果にならなかったときは、このページの内容を思い出してみると解決の糸口がつかめるかもしれません。

OpenTracing

Data Conventions · Opentracing
specification/semantic_conventions.md at master · opentracing/specification

  • component
  • db.instance
  • db.statement
  • db.type
  • db.user
  • error
  • ...

Datadog APM

Trace APIの仕様書には書いてない。Pythonライブラリに定義されている定数が参考になる。

dd-trace-py/ddtrace/ext at master · DataDog/dd-trace-py

  • DB関係
    • db.name (OTのdb.typeに相当?)
    • db.user
  • SQL関係
    • sql.db (OTのdb.instanceに相当?)
    • sql.query (OTのstatementに相当?)
    • sql.rows (OTには相当するものがない)
  • ネットワーク一般
    • out.host
    • out.port
    • net.out.bytes
  • ...

Zipkin

タグというのはなくて、binary annotationのkeyがタグ名、valueが値に相当する。
Data Model · OpenZipkin
example zipkin trace with 3 spans

  • jdbc.query (otのdb.statement、ddのsql.queryに相当)
  • とか...

参考までに、Envoyが送るbinary annotation keyは以下。

  • guid:x-request-id
  • http.url
  • http.method
  • downstream_cluster
  • user_agent
  • http.protocol
  • guid:x-client-trace-id
  • request_size
  • upstream_cluster
  • http.status_code
  • response_size
  • response_flags
  • error

annotation typeはなぜかすべてBOOL(STRINGではなく)

https://github.com/envoyproxy/envoy/blob/e0c6eaa3945a501e7a74bb41a92f00daf8fb4581/source/common/tracing/http_tracer_impl.cc#L123-L158
https://github.com/envoyproxy/envoy/blob/cbff0f7fc56c53e3aac383081021856c8dbcb732/source/common/tracing/zipkin/zipkin_core_constants.h
https://github.com/envoyproxy/envoy/blob/04d2f9b129075705d1c0416a5b120d56b442f210/source/common/tracing/zipkin/zipkin_core_types.cc#L257

dd-zipkin-proxy

Zipkinスパン(b3-propagation, thrift)をDatadog APM Spanに変換してくれるやつだが、データモデルの違いを吸収するために一部拡張がある。

具体的には、以下のようなkeyのzipkin binary annotationがあると、そのannotationをDatadog APM Spanのフィールドに読み替えてくれる。

dd-zipkin-proxy/main.go at master · flachnetz/dd-zipkin-proxy

  • dd.resource -> dd spanのresource
  • dd.name -> dd spanのname

その他、zipkinのbinary annotationはそのままkey=valueのタグとしてdd spanのmetadataにいれてくれる。

なお、zipkinbのjdbc.queryをddのsql.queryに変換・・してくれたりはしないので、Zipkinでjdbc.queryを表示するときに特別扱いされてたようなケースでも、DatadogのWeb UIでは特別扱いしてくれないかもしれない。

その点については、dd-zipkin-proxyを改良して、dd側にwell-knownなタグキーがあればzipkin->ddのキーに読み替えるようにするとよさそうではある。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2