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>',
#  })

注釈

アプリケーションの起動に splunk-py-trace コマンドを使っている場合は、このコードをアプリケーションに追加しないでください。

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

自動インストルメンテーションの上に手動インストルメンテーションを追加する場合、以下のように追加スパンをキャプチャすることができる:

  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 によって完全にサポートされています。

このページは 2024年07月05日 に最終更新されました。