首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsonPayload (结构化日志)输出来自函数的日志记录,以在GCP中创建基于日志的度量

jsonPayload (结构化日志)输出来自函数的日志记录,以在GCP中创建基于日志的度量
EN

Server Fault用户
提问于 2022-02-09 11:24:19
回答 1查看 3.9K关注 0票数 4

我需要Google函数的日志中的jsonPayload,而不是textPayload。我的目标是使用字典中的键作为基于日志的度量的标签(参见基于日志的度量标签),以便能够在Grafana中解决这些问题。

我正在使用Python的logging模块,但如果需要的话,我也可以切换到其他东西。

我需要日志中的输出:

代码语言:javascript
复制
jsonPayload: `{'key1':value1, 'key2':value2}`

但是我得到一个textPayload输出,下一行是一个字符串:

代码语言:javascript
复制
"2022-02-08 15:43:32,460 [INFO]: {"key1": value1, "key2": value2}"

在日志中的实际示例中,您可以看到textPayload

图片为文本:

代码语言:javascript
复制
{
insertId: "000000-1b431ffd-e42d-4f83-xyz"
labels: {1}
logName: "projects/MY_PROJECT/logs/cloudfunctions.googleapis.com%2Fcloud-functions"
receiveTimestamp: "2022-02-08T15:43:41.808217166Z"
resource: {2}
textPayload: "2022-02-08 15:43:32,460 [INFO]: {"json_metadata": {"countrows": 736203, "countcolumns": 6, "size": 48261360, "gcs_stamp": "2022-02-08 15:43:32.451000+00:00", "python_stamp": "2022-02-08 15:43:31.055538"}}"
timestamp: "2022-02-08T15:43:32.460Z"
trace: "projects/MY_PROJECT/traces/dd97759176248586a3d3xyz"
}

首先尝试

https://cloud.google.com/logging/docs/structured-logging阅读:

在云日志记录中,结构化日志是指使用jsonPayload字段向其有效负载添加结构的日志条目。结构化日志记录适用于用户编写的日志。

我试图让这个“结构化日志”跟随写入结构化日志

代码语言:javascript
复制
logging.info(json.dumps(json_for_gcp_lbm))

但没有结果。

在链接中,有一个来自GCP的内置日志代理,它使用流利%d作为关于测井剂,似乎只适用于Google引擎或agent,而不是Google函数:

如果使用Google引擎或App灵活环境,可以将结构化日志作为JSON对象在一行上序列化为stdout或stderr。然后,日志代理将结构化日志作为LogEntry结构的LogEntry发送到Cloud。

如何在此输出中获得jsonPayload

EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-02-09 14:11:35

可以在文档中的示例之后设置结构化日志记录。确保您的python版本是3.8或更高。实现这一目标的另一种方法是使用记录客户端库

第二个方法的OP中的

示例:

放入您的requirements.txt:

代码语言:javascript
复制
google-cloud-logging==3.0.0

作为撰写本报告时的最新版本。

代码语言:javascript
复制
from google.cloud import logging as gclogger

(或按你喜欢的名称命名)

并使用以下方法调用json日志记录:

json_for_gcp_lbm = {MY_JSON_HERE}

代码语言:javascript
复制
    from google.cloud import logging as gclogger

    ...

    logging_client = gclogger.Client()
    logger_name = "MY_LOG_NAME_OF_FREE_CHOICE" # Saved in the google cloud logs
    logger = logging_client.logger(logger_name)

    # I do not know how it would work with `import logging` as the 
    # built-in Python module, but I got it to work with adding
    # Following line does not work
    # logging.info(json.dumps(json_for_gcp_lbm, default=str))
    # Instead, we need 
    # https://cloud.google.com/logging/docs/samples/logging-write-log-entry#code-sample
    logger.log_struct(json_for_gcp_lbm)

这将导致jsonPayload输出:

然后,您可以在"Create度量“(基于日志的Metrics / LBM)菜单中从json中选择任何标签:

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1093143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档