スパンメトリクスコネクター
ログをトレースに接続します。
Splunk Distribution of the OpenTelemetry Collectorは、スパンメトリクスコネクターを使用して、スパンデータからリクエスト、エラー、継続時間(R.E.D) OpenTelemetryメトリクスを集計します。
エクスポータとしてサポートされているパイプラインタイプは traces です。レシーバーとしてサポートされているパイプラインのタイプは metrics です。詳細については「パイプラインでデータを処理する」を参照してください。
概要
コネクターはスパンデータをプルし、リクエスト、エラー、期間(R.E.D OpenTelemetry メトリクスに集計します。
リクエスト
リクエスト数は、エラーを含む、一意のディメンションセットごとに表示されるスパンの数として計算されます。たとえば、service.name と span.name のコール数だけを表示する場合は、複数のメトリクスを集約できます。
calls{service.name="shipping",span.name="get_shipping/{shippingId}",span.kind="SERVER",status.code="Ok"}
エラー
エラーカウントは、エラーステータスコードメトリクスディメンションを持つ リクエストカウントから計算されます。
calls{service.name="shipping",span.name="get_shipping/{shippingId},span.kind="SERVER",status.code="Error"}
期間
期間は、スパンの開始時間と終了時間の差から計算され、それぞれ一意の設定されたディメンションの関連する期間ヒストグラムの時間バケットに挿入されます。
duration{service.name="shipping",span.name="get_shipping/{shippingId}",span.kind="SERVER",status.code="Ok"}
メトリクスの共通ディメンション
各メトリクスは、すべてのスパンで共通であるため、少なくとも以下のディメンションを持ちます:
-
service.name -
span.name -
span.kind -
status.code
はじめに
以下の手順に従って、コンポーネントの設定とアクティベーションを行ってください:
-
Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:
-
次のセクションで説明するように、コネクターを設定します。
-
Collector を再起動します。
サンプル構成
コネクターをアクティブにするには、設定ファイルのconnectorsセクションにspanmetricsを追加します。
例:
receivers:
nop:
exporters:
nop:
connectors:
spanmetrics:
histogram:
explicit:
buckets: [100us, 1ms, 2ms, 6ms, 10ms, 100ms, 250ms]
dimensions:
- name: http.method
default: GET
- name: http.status_code
exemplars:
enabled: true
exclude_dimensions: ['status.code']
dimensions_cache_size: 1000
aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"
metrics_flush_interval: 15s
metrics_expiration: 5m
events:
enabled: true
dimensions:
- name: exception.type
- name: exception.message
resource_metrics_key_attributes:
- service.name
- telemetry.sdk.language
- telemetry.sdk.name
設定を完了するには、設定ファイルの service セクションで、コネクターを traces パイプラインのエクスポーターとして、また metrics パイプラインのレシーバーとして含めます。
例:
service:
pipelines:
traces:
receivers: [nop]
exporters: [spanmetrics]
metrics:
receivers: [spanmetrics]
exporters: [nop]
設定オプション
オプションで以下の設定が可能です:
-
histogram。デフォルトではexplicitです。これを使用して、スパンの継続時間測定から計算された、記録するヒストグラムのタイプを設定します。explicitまたはexponentialのいずれかである必要があります。-
disable。デフォルトではfalseです。すべてのヒストグラムメトリクスを無効にします。 -
unit。デフォルトではmsです。期間測定値を記録するための時間単位で、スパンの期間測定値から計算されます。指定可能な値はmsまたはsです。 -
explicit:-
bucketsします。期間ヒストグラムの時間バケットを定義する期間のリスト。デフォルトのバケット:[2ms, 4ms, 6ms, 8ms, 10ms, 50ms, 100ms, 200ms, 400ms, 800ms, 1s, 1400ms, 2s, 5s, 10s, 15s]。
-
-
exponential:-
max_size。デフォルトでは160です。正負の数値範囲ごとのバケットの最大数。
-
-
-
dimensionsします。上記で定義したデフォルトディメンションと一緒に追加するディメンションのリスト。-
各追加ディメンションは、
ip、host.name、regionなど、スパンの属性コレクションまたはリソース属性(プロセスタグ)で検索される名前で定義されます。 -
スパンに
named属性がない場合、オプションで提供されるデフォルトが使用されます。 -
デフォルトが指定されていない場合、このディメンションはメトリクスから除外されます。
-
-
exclude_dimensionsします。ディメンションのデフォルトセットから除外するディメンションのリスト。メトリクスから不要なデータを除外するために使用します。 -
dimensions_cache_size。デフォルトでは1000です。Collector のメモリ使用率を向上させるためにディメンションを格納するキャッシュのサイズ。正の数にする必要があります。 -
resource_metrics_cache_size。デフォルトでは1000です。サービスのメトリクスを保持するキャッシュのサイズ。これは、メモリリークを回避し、メトリクスのタイムスタンプを正しくリセットするための累積的な一時性に主に関係します。 -
aggregation_temporality。デフォルトではAGGREGATION_TEMPORALITY_CUMULATIVEです。生成されるメトリクスの集約時間性を定義します。有効な値はAGGREGATION_TEMPORALITY_CUMULATIVEまたはAGGREGATION_TEMPORALITY_DELTAです。 -
namespaceします。生成されたメトリクスの名前空間を定義します。名前空間を指定すると、生成されるメトリクス名にプレフィックスnamespace.が追加されます。 -
metrics_flush_interval。デフォルトでは60です。生成されるメトリクスのフラッシュ間隔を定義します。 -
metrics_expiration。デフォルトでは0です。有効期限をtime.Durationと定義します。この期限を過ぎると、新しいスパンを受信しなくても、メトリクスはエクスポートされなくなります。0に設定すると、メトリクスは期限切れになりません。 -
exemplarsします。これらのを使用して、メトリクスにエグザンプラを添付する方法を設定します。-
enabled。デフォルトではfaulseです。有効にすると、すべてのメトリクスにエグザンプラとしてスパンが追加されます。エグザンプラは 1 回のフラッシュ間隔でのみ保持されます。
-
-
eventsします。イベントメトリクスの設定に使用します。-
enabled。デフォルトではfalseです。有効にすると、イベントメトリクスが追加されます。 -
dimensions:eventsが有効になっている場合は必須です。イベントメトリクスにディメンションとして追加するスパンのイベント属性リストで、スパンとリソース属性の共通ディメンションと設定されたディメンションの上に含まれます。
-
-
resource_metrics_key_attributesします。リソース メトリクス キー マップ ハッシュの生成に使用されるリソース属性をフィルタ処理します。リソース属性(プロセス ID など)を変更するとカウンタメトリクスが分断される場合にこれを使用します。
Span Metricsプロセッサーからスパンメトリクスコネクターへの移行
spanmetrics コネクタは Span プロセッサのポートですが、複数の改良と変更点があります。これは、スパンメトリクスコネクタを OpenTelemetry 仕様に近づけ、エクスポータのロジックに依存しないコンポーネントにするためです。
このコネクターには以下の変更が加えられています:
-
operationメトリクス属性の名前がspan.nameに変更されました。 -
latencyヒストグラムのメトリクス名がdurationに変更されました。 -
生成されるメトリクス名から
_totalメトリクスのプリフィックスが削除されました。 -
Prometheus 特有のメトリクスラベルのサニタイズは廃止されました。
その他の改善点には以下が含まれます:
-
スパン期間の測定記録に、OTel 指数ヒストグラムのサポートを追加しました。
-
ミリ秒と秒のヒストグラム単位のサポートを追加しました。
-
メトリクスリソースの範囲属性を生成するためのサポートが追加されました。
spanmetricsコネクタは、スパンリソース範囲の数に対応する数のメトリクスリソース範囲の数を生成するため、より多くのメトリクスを生成します。以前は、spanmetricsは単一のメトリクスリソース範囲を生成していました。
スパンメトリクスコネクターを Prometheusコンポーネントで使用する
spanmetrics コネクタは、Prometheus レシーバー などの Prometheus エクスポータコンポーネントで使用できます。
エクスポーターの機能によっては、例えば、target_info メトリクスを生成するためには、入力されるスパンリソーススコープ属性に、service.name および service.instance.id 属性が含まれている必要があります。
prometheusremotewrite エクスポータで spanmetrics コネクタを使う例を見てみましょう。
receivers:
otlp:
protocols:
http:
grpc:
exporters:
prometheusremotewrite:
endpoint: http://localhost:9090/api/v1/write
target_info:
enabled: true
connectors:
spanmetrics:
namespace: span.metrics
service:
pipelines:
traces:
receivers: [otlp]
exporters: [spanmetrics]
metrics:
receivers: [spanmetrics]
exporters: [prometheusremotewrite]
これにより、受信したスパンからメトリクスを生成し、それらのメトリクスを Prometheus Remote Write エクスポータにエクスポートするように spanmetrics コネクタが設定されます。target_info メトリクスはリソース範囲ごとに生成されますが、OpenTelemetry メトリクスの名前と属性は、Prometheus の命名規則に準拠するように正規化されます。
たとえば、生成されたコール OTel 合計メトリクスは、複数の Prometheus calls_total(カウンタータイプ)時系列と target_info 時系列をもたらすことができます。次の図を参照してください。
target_info{job="shippingservice", instance="...", ...} 1
calls_total{span_name="/Address", service_name="shippingservice", span_kind="SPAN_KIND_SERVER", status_code="STATUS_CODE_UNSET", ...} 142
トラブルシューティング
__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____
_________ __ ______ _____________ _____ _________
-
______ _ ____ __ ___ ______ _______ _______
-
_______ ______ ________
_________ __ ___________ _________ ___ ____ _____ _____
-
___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________
-
____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______