O11y Cloud で問題を解決する

2 minutes   Author Derek Mitchell

このワークショップでは、以下の内容をハンズオン形式で体験します:

  • OpenTelemetry Collector をデプロイし、Collectorの設定をカスタマイズする
  • アプリケーションをデプロイし、OpenTelemetry で計装する
  • OpenTelemetry SDK を使用してタグがどのようにキャプチャされるかを確認する
  • Troubleshooting MetricSet を作成する
  • Tag Spotlight を使用して問題をトラブルシューティングし、根本原因を特定する

それでは始めましょう!

Tip

このワークショップを最も簡単にナビゲートする方法は以下の通りです:

  • このページの右上にある左右の矢印(< | >)を使用する
  • キーボードの左(◀️)および右(▶️)カーソルキーを使用する
Last Modified 2026/02/13

O11y Cloud で問題を解決するのサブセクション

EC2 インスタンスへの接続

5 minutes  

EC2 インスタンスに接続する

各参加者用にAWS/EC2でUbuntu Linuxインスタンスを準備しています。インストラクターから提供されたIPアドレスとパスワードを使用して、以下のいずれかの方法でEC2インスタンスに接続してください:

  • macOS / Linux
    • ssh splunk@IP address
  • Windows 10+
    • OpenSSHクライアントを使用
  • Windowsの以前のバージョン
    • Puttyを使用

ファイルの編集

ワークショップでは vi を使用してファイルを編集します。簡単な使い方を説明します。

ファイルを編集用に開くには:

vi <filename>
  • ファイルを編集するには、i を押して Insert mode に切り替え、通常通りテキストを入力します。Esc を押すと Command mode に戻ります。
  • エディタを終了せずに変更を保存するには、Esc を押してコマンドモードに戻り、:w と入力します。
  • 変更を保存せずにエディタを終了するには、Esc を押してコマンドモードに戻り、:q! と入力します。
  • 変更を保存してエディタを終了するには、Esc を押してコマンドモードに戻り、:wq と入力します。

vi の包括的な説明については An introduction to the vi editor を参照してください。

別のエディタを使用したい場合は、代わりに nano を使用できます:

nano <filename>
Last Modified 2026/02/13

OpenTelemetry Collector のデプロイと設定のカスタマイズ

15 minutes  

「データを取り込む」ための最初のステップは、OpenTelemetry Collectorをデプロイすることです。Collectorは環境内のテレメトリデータを受信して処理し、Splunk Observability Cloudにエクスポートします。

このワークショップではKubernetesを使用し、Helmを使用してK8sクラスターにCollectorをデプロイします。

Helm とは?

HelmはKubernetes用のパッケージマネージャーで、以下のような利点があります:

  • 複雑さの管理
    • 多数のマニフェストファイルではなく、単一のvalues.yamlファイルで対応
  • 簡単なアップデート
    • インプレースアップグレード
  • ロールバックのサポート
    • helm rollbackを使用するだけで、リリースの古いバージョンにロールバック可能

Helm を使用して Collector をインストールする

正しいディレクトリに移動し、スクリプトを実行してCollectorをインストールしましょう:

cd /home/splunk/workshop/tagging
./1-deploy-otel-collector.sh
"splunk-otel-collector-chart" has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "splunk-otel-collector-chart" chart repository
Update Complete. ⎈Happy Helming!⎈
NAME: splunk-otel-collector
LAST DEPLOYED: Mon Dec 23 18:47:38 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
Splunk OpenTelemetry Collector is installed and configured to send data to Splunk Observability realm us1.

スクリプトの実行には1分程度かかる場合があります。

このスクリプトはどのようにしてCollectorをインストールしたのでしょうか?まず、~./profile ファイルに設定された環境変数が読み込まれていることを確認しました:

重要:以下のコマンドは 1-deploy-otel-collector.sh スクリプトによって既に実行されているため、 実行する必要はありません。

source ~/.profile

次に、splunk-otel-collector-chart Helmチャートをインストールし、最新の状態であることを確認しました:

  helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
  helm repo update

最後に、helm install を使用してCollectorをインストールしました:

  helm install splunk-otel-collector --version 0.136.0 \
  --set="splunkObservability.realm=$REALM" \
  --set="splunkObservability.accessToken=$ACCESS_TOKEN" \
  --set="clusterName=$INSTANCE-k3s-cluster" \
  --set="environment=tagging-workshop-$INSTANCE" \
  splunk-otel-collector-chart/splunk-otel-collector \
  -f otel/values.yaml

helm install コマンドは values.yaml ファイルを参照していることに注意してください。 このファイルは Collector の設定をカスタマイズするために使用されます。詳細は後述します。

Collector が実行中であることを確認する

以下のコマンドでCollectorが実行中かどうかを確認できます:

kubectl get pods
NAME                                                            READY   STATUS    RESTARTS   AGE
splunk-otel-collector-agent-kfvjb                               1/1     Running   0          2m33s
splunk-otel-collector-certmanager-7d89558bc9-2fqnx              1/1     Running   0          2m33s
splunk-otel-collector-certmanager-cainjector-796cc6bd76-hz4sp   1/1     Running   0          2m33s
splunk-otel-collector-certmanager-webhook-6959cd5f8-qd5b6       1/1     Running   0          2m33s
splunk-otel-collector-k8s-cluster-receiver-57569b58c8-8ghds     1/1     Running   0          2m33s
splunk-otel-collector-operator-6fd9f9d569-wd5mn                 2/2     Running   0          2m33s

K8s クラスターが O11y Cloud に存在することを確認する

Splunk Observability Cloudで、InfrastructureKubernetesKubernetes Clusters に移動し、 クラスター名($INSTANCE-k3s-cluster)を検索します:

Kubernetes node Kubernetes node

Collector の設定を取得する

Collectorの設定をカスタマイズする前に、現在の設定がどのようになっているかを 確認するにはどうすればよいでしょうか?

Kubernetes環境では、Collectorの設定はConfig Mapを使用して保存されています。

以下のコマンドで、クラスター内に存在するconfig mapを確認できます:

kubectl get cm -l app=splunk-otel-collector
NAME                                                 DATA   AGE
splunk-otel-collector-otel-k8s-cluster-receiver   1      3h37m
splunk-otel-collector-otel-agent                  1      3h37m

次に、以下のようにしてCollectorエージェントのconfig mapを表示できます:

kubectl describe cm splunk-otel-collector-otel-agent
Name:         splunk-otel-collector-otel-agent
Namespace:    default
Labels:       app=splunk-otel-collector
              app.kubernetes.io/instance=splunk-otel-collector
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=splunk-otel-collector
              app.kubernetes.io/version=0.113.0
              chart=splunk-otel-collector-0.113.0
              helm.sh/chart=splunk-otel-collector-0.113.0
              heritage=Helm
              release=splunk-otel-collector
Annotations:  meta.helm.sh/release-name: splunk-otel-collector
              meta.helm.sh/release-namespace: default

Data
====
relay:
----
exporters:
  otlphttp:
    headers:
      X-SF-Token: ${SPLUNK_OBSERVABILITY_ACCESS_TOKEN}
    metrics_endpoint: https://ingest.us1.signalfx.com/v2/datapoint/otlp
    traces_endpoint: https://ingest.us1.signalfx.com/v2/trace/otlp
    (followed by the rest of the collector config in yaml format) 

K8s で Collector の設定を更新する方法

K8sでは values.yaml ファイルを使用してCollectorの設定をカスタマイズできます。

values.yaml ファイルで利用可能なカスタマイズオプションの包括的なリストについては、 このファイルを参照してください。

例を見てみましょう。

Debug Exporter を追加する

Collectorに送信されるトレースを確認したいとします。この目的にはdebug exporterを使用できます。これはOpenTelemetry関連の問題のトラブルシューティングに役立ちます。

vi または nano を使用して values.yaml ファイルを編集できます。ここではviを使用した例を示します:

vi /home/splunk/workshop/tagging/otel/values.yaml

以下のテキストをコピーして values.yaml ファイルの末尾に貼り付けて、debug exporterを追加します:

以下のテキストを追加する前に、vi で ‘i’ を押してインサートモードに入ってください。

    # NEW CONTENT
    exporters:
      debug:
        verbosity: detailed
    service:
      pipelines:
        traces:
          exporters:
            - otlphttp
            - signalfx
            - debug

これらの変更後、values.yaml ファイルは以下の内容を含むはずです:

splunkObservability:
  profilingEnabled: true
  infrastructureMonitoringEventsEnabled: true
certmanager:
  enabled: true
operator:
  enabled: true
operatorcrds:
  install: true

agent:
  config:
    receivers:
      kubeletstats:
        insecure_skip_verify: true
        auth_type: serviceAccount
        endpoint: ${K8S_NODE_IP}:10250
        metric_groups:
          - container
          - pod
          - node
          - volume
        k8s_api_config:
          auth_type: serviceAccount
        extra_metadata_labels:
          - container.id
          - k8s.volume.type
    extensions:
      zpages:
        endpoint: 0.0.0.0:55679
    # NEW CONTENT
    exporters:
      debug:
        verbosity: detailed
    service:
      pipelines:
        traces:
          exporters:
            - otlphttp
            - signalfx
            - debug

vi で変更を保存するには、esc キーを押してコマンドモードに入り、:wq! と入力してから enter/return キーを押します。

ファイルを保存したら、以下のコマンドで変更を適用できます:

cd /home/splunk/workshop/tagging

helm upgrade splunk-otel-collector  \
--set="splunkObservability.realm=$REALM" \
--set="splunkObservability.accessToken=$ACCESS_TOKEN" \
--set="clusterName=$INSTANCE-k3s-cluster" \
--set="environment=tagging-workshop-$INSTANCE" \
splunk-otel-collector-chart/splunk-otel-collector \
-f otel/values.yaml
Release "splunk-otel-collector" has been upgraded. Happy Helming!
NAME: splunk-otel-collector
LAST DEPLOYED: Mon Dec 23 19:08:08 2024
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
Splunk OpenTelemetry Collector is installed and configured to send data to Splunk Observability realm us1.

values.yaml ファイルを通じてCollectorの設定を変更した場合は、 config mapを確認して、Collectorに適用された実際の設定を確認することが有用です:

kubectl describe cm splunk-otel-collector-otel-agent

期待通り、debug exporterがtracesパイプラインに追加されたことが確認できます:

  traces:
    exporters:
    - otlphttp
    - signalfx
    - debug

debug exporterの出力については、クラスターにアプリケーションをデプロイして トレースのキャプチャを開始した後に確認します。

Last Modified 2026/02/13

サンプルアプリケーションのデプロイと OpenTelemetry による計装

15 minutes  

この時点で、K8sクラスターにOpenTelemetry Collectorをデプロイし、 インフラストラクチャメトリクスの収集に成功しています。

次のステップは、サンプルアプリケーションをデプロイし、 OpenTelemetryで計装してトレースをキャプチャすることです。

Pythonで書かれたマイクロサービスベースのアプリケーションを使用します。ワークショップをシンプルに保つため、 credit check serviceとcredit processor serviceの2つのサービスに焦点を当てます。

アプリケーションのデプロイ

時間を節約するため、両方のサービスのDockerイメージを既に構築してDocker Hubで公開しています。 以下のコマンドで、K8sクラスターにcredit check serviceをデプロイできます:

kubectl apply -f /home/splunk/workshop/tagging/creditcheckservice-py-with-tags/creditcheckservice-dockerhub.yaml
deployment.apps/creditcheckservice created
service/creditcheckservice created

次に、credit processor serviceをデプロイしましょう:

kubectl apply -f /home/splunk/workshop/tagging/creditprocessorservice/creditprocessorservice-dockerhub.yaml
deployment.apps/creditprocessorservice created
service/creditprocessorservice created

最後に、トラフィックを生成するロードジェネレーターをデプロイしましょう:

kubectl apply -f /home/splunk/workshop/tagging/loadgenerator/loadgenerator-dockerhub.yaml
deployment.apps/loadgenerator created

アプリケーションの詳細を確認する

このセクションでは、アプリケーションの概要を説明します。アプリケーションの完全な ソースコードを確認したい場合は、GitHub の Observability Workshop リポジトリを参照してください。

OpenTelemetry による計装

credit check serviceとcredit processor serviceのビルドに使用されるDockerfileを見ると、 OpenTelemetryで既に計装されていることがわかります。例として、 /home/splunk/workshop/tagging/creditcheckservice-py-with-tags/Dockerfile を見てみましょう:

FROM python:3.11-slim

# Set working directory
WORKDIR /app

# Copy requirements over
COPY requirements.txt .

RUN apt-get update && apt-get install --yes gcc python3-dev

ENV PIP_ROOT_USER_ACTION=ignore

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy main app
COPY main.py .

# Bootstrap OTel
RUN splunk-py-trace-bootstrap

# Set the entrypoint command to run the application
CMD ["splunk-py-trace", "python3", "main.py"]

splunk-py-trace-bootstrap が含まれていることがわかります。これは、アプリケーションで使用される サポートされているパッケージにOpenTelemetryの計装をインストールします。また、splunk-py-trace が アプリケーションを起動するコマンドの一部として使用されていることもわかります。

/home/splunk/workshop/tagging/creditcheckservice-py-with-tags/requirements.txt ファイルを確認すると、 パッケージのリストに splunk-opentelemetry[all] が含まれていることがわかります。

最後に、このサービスのデプロイに使用したKubernetesマニフェスト(/home/splunk/workshop/tagging/creditcheckservice-py-with-tags/creditcheckservice-dockerhub.yaml)を確認すると、 コンテナに環境変数が設定されており、OTLPデータのエクスポート先を OpenTelemetryに伝えていることがわかります:

  env:
    - name: PORT
      value: "8888"
    - name: NODE_IP
      valueFrom:
        fieldRef:
          fieldPath: status.hostIP
    - name: OTEL_EXPORTER_OTLP_ENDPOINT
      value: "http://$(NODE_IP):4317"
    - name: OTEL_SERVICE_NAME
      value: "creditcheckservice"
    - name: OTEL_PROPAGATORS
      value: "tracecontext,baggage"

これだけで、サービスをOpenTelemetryで計装できます!

アプリケーションの詳細を確認する

アプリケーションでいくつかのカスタムタグをキャプチャしていますが、これについては後ほど詳しく見ていきます。その前に、 タグの概念とそれが重要な理由について説明します。

タグとは?

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

例えば、決済処理アプリケーションでは以下を追跡できると便利です:

  • 使用された決済方法(クレジットカード、ギフトカードなど)
  • 決済をリクエストした顧客のID

これにより、決済処理中にエラーやパフォーマンスの問題が発生した場合、トラブルシューティングに必要なコンテキストを得ることができます。

一部のタグはOpenTelemetry Collectorで追加できますが、このワークショップで扱うタグはより詳細なもので、アプリケーション開発者がOpenTelemetry SDKを使用して追加します。

なぜタグはそれほど重要なのか?

タグは、アプリケーションを真にオブザーバブルにするために不可欠です。トレースにコンテキストを追加することで、 なぜ一部のユーザーは素晴らしい体験を得て、他のユーザーはそうでないのかを理解する助けになります。また、 Splunk Observability Cloud の強力な機能は、タグを活用して根本原因に素早くたどり着くことを支援します。

先に進む前に用語について説明します。このワークショップでは tags(タグ)について説明しますが、 これは Splunk Observability Cloud で使用する用語です。OpenTelemetry では 代わりに attributes(属性)という用語を使用します。そのため、このワークショップ全体で タグが言及されている場合、それは属性と同義として扱ってください。

タグはどのようにキャプチャされるのか?

Pythonアプリケーションでタグをキャプチャするには、まず /home/splunk/workshop/tagging/creditcheckservice-py-with-tags/main.py ファイルの先頭に import文を追加してtraceモジュールをインポートします:

import requests
from flask import Flask, request
from waitress import serve
from opentelemetry import trace  # <--- ADDED BY WORKSHOP
...

次に、現在のスパンへの参照を取得して、属性(別名タグ)を追加できるようにします:

def credit_check():
    current_span = trace.get_current_span()  # <--- ADDED BY WORKSHOP
    customerNum = request.args.get('customernum')
    current_span.set_attribute("customer.num", customerNum)  # <--- ADDED BY WORKSHOP
...

とても簡単ですよね?credit check serviceで合計4つのタグをキャプチャしており、最終的な結果は以下のようになります:

def credit_check():
    current_span = trace.get_current_span()  # <--- ADDED BY WORKSHOP
    customerNum = request.args.get('customernum')
    current_span.set_attribute("customer.num", customerNum)  # <--- ADDED BY WORKSHOP

    # Get Credit Score
    creditScoreReq = requests.get("http://creditprocessorservice:8899/getScore?customernum=" + customerNum)
    creditScoreReq.raise_for_status()
    creditScore = int(creditScoreReq.text)
    current_span.set_attribute("credit.score", creditScore)  # <--- ADDED BY WORKSHOP

    creditScoreCategory = getCreditCategoryFromScore(creditScore)
    current_span.set_attribute("credit.score.category", creditScoreCategory)  # <--- ADDED BY WORKSHOP

    # Run Credit Check
    creditCheckReq = requests.get("http://creditprocessorservice:8899/runCreditCheck?customernum=" + str(customerNum) + "&score=" + str(creditScore))
    creditCheckReq.raise_for_status()
    checkResult = str(creditCheckReq.text)
    current_span.set_attribute("credit.check.result", checkResult)  # <--- ADDED BY WORKSHOP

    return checkResult

トレースデータを確認する

Splunk Observability Cloudでトレースデータを確認する前に、 以下のコマンドでエージェントCollectorのログをtailして、debug exporterがキャプチャした内容を確認しましょう:

kubectl logs -l component=otel-collector-agent -f

ヒント:CTRL+C を使用してログのtailを停止します。

エージェントCollectorのログに以下のようなトレースが書き込まれているはずです:

InstrumentationScope opentelemetry.instrumentation.flask 0.44b0
Span #0
    Trace ID       : 9f9fc109903f25ba57bea9b075aa4833
    Parent ID      : 
    ID             : 6d71519f454f6059
    Name           : /check
    Kind           : Server
    Start time     : 2024-12-23 19:55:25.815891965 +0000 UTC
    End time       : 2024-12-23 19:55:27.824664949 +0000 UTC
    Status code    : Unset
    Status message : 
Attributes:
     -> http.method: Str(GET)
     -> http.server_name: Str(waitress.invalid)
     -> http.scheme: Str(http)
     -> net.host.port: Int(8888)
     -> http.host: Str(creditcheckservice:8888)
     -> http.target: Str(/check?customernum=30134241)
     -> net.peer.ip: Str(10.42.0.19)
     -> http.user_agent: Str(python-requests/2.31.0)
     -> net.peer.port: Str(47248)
     -> http.flavor: Str(1.1)
     -> http.route: Str(/check)
     -> customer.num: Str(30134241)
     -> credit.score: Int(443)
     -> credit.score.category: Str(poor)
     -> credit.check.result: Str(OK)
     -> http.status_code: Int(200)

トレースに、コードでキャプチャした credit.scorecredit.score.category などの タグ(属性とも呼ばれる)が含まれていることに注目してください。次のセクションで、 Splunk Observability Cloudでトレースを分析してパフォーマンス問題の根本原因を見つける際に、これらを使用します。

Last Modified 2026/02/13

Troubleshooting MetricSet を作成する

5 minutes  

タグのインデックス作成

Tag Spotlight などの Splunk Observability Cloud の高度な機能を使用するには、まず1つ以上のタグをインデックスする必要があります。

これを行うには、Settings -> MetricSets に移動し、APM タブが選択されていることを確認します。次に + Add Custom MetricSet ボタンをクリックします。

以下の詳細を入力して credit.score.category タグをインデックスしましょう(注意:ワークショップの参加者全員が同じ組織を使用しているため、このステップはインストラクターが代わりに行います):

Create Troubleshooting MetricSet Create Troubleshooting MetricSet

Start Analysis をクリックして続行します。

分析が実行されている間、タグは Pending MetricSets のリストに表示されます。

Pending MetricSets Pending MetricSets

分析が完了したら、Actions 列のチェックマークをクリックします。

Troubleshooting MetricSet と Monitoring MetricSet の違い

このタグをインデックスするために、Troubleshooting MetricSet と呼ばれるものを作成したことにお気づきかもしれません。Troubleshooting MetricSet(TMS)は、Tag Spotlight などの機能を使用してこのタグに関する問題をトラブルシューティングできるため、このように名付けられています。

また、選択しなかった Monitoring MetricSet(MMS)という別のオプションがあることにもお気づきかもしれません。Monitoring MetricSetはトラブルシューティングを超えて、タグをアラートやダッシュボードに使用できます。このワークショップではこの機能については詳しく説明しませんが、ぜひご自身で探索することをお勧めする強力な機能です。

Last Modified 2026/02/13

Tag Spotlight を使用して問題をトラブルシューティングする

15 minutes  

APM データを確認する

キャプチャしたAPMデータの一部を確認して、アプリケーションのパフォーマンスを見てみましょう。

APM に移動し、Environment ドロップダウンを使用して環境を選択します(例:tagging-workshop-instancename)。

サービスのリストに creditprocessorservicecreditcheckservice が表示されているはずです:

APM Overview APM Overview

右側の Service Map をクリックしてサービスマップを表示します。creditcheckservicecreditprocessorservice を呼び出しており、平均応答時間が少なくとも3秒であることがわかります:

Service Map Service Map

次に、右側の Traces をクリックして、このアプリケーションでキャプチャされたトレースを確認します。一部のトレースは比較的高速(数ミリ秒程度)に実行される一方、他のトレースは数秒かかることがわかります。

Traces Traces

実行時間の長いトレースの1つをクリックします。この例では、トレースに5秒かかり、ほとんどの時間が creditprocessorservice の一部である /runCreditCheck 操作の呼び出しに費やされていることがわかります:

Long Running Trace Long Running Trace

しかし、なぜ一部のトレースは遅く、他のトレースは比較的速いのでしょうか?

トレースを閉じてTrace Analyzerに戻ります。Errors onlyon に切り替えると、一部のトレースにエラーがあることにも気づくでしょう:

Traces Traces

エラートレースの1つを見ると、creditprocessorserviceotherservice という別のサービスを呼び出そうとしたときにエラーが発生していることがわかります。しかし、なぜ一部のリクエストは otherservice への呼び出しを行い、他のリクエストは行わないのでしょうか?

Trace with Errors Trace with Errors

一部のリクエストがなぜ遅く実行され、一部のリクエストがなぜエラーになるのかを特定するために、 トレースを1つずつ確認して問題の背後にあるパターンを見つけようとすることもできます。

Splunk Observability Cloud は、問題の根本原因を見つけるためのより良い方法を提供します。次にこれを確認しましょう。

Tag Spotlight を使用する

credit.score.category タグをインデックスしたので、Tag Spotlight と一緒に使用してアプリケーションをトラブルシューティングできます。

APM に移動し、右側の Tag Spotlight をクリックします。Service ドロップダウンから creditcheckservice サービスが選択されていることを確認します(まだ選択されていない場合)。

Tag Spotlight を使用すると、impossible のスコアになるクレジットスコアリクエストの100%にエラーがあることがわかります。一方、他のすべてのクレジットスコアタイプのリクエストにはまったくエラーがありません!

Tag Spotlight with Errors Tag Spotlight with Errors

これは Tag Spotlight の威力を示しています!この機能がなければ、このパターンを見つけるのは時間がかかります。数百のトレースを手動で確認してパターンを特定する必要があり(それでも見つかる保証はありません)。

エラーを確認しましたが、レイテンシはどうでしょうか?Requests & errors distribution ドロップダウンをクリックして Latency distribution に変更しましょう。

重要:Cards display の横にある設定アイコンをクリックして、P50 と P99 のメトリクスを追加します。

ここでは、poor クレジットスコアのリクエストが遅く実行されていることがわかります。P50、P90、P99の時間は約3秒で、これはユーザーが待つには長すぎ、他のリクエストよりもはるかに遅いです。

また、exceptional クレジットスコアの一部のリクエストも遅く実行されていることがわかります。P99の時間は約5秒ですが、P50の応答時間は比較的速いです。

Tag Spotlight with Latency Tag Spotlight with Latency

Dynamic Service Maps を使用する

リクエストに関連付けられたクレジットスコアカテゴリがパフォーマンスとエラー率に影響を与える可能性があることがわかったので、インデックスされたタグを活用する別の機能を確認しましょう:Dynamic Service Maps です。

Dynamic Service Mapsを使用すると、特定のサービスをタグ別に分解できます。例えば、APM をクリックし、次に Service Map をクリックしてサービスマップを表示しましょう。

creditcheckservice をクリックします。次に、右側のメニューで Breakdown というドロップダウンをクリックし、credit.score.category タグを選択します。

この時点で、サービスマップは動的に更新され、creditcheckservice に到達するリクエストのパフォーマンスがクレジットスコアカテゴリ別に分解されて表示されます:

Service Map Breakdown Service Map Breakdown

このビューにより、goodfair のクレジットスコアのパフォーマンスは優れている一方、poorexceptional のスコアははるかに遅く、impossible のスコアはエラーになることが明確にわかります。

発見事項

Tag Spotlight により、このサービスを担当するエンジニアがさらに調査すべきいくつかの興味深いパターンが明らかになりました:

  • なぜすべての impossible クレジットスコアリクエストがエラーになるのか?
  • なぜすべての poor クレジットスコアリクエストが遅く実行されるのか?
  • なぜ一部の exceptional リクエストが遅く実行されるのか?

SREとして、このコンテキストをエンジニアリングチームに伝えることは、彼らの調査に非常に役立ちます。サービスが「時々遅い」と単に伝えるよりも、はるかに迅速に問題を追跡できるからです。

興味があれば、creditprocessorservice のソースコードを確認してください。impossible、poor、exceptionalのクレジットスコアを持つリクエストは異なる方法で処理されており、そのため我々が発見したエラー率とレイテンシの違いが生じていることがわかります。

アプリケーションで見られた動作は、モダンなクラウドネイティブアプリケーションでは一般的なものです。サービスに渡される異なる入力が異なるコードパスにつながり、その一部がパフォーマンスの低下やエラーを引き起こします。例えば、実際のクレジットチェックサービスでは、低いクレジットスコアになるリクエストは、リスクをさらに評価するために別のダウンストリームサービスに送信される場合があり、高いスコアになるリクエストよりも遅く実行されたり、より高いエラー率に遭遇したりする可能性があります。

Last Modified 2026/02/13

まとめ

2 minutes  

このワークショップでは、以下の概念についてハンズオン形式で学びました:

  • Helmを使用して Splunk Distribution of the OpenTelemetry Collector をデプロイする方法
  • OpenTelemetry でアプリケーションを計装する方法
  • OpenTelemetry SDKを使用してアプリケーションから関心のあるタグをキャプチャする方法
  • Troubleshooting MetricSets を使用して Splunk Observability Cloud でタグをインデックスする方法
  • Tag SpotlightDynamic Service Map 機能を使用して Splunk Observability Cloud でタグを活用し、「未知の未知」を発見する方法

このワークショップで共有したベストプラクティスに沿ってタグを収集することで、Splunk Observability Cloud に送信するデータからさらに多くの価値を得ることができます。このワークショップを完了した今、自分のアプリケーションからタグの収集を開始するために必要な知識を身につけました!

今日からタグのキャプチャを始めるには、サポートされている各言語でタグを追加する方法を確認し、次にTag Spotlightで分析できるように Troubleshooting MetricSets を作成する方法を確認してください。さらにヘルプが必要な場合は、Splunk エキスパートに問い合わせてください。

また、他の言語や環境がOpenTelemetryでどのように計装されているかを確認するには、 Splunk OpenTelemetry Examples GitHub リポジトリを参照してください。

Tip for Workshop Facilitator(s)

ワークショップが完了したら、以前に credit.score.category タグ用に作成したAPM MetricSetを削除することを忘れないでください。