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 を参照してください |
例 - 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 ポータルをご覧ください。