Почему он показывает одни и те же журналы дважды (один как информация и один как ошибка с тем же сообщением) на stackdriver?

Я готовлю некоторое ведение журнала с помощью python, но всякий раз, когда я запускаю свой код, он генерирует журналы, но дважды отображается на консоли stackdriver (один как информация, а другой как ошибка). Кто-нибудь знает, как решить эту проблему.

мой код:

import logging
from google.cloud import logging as gcp_logging


log_client = gcp_logging.Client()
log_client.setup_logging()

# here executing some bigquery operations
logging.info("Query result loaded into temporary table: {}".format(temporary_table))

# here executing some bigquery operations
logging.error("Query executed with empty result set.")

Когда я запускаю приведенный выше код, он дважды показывает журналы на stackdriver.

Информация: 2019-10-17T11: 54: 02.504Z cf-mycloudfunctionname Результат запроса загружен во временную таблицу: mytable

Ошибка: 2019-10-17T11: 54: 02.505Z cf-mycloudfunctionname Результат запроса загружен во временную таблицу: mytable


person Kaustubh Ghole    schedule 17.10.2019    source источник
comment
И запрос выполнен с пустым набором результатов. никогда не появлялся в журнале?   -  person Yun Zhang    schedule 17.10.2019
comment
Я думаю, что кода должно быть больше (например, временная_таблица не определена). Как вызывается этот код? Возможно, это облачная функция, и функция дает сбой после первого оператора регистрации и повторной попытки (что приведет к второму запуску и, следовательно, ко второму журналу?). Это вызов REST, триггер GCS, PubSub или что-то еще?   -  person Kolban    schedule 17.10.2019
comment
@YunZhang Появляется только в том случае, если результат запроса пуст (я поставил # здесь, выполняя некоторые операции bigquery)   -  person Kaustubh Ghole    schedule 18.10.2019
comment
@Kolban Я запускаю этот код из облачной функции.   -  person Kaustubh Ghole    schedule 18.10.2019


Ответы (1)


Я вижу, что оба (ошибка и информация) были распознаны как плоский текст, поэтому он отправил то же сообщение, что и информация для stderr и stdout, поэтому вы получаете два одинаковых сообщения.

Что вам нужно сделать, так это исправить фразу этих двух журналов в структурированном JSON, это должно быть распознано stackdriver как единый объект с правильной полезной нагрузкой для отображения.

Кроме того, вы можете настроить агент stackdriver для отправки журналов по мере необходимости. Взгляните на этот документ.

Также это будет зависеть от того, где вы пытаетесь получить эти журналы GCE, GKE, BQ. В некоторых случаях предпочтительнее изменять структуру fluentd напрямую вместо агента stackdriver.

person Jujosiga    schedule 21.10.2019