在 GCP 中创建基于日志的指标 (LBM) 所需的 Python Google Cloud Function 日志记录的 jsonPayload(结构化日志记录)输出

在 GCP 中创建基于日志的指标 (LBM) 所需的 Python Google Cloud Function 日志记录的 jsonPayload(结构化日志记录)输出

我需要jsonPayloadGoogle Cloud Function 日志中的 而不是textPayload。我的目标是使用字典的键作为标签(请参阅基于日志的指标标签) 用于基于日志的指标,以便可以在 Grafana 中解决这些问题。

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

我需要在日志中输出:

jsonPayload: `{'key1':value1, 'key2':value2}`

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

"2022-02-08 15:43:32,460 [INFO]: {"key1": value1, "key2": value2}"

来自日志的真实示例,在中间,您可以看到textPayload

在此处输入图片描述

图片作为文字:

{
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

在 Cloud Logging 中,结构化日志是指使用 jsonPayload 字段为其负载添加结构的日志条目。结构化日志适用于用户编写的日志。

我试图获得以下“结构化日志记录”编写结构化日志经过

logging.info(json.dumps(json_for_gcp_lbm))

但无济于事。

进一步了解链接:GCP 有一个内置的日志代理,它使用流畅至于关于日志记录代理似乎只适用于 Google Kubernetes Engine 或 App Engine,而不适用于 Google Cloud Function:

如果您使用的是 Google Kubernetes Engine 或 App Engine 柔性环境,则可以将结构化日志作为 JSON 对象序列化为一行写入 stdout 或 stderr。然后,Logging 代理将结构化日志作为 LogEntry 结构的 jsonPayload 发送到 Cloud Logging。

我怎样才能获得jsonPayload这个输出?

答案1

您可以按照以下方式设置结构化日志记录例子在文档中。确保您的 Python 版本为 3.8 或更高版本。实现此目的的另一种方法是使用日志客户端库

OP 中第二种方法的示例:

输入你的 requirements.txt:

google-cloud-logging==3.0.0

作为撰写本文时的最新版本。

from google.cloud import logging as gclogger

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

并使用以下命令调用 json 日志记录:

json_for_gcp_lbm = {我的JSON_HERE}

    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 输出:

在此处输入图片描述

然后您可以从“创建日志指标”(基于日志的指标/LBM)菜单中的 json 中选择任何标签:

在此处输入图片描述

相关内容