スパンメトリクスコネクター

ログをトレースに接続します。

Splunk Distribution of the OpenTelemetry Collectorは、スパンメトリクスコネクターを使用して、スパンデータからリクエスト、エラー、継続時間(R.E.D) OpenTelemetryメトリクスを集計します。

エクスポータとしてサポートされているパイプラインタイプは traces です。レシーバーとしてサポートされているパイプラインのタイプは metrics です。詳細については「パイプラインでデータを処理する」を参照してください。

概要

コネクターはスパンデータをプルし、リクエスト、エラー、期間(R.E.D OpenTelemetry メトリクスに集計します。

リクエスト

リクエスト数は、エラーを含む、一意のディメンションセットごとに表示されるスパンの数として計算されます。たとえば、service.namespan.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

はじめに

以下の手順に従って、コンポーネントの設定とアクティベーションを行ってください:

  1. Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:

  2. 次のセクションで説明するように、コネクターを設定します。

  3. 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します。上記で定義したデフォルトディメンションと一緒に追加するディメンションのリスト。

    • 各追加ディメンションは、iphost.nameregion など、スパンの属性コレクションまたはリソース属性(プロセスタグ)で検索される名前で定義されます。

    • スパンに 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 です。有効にすると、イベントメトリクスが追加されます。

    • dimensionsevents が有効になっている場合は必須です。イベントメトリクスにディメンションとして追加するスパンのイベント属性リストで、スパンとリソース属性の共通ディメンションと設定されたディメンションの上に含まれます。

  • 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

トラブルシューティング

__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____

_________ __ ______ _____________ _____ _________

_________ __ ___________ _________ ___ ____ _____ _____

  • ___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________

  • ____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______