谷歌Stackdriver未按预期显示来自谷歌Kubernetes引擎的结构化日志条目

2024-04-25 21:42:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我同时使用了Python的Stackdriver日志和Python记录器。我使用函数google.cloud.logging.logger.log_structhttps://gcloud-python.readthedocs.io/en/latest/logging/logger.html)将JSON记录到Stackdriver。在

当我使用Google Compute Engine VM instance运行脚本时,我能够在日志查看器中使用所选资源Global查看日志。我正在记录的结构正确地记录在jsonPayload中。在

但是,当日志记录来自Google Kubernetes Engine时,logger视图不会显示我传递的结构,而是显示在stdout上打印的结构。如何确保从Google Compute Engine VM instanceGoogle Kubernetes Engine观察到相同的行为?在

这是一个片段,显示了我如何进行日志记录:

import google.cloud.logging
import logging

logging_client = google.cloud.logging.Client()
# connects the logger to the root logging handler
cloud_logger = logging_client.logger('email_adaptor')


formatter = logging.Formatter(
            '%(asctime)s - %(levelname)s - %(message)s - %(lineno)d - %(filename)s')
# get the logger a name
logger = logging.getLogger('email_adaptor')
# set a level for the logger
logger.setLevel(logging.DEBUG)

# make the logger write on stdout
stdout_alarm_log = logging.StreamHandler(sys.stdout)
stdout_alarm_log.setFormatter(formatter)
logger.addHandler(stdout_alarm_log)


struct = {'message':'Processed Alarm', 'valid': True}
cloud_logger.log_struct(struct, severity='INFO')

logger.info(str(struct))

这是我在VM instanceKubernetes Engine上得到的标准输出的一个示例:

^{pr2}$

这是我在Google日志查看器中的资源Global下看到的(日志是来自我的VM实例的日志,与我在片段代码中给出的示例不符): enter image description here

这是我在资源Google Kubernetes Engine下看到的:结构不显示,而是看到在STDOUT上打印的内容: enter image description here


Tags: theinstancelogcloudlogginggooglestdout记录
1条回答
网友
1楼 · 发布于 2024-04-25 21:42:25

Stackdriver库调用针对“global”编写的代码,GKE容器中的结构化日志条目将显示在“global”资源下。在

“gkecontainer”资源将显示写入stdout和stderr的日志记录,它们在默认情况下被摄取。在

要将结构化日志写入stdout/stderr并在Stackdriver中访问它们,日志代理唯一接受的结构化格式是JSON。您必须将记录器配置为输出JSON,以便将其作为结构化日志条目拾取。更多信息请访问https://cloud.google.com/logging/docs/agent/configuration#process-payload。在

相关问题 更多 >