Google cloud trace Gcloud logging в просмотре журналов

#python #google-cloud-platform #google-kubernetes-engine #google-cloud-logging #google-cloud-trace

#python #google-облачная платформа #google-kubernetes-engine #google-cloud-ведение журнала #google-cloud-trace

Вопрос:

Я столкнулся с проблемой ведения журнала Google Cloud и трассировки Google Cloud с использованием Google cloud kubernetes

У меня есть приложение, которое использует тему gcloud pubsub, и я хочу объединить журналы в трассировке каждого вызова функции обработки сообщений pubsub

Мой код обработчика ведения журнала в Gcloud

 class GCLHandler(CloudLoggingHandler):
    def emit(self, record):
        message = super(GCLHandler, self).format(record)

        resource = Resource(
            type='k8s_container',
            labels={
                'cluster_name': os.environ['CLUSTER_NAME'],
                'container_name': os.environ['POD_APP_NAME'],
                'location': os.environ['CLUSTER_LOCATION'],
                'namespace_name': os.environ['POD_NAMESPACE'],
                'pod_name': os.environ['POD_NAME'],
                'project_id': _settings.PROJECT_NAME
            }
        )

        labels: Dict[str, Any] = {
            'k8s-pod/app': os.environ['POD_APP_NAME'],
            'k8s-pod/app_kubernetes_io/managed-by': os.environ['POD_MANAGED_BY'],
            'k8s-pod/pod-template-hash': os.environ['POD_TEMPLATE_HASH']
        }
        trace = getattr(record, 'traceId', None)
        if trace is not None:
            trace = f'projects/{_settings.PROJECT_NAME}/traces/{trace}'
        self.transport.send(
            record,
            message,
            resource=resource,
            labels=labels,
            trace=trace,
            span_id=getattr(record, 'spanId', None)
        ) 
  

Я использую интеграцию opensensus с трассировкой и протоколированием gcloud, поэтому я могу получить traceId и spanId и передать их в gcloud logging transport, он работает нормально, а LogEntry в logs viewer содержит правильные traceId и spanId

Мой код использования трассировки gcloud выглядит следующим образом

 config_integration.trace_integrations(['logging'])
logger = logging.getLogger(__name__)

exporter = stackdriver_exporter.StackdriverExporter(
    project_id=settings.PROJECT_NAME
)


async def handle_message(message: Message) -> None:
    tracer = Tracer(exporter=exporter, sampler=AlwaysOnSampler())
    with tracer.span(name=f'Message#{message.message_id}'):
        logger.debug(f'debug')
        logger.info(f'info')
        logger.warning(f'warning')
  

Итак, я могу использовать эти журналы в Logs Viewer, но они не обрабатываются в одной трассировке, но если я использую gcloud trace viewer и выполняю поиск по traceId, я найду эту трассировку с подключенными журналами.
Вопрос: Есть ли какой-либо способ отобразить трассировку в просмотрщике журналов так, как она отображается в любой службе appengine как appengine.googleapis.com/Frequest_log ?

Комментарии:

1. Как я вижу, вы хотите иметь возможность отображать трассировку в просмотрщике журналов так, как она отображается в любой службе GAE as appengine.googleapis.com/Frequest_log , но вы не нашли способа ее настроить, я прав?

2. @SerhiiRohoza Да, вы правы. На данный момент я понял, что мне следует создать родительский журнал с именем, отличным от лога дочерних журналов. Я постараюсь это сделать, и если это сработает, я создам ответ

3. Хорошо. Я с нетерпением жду вашего звонка. Если не повезло, у меня есть обходной путь, но это отнимает много времени.

4. @SerhiiRohoza Нет, это не работает, я создал простой текстовый ввод с logName pubsub_message и после этого отправил несколько журналов с logName stdout, и они не объединены в группы. Правда ли, что я могу создавать групповые журналы только с помощью HttpRequest log?

5. Извините, у меня нет на это времени: (Я создал поддельную полезную нагрузку http_request и сгруппировал свои журналы

Ответ №1:

Как это было подтверждено @Nikita Davydov в разделе комментариев, есть обходной путь: вы можете создать поддельную http_request полезную нагрузку для группирования журналов.

Если у вас это не работает, вы можете отправить запрос на функцию в Google Public Issue Tracker, чтобы изменить текущее поведение.