Docs » Splunk Observability Cloud でサポートされているインテグレーション » バックエンドアプリケーションをインストルメンテーションして、スパンを Splunk APM に送信する » Splunk Observability Cloud 用 Python アプリケーションのインストルメンテーション » Splunk Observability Cloud 用の Python アプリケーションを手動でインストルメンテーションする

Splunk Observability Cloud 用の Python アプリケーションを手動でインストルメンテーションする 🔗

OpenTelemetry Python の Splunk ディストリビューションのエージェントを使用して、アプリケーションを自動的にインストルメンテーションすることで、ほとんどのニーズに対応できます。アプリケーションを手動でインストルメンテーションする必要があるのは、たとえばスパンにカスタム属性を追加する必要がある場合や、スパンを手動で生成する必要がある場合のみです。

Start tracing using code 🔗

If you can’t use the splunk-py-trace command to launch the application, you can instead import and configure start_tracing by adding the following snippet to your application code:

from splunk_otel.tracing import start_tracing

start_tracing()

# Also accepts optional settings. For example:
#
# start_tracing(
#   service_name='<my-python-service>',
#   span_exporter_factories=[OTLPSpanExporter]
#   access_token='<access_token>',
#   max_attr_length=12000,
#   trace_response_header_enabled=True,
#   resource_attributes={
#    'service.version': '<your_version>',
#    'deployment.environment': '<your_environment>',
#  })

注釈

Don’t add this code to the application if you’re using the splunk-py-trace command to launch the application.

カスタムトレースの作成 🔗

If you’re adding manual instrumentation on top of auto-instrumentation, you can capture additional spans as follows:

  1. Import the OpenTelemetry SDK:

    from opentelemetry import trace
    
  2. スパンのトレーサーを作成します:

    tracer = trace.get_tracer("tracer.name")
    
  3. 現在のスパンとしてスパンを作成します:

    def reticulate_splines():
       with tracer.start_as_current_span("span-name") as span:
          print("Reticulating splines...")
          # When the 'with' block goes out of scope, the 'span' is closed
    

Alternatively, if you’re not using auto-instrumentation, use the following steps instead:

  1. Import the OpenTelemetry SDK:

    from opentelemetry import trace
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import (
       BatchSpanProcessor,
       ConsoleSpanExporter,
    )
    
  2. スパンのトレーサーを作成します:

    provider = TracerProvider()
    processor = BatchSpanProcessor(ConsoleSpanExporter())
    provider.add_span_processor(processor)
    
    trace.set_tracer_provider(provider)
    tracer = trace.get_tracer("tracer.name")
    
  3. 現在のスパンとしてスパンを作成します:

    def reticulate_splines():
       with tracer.start_as_current_span("span-name") as span:
          print("Reticulating splines...")
          # When the 'with' block goes out of scope, the 'span' is closed
    

その他の例については、OpenTelemetry 公式ドキュメント を参照してください。

カスタムメトリクスの作成 🔗

Splunk Distribution of OpenTelemetry Python は、以下のインストルメンテーションをサポートしています:

  • カウンター(同期)

  • カウンター(非同期)

  • ゲージ(非同期)

  • UpDownCounter(同期)

  • UpDownCounter (非同期)

カスタムメトリクスを作成するには、メトリクス・インストルメンテーションのタイプに応じた手順に従います。

同期インストルメンテーショントは、カウンターと同様、ビジネスロジックとインラインで呼び出されます。同期インスツルメントの例としては、サーバーに送信されたバイト数のカウンターがあります。これらはコンテキスト伝搬をサポートします。

  1. OpenTelemetry API をインポートします:

    from opentelemetry import metrics
    from opentelemetry.sdk.metrics import MeterProvider
    from opentelemetry.sdk.metrics.export import (
       ConsoleMetricExporter,
       PeriodicExportingMetricReader,
    )
    
  2. メータープロバイダーを作成します:

    meter := otel.Meter("ExampleService")
    
  3. 測定を行うインストルメンテーションを作成します:

    metric_reader = PeriodicExportingMetricReader(ConsoleMetricExporter())
    provider = MeterProvider(metric_readers=[metric_reader])
    
    metrics.set_meter_provider(provider)
    meter = metrics.get_meter("my.meter.name")
    
  4. 測定を行います:

    peanut_counter = meter.create_counter(
       "peanut.counter", unit="1", description="Counts the number of consumed peanuts"
    )
    
    def do_stuff(work_item):
       peanut_counter.add(1, {"work.type": work_item.work_type})
       print("Collecting peanuts...")
    

その他の例については、OpenTelemetry 公式ドキュメント を参照してください。

手動インストルメンテーションを必要とするフレームワーク 🔗

Python フレームワークの中には、手動インストルメンテーションしかサポートしていないものがあります。具体的な手順については、こちらを参照してください:

注釈

手動 OTel インストルメンテーションは Splunk 自動 Python インストルメンテーションと完全に互換性があり、Splunk によって完全にサポートされています。

This page was last updated on 2024年07月05日.