OpenTracing

Instana トレースの取得方法について柔軟性を提供します。 トレースの起点に関係なく、すべてのトレースは同等に扱われます。

トレース対象をより細かく制御し、柔軟性を高めたい場合は、ベンダーに依存しないアプリケーショントレース用 API である OpenTracing が適しています。

Instana 以下の言語について、 OpenTracing 仕様で定義されている OpenTracing をサポートしています:

テクノロジー 詳細
Crystal 詳細については、 「 Crystal の監視」 を参照してください
Go 詳細については、 「 Go の監視」 を参照してください
Java 詳細については、 Java Trace SDK をご覧ください
Node.js 詳細については、 Instana、 Node.js、 API をご覧ください
PHP 詳細については、 「 PHP の監視」 を参照してください
Python 詳細については、 Instana、 Python、 2.5.3 およびそれ以前のバージョンをサポートしていることをご参照ください
Ruby 詳細については、 Ruby Tracing SDK を参照してください
注: 通常、 OpenTracing やその他のトレース戦略は、互いに独立しています。 それぞれを同時に独立して使用できますが、個々のトレースに使用できるように戦略を組み合わせることはできません。 この場合、例外となるのは Python および GoLang, であり、 OpenTracing は Instana および AutoTrace の SDK を兼ねています。

例 - Node.js アプリケーションのトレース

次の例は、 Node.js アプリケーションで Instana OpenTracing を使用する方法を示しています:

const instana = require('@instana/collector');

// Always initialize the sensor as the first module inside the application.
instana({
  tracing: {
    enabled: true
  }
});

const opentracing = require('opentracing');

// optionally use the opentracing provided singleton tracer wrapper
opentracing.initGlobalTracer(instana.opentracing.createTracer());

// retrieve the tracer instance from the opentracing tracer wrapper
const tracer = opentracing.globalTracer();

// start a new trace with an operation name
const span = tracer.startSpan('auth');

// mark operation as failed
span.setTag(opentracing.Tags.ERROR, true);

// finish the span and schedule it for transmission to instana
span.finish();

OpenTracing のベスト・プラクティス

OpenTracing, をご利用の際は、 Instana ダッシュボードを最大限に活用するために、以下の OpenTracing に掲載されているベストプラクティスをご参照ください。 トレース戦略に依存しない重要な手順については、カスタムトレースのベストプラクティスに関するドキュメントをご覧ください。

処理改善のためのタグ

Instana すべての受信データに対して高度な処理と分析を行い、監視と学習を行うとともに、アプリケーションやインフラストラクチャ( OpenTracing のスパンを含む)にアラートを送信します。

分析と処理の機能を活用するには、スパンに適切な OpenTracing タグを追加してください。これにより、 Instana が受信したスパンを分析し、それに基づいて処理を行うことが可能になります。

たとえば、次の Python OpenTracing のコードには、いくつかの情報が記載されています:

import opentracing

with opentracing.tracer.start_active_span('vanilla') as pscope:
  # ...
  # do something that takes 50ms
  # ...
  pscope.span.log_kv({"foo": "bar"})

このコードは、50ミリ秒かかった「」 vanilla という名前のspan要素であることを示しています。 HTTP、 RPC、Messaging span などのスパン種別が不明です。 インフラストラクチャ内の他のコンポーネントとの通信など、必要な情報が不足しています。

代わりに、適切なコンテキスト OpenTracing タグを指定すると、Instana はそのスパンから処理すべき情報を適切に分析して抽出します。

import opentracing
import opentracing.ext.tags as ext

with opentracing.tracer.start_active_span('webserver') as pscope:
    pscope.span.set_tag(ext.SPAN_KIND, "entry")
    pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost")
    pscope.span.set_tag(ext.HTTP_URL, "/python/simple/two")
    pscope.span.set_tag(ext.HTTP_METHOD, "POST")
    pscope.span.log_kv({"foo": "bar"})

    # ...
    # work that took 50ms
    # ...

    pscope.span.set_tag(ext.HTTP_STATUS_CODE, 204)

この注釈付きスパンは、このスパンの文脈で何が起こったかについて、 Instana に詳細な情報を提供します。 指定されたタグから、これは へのWebサーバーへのリクエスト /python/simple/two であり、その結果として HTTP ステータスコードが返されたことがわかります 204

前述のような注釈付きスパンにより、 Instana はサービスを抽出し、接続(およびその健全性)を監視し、ダッシュボード上でより充実した体験を提供することが可能になります。

詳細については、サポートされているすべての OpenTracing タグの正式な一覧を定義している OpenTracing 仕様を参照してください。

オプションである peer.service

リモート側で計測が行われているかどうかが分からない場合は、タグ peer.service を設定する必要があります。 一般的に、 Instana がリモート側を監視している場合は、タグ peer.service を設定する必要はありません。 この場合、サービス名は自動的に設定されます。 クライアント呼び出しで peer.service が設定されており、サーバーがインスツルメントされておりカスタム・サービス名がある場合には、結果は未定義となります。

詳細については、 OpenTracing ポータルをご覧ください。