У меня есть приложение Flask, которое общается с сервисом Python gRPC, оба развернуты в Google Cloud Run. Я могу видеть следы в Google Trace после инструментирования приложений, но все они, похоже, имеют разные идентификаторы Trace ID, что означает, что следы не связаны между собой между двумя сервисами. Это мой установочный код для трассировки на обоих сервисах с настройкой инструментов 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 я могу видеть, что идентификаторы трассировки в обеих службах совпадают, однако в Google Cloud Run они явно не приводят к отдельным трассировкам в Google Trace, поэтому мне интересно, удаляет ли Сеть заголовки между службами или что-то еще происходит, что означает, что идентификатор трассировки не распространяется?
В качестве дополнительной заметки я также заметил, что балансировщик нагрузки перед идентификаторами Trace / Span в Cloud Run не распространяется с помощью CloudTraceSpanFormatPropagator (), что также делает мои журналы беспорядочными, поскольку журналы не вложены вместе для запросов.