Docs » Splunk APMでスパンタグとMetricSetsを使ってサービスを分析する » Splunk APMでスパンタグを使ってスパンにコンテキストを追加する

Splunk APMでスパンタグを使ってスパンにコンテキストを追加する 🔗

スパンタグを追加することで、Splunk APMに送信するスパンのコンテキストを充実させることができます。スパンタグは、トレース内のスパンに関する追加的なメタデータを提供するキーと値のペアです。OpenTelemetryでは、スパンタグは attributes です。

スパンにスパンタグを追加する方法は2つあります:

Splunk Distribution of OpenTelemetry Collectorを、複数サービスからのデータ収集を一元管理するためのゲートウェイとしてデプロイする場合、このCollectorを使用してスパンタグを定義し、その他のスパンタグを管理するように、アプリケーションをインストルメントするといいでしょう。

前提条件 🔗

スパンタグを追加するには、adminロールが必要です。

スパンタグの命名規則に従う 🔗

タグは、命名規則を使用することでさらに多くの価値を提供します。すべてのアプリケーションでの使用に向けて明確なタグ名を定義してください。出発点として、OpenTelemetryでは、スパンとトレースで使えるセマンティック規約の一式を提供しています。詳細は、GitHubの「OpenTelemetryのトレースのセマンティック規約」を参照してください。

スパンにタグを追加する 🔗

以下のセクションでは、スパンにタグを追加する2つの方法について説明します:

どこでスパンタグを追加するかを検討することから始めましょう。

注釈

どこでスパンタグを追加するかの判断

アプリケーションのインストルメンテーション経由でスパンにスパンタグを追加する場合、アプリケーションレベルのコントロールを最も高めることができます。この場合のトレードオフは、アプリケーションごとのインストルメンテーションを介して属性を追加するために、より時間がかかる可能性があるということです。

ダウンストリームのOpenTelemetry Collectorでスパンタグを追加すると、粒度を犠牲にして時間を節約できます。タグを追加するOpenTelemetry Collectorが受信するデータの100%にタグが適用される場合は、OpenTelemetry Collectorの設定ファイルでタグを追加するのが最速です。ただし、OpenTelemetry Collector経由でタグを受信するスパンを区別するロジックを適用する必要がある場合は、インストルメンテーション経由でアプリケーションレベルでタグを追加する方が速いでしょう。

例えば、K8sのデプロイメントにおいて、複数のアプリケーションが同じホスト上に存在するが、異なる環境(例えば、productiondevelopmentstaging )にあるという場合、インストルメンテーションライブラリを使用して deployment.environment タグを設定することで、同じホストからのスパン間で環境を区別することができます。

deployment.environment スパンタグを使用すると、APMの全エクスペリエンスをデプロイ環境別にフィルタリングできるため、特に便利です。Splunk APMの環境については、Splunk APMでデプロイ環境を設定する を参照してください。

アプリケーションコードをインストルメントしてスパンにタグを追加する 🔗

スパンタグを追加する際に、アプリケーションごとにタグを指定することができます。コードをインストルメントしてスパンタグや属性を作成する方法は、使用しているプログラミング言語やインストルメンテーションライブラリによって異なります。

以下の例は、既存のスパンにカスタムタグを作成する方法を示しています:

// Splunk Distribution of OpenTelemetry Java

import io.opentelemetry.api.trace.Span;

Span customizedSpan = Span.current();

customizedSpan.setAttribute("my.attribute","value");

// You can also set global tags using the OTEL_RESOURCE_ATTRIBUTES
// environment variable, which accepts a list of comma-separated key-value
// pairs. For example, key1:val1,key2:val2.

Splunk Distribution of OpenTelemetry Collectorを使用してスパンタグを追加する 🔗

Splunk Distribution of OpenTelemetry Collector で受信したスパンにスパンタグを追加するには、OpenTelemetry Collectorの設定YAMLファイルで attributes プロセッサーを使用します。

汎用属性プロセッサーは attributes と呼ばれます。それ以降の attributes/<NAME> プロセッサーには、 attributes プロセッサーのインスタンスの名前が付きます。詳しくは 属性プロセッサー を参照してください。

以下の手順に従って、新しい属性プロセッサーを定義し、パイプラインに追加します:

  1. 希望のスパンタグを追加する属性プロセッサーを定義します。これには2つの方法があります:

    • insert アクションを使用して、新しいキー値ペアを設定する。

      例えば、以下のコードサンプルは、キー enduser.role がまだ存在しないスパンに、enduser.role:"admin" というキー値ペアを追加します:

      processors:
        ...
        attributes/setenduser.role:
          actions:
          - key: enduser.role
              value: "admin"
              action: insert
      
    • upsert アクションを使用して、スパン内の既存のキーから値をコピーし、その値を新しいキーに追加して既存の値を上書きする。

      例えば、以下のコードサンプルは、既存の myTenant キーから tenant キーに値をコピーし、 tenant キーの既存の値を上書きします:

      processors:
        ...
        attributes/settenant:
          actions:
          - key: tenant
              from_attribute: myTenant
              action: upsert
      
  2. 作成した属性プロセッサーを、pipelines の下のプロセッサーリストに追加します。以下のコードサンプル内の attributes/settenant プロセッサーの位置と同じように、batch プロセッサーの後、queued_retry プロセッサーの前に配置します:

    service:
      pipelines:
        traces:
          receivers: ...
          processors: [...,  batch, attributes/settenant,  queued_retry, ...]
          ...
    

ホスト固有のスパンタグはどこから来るのか 🔗

Splunk Distribution of OpenTelemetry Collectorは、各スパンがどのインフラストラクチャ コンポーネントを使用しているかを識別するために、すべてのスパンに host スパンタグを自動で追加します。 host スパンタグの値は、多くの場合、hostname またはそのインフラストラクチャ コンポーネントの一意のリソース識別子です。

host スパンタグにより、Splunk APMはインフラストラクチャの主要なメトリクスをレンダリングし、インフラストラクチャコンポーネントのデフォルトのダッシュボードにリンクすることができます。これにより、インフラストラクチャレベルでアプリケーションのパフォーマンスをより簡単に監視し、Splunk APMとSplunk Infrastructure Monitoringの相互作用を利用することができるようになります。

host スパンタグの他にも、OpenTelemetry Collectorは、ホストのタイプに応じて、そのホスト上でキャプチャされたすべてのスパンに特定のスパンタグを自動的に追加します。これらの追加的なスパンタグは、各スパンが使用するインフラストラクチャコンポーネントに関する詳細情報を提供し、対応するインフラストラクチャのメトリクスをレンダリングし、基盤となるインフラストラクチャコンポーネントのより完全なダッシュボードにリンクします。

以下のテーブルは、ホスト固有のスパンタグの例を示しています:

スパンタグ

説明

AWSUniqueId または gcp_id

クラウドプロバイダーに対する一意のリソース識別子。

container_id

Dockerコンテナに対する一意のリソース識別子。

kubernetes_pod_uid

Kubernetesクラスター内のリソースに対する一意のリソース識別子。

This page was last updated on 2024年02月27日.