2

Python gRPC サービスと通信する Flask アプリがあり、どちらも Google Cloud Run にデプロイされています。アプリをインストルメント化した後、Google Trace でトレースを確認できますが、それらはすべて異なるトレース ID を持っているように見えます。これは、トレースが 2 つのサービス間でリンクされていないことを意味します。これは、両側に grpc/Flask インストルメンターがセットアップされている両方のサービスでトレースするための私のセットアップ コードです。

import logging
from opentelemetry import trace
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from opentelemetry.propagators import set_global_textmap
from opentelemetry.tools.cloud_trace_propagator import CloudTraceFormatPropagator
from google.auth.exceptions import DefaultCredentialsError

logger = logging.getLogger(__name__)

def setup_tracing():
    """
    Setup Tracing on Google Cloud. The Service Account Roles must have `Cloud Trace Agent`
    Role added for traces to be ingested.
    """

    trace.set_tracer_provider(TracerProvider())
    try:
        # If running on Google Cloud, will use instance metadata service account credentials to initialize
        trace.get_tracer_provider().add_span_processor(
            SimpleExportSpanProcessor(CloudTraceSpanExporter())
        )
        # Using the X-Cloud-Trace-Context header
        set_global_textmap(CloudTraceFormatPropagator())

        logger.info("Tracing Setup. Exporting Traces to Google Cloud.")
    except DefaultCredentialsError:
        # Not running on Google Cloud so will use console exporter
        from opentelemetry.sdk.trace.export import ConsoleSpanExporter
        trace.get_tracer_provider().add_span_processor(
            SimpleExportSpanProcessor(ConsoleSpanExporter())
        )
        logger.info("Tracing Setup. Exporting Traces to Console.")

ConsoleSpanExporter を使用して、両方のサービスのトレース ID が一致していることをローカルで確認できますが、Google Cloud Run では、明らかに Google Trace で個別のトレースが生成されないため、ネットワークがサービス間のヘッダーを削除するか、他の何かが削除されるかどうか疑問に思っています。発生しているということは、Trace ID が伝播されていないことを意味しますか?

追加のメモとして、Cloud Run の Trace/Span ID の前にあるロード バランサーが CloudTraceSpanFormatPropagator() を使用して伝播されていないことにも気付きました。これにより、ログがリクエストに対してネストされていないため、ログが乱雑になります。

4

1 に答える 1