使用 python 标记日志到 gcp 日志查看器

Posted

技术标签:

【中文标题】使用 python 标记日志到 gcp 日志查看器【英文标题】:Label logging with python to gcp log viewer 【发布时间】:2020-07-19 09:50:50 【问题描述】:

我正在尝试在我的 GKE 应用程序中使用 GCP 标签,我想记录与 GKE 关联的标签,例如 namespace_name、location、cluster_name、project_id 和 pod_name,但是默认情况下,所有内容都记录在全局资源类型下,并且仅project_id 填充在 GCP 日志查看器中

例子:

我找到了一种将资源类型更改为 k8s_container 并使用 Resource 填充其他标签的方法,但是我似乎无法找到一种方法来填充标签而不直接将值硬编码到应用程序中,请参见下面的示例:

handler = CloudLoggingHandler(client,resource=Resource("k8s_container",labels=

'namespace_name': "my_namespace",
'location': "us-west1",
'cluster_name': "my-cluster",
'project_id': "my-project-id",
'pod_name': "my-pod"
))

完整应用供参考:

import logging
import google.cloud.logging
from google.cloud.logging.handlers import CloudLoggingHandler
from google.cloud.logging.resource import Resource

client = google.cloud.logging.Client().from_service_account_json(GOOGLE_SA_ACCOUNT)

handler = CloudLoggingHandler(client,resource=Resource("k8s_container",labels=

    'namespace_name': "my_namespace",
    'location': "us-west1",
    'cluster_name': "my-cluster",
    'project_id': "my-project-id",
    'pod_name': "my-pod"
))

google.cloud.logging.handlers.setup_logging(handler)

logging.getLogger().setLevel(logging.ERROR)


try:
    requests.head('https://www.exampleurladdress.com').status_code == 200
except requests.exceptions.RequestException as err:
    logging.error(err

我想知道是否有某种方法可以直接从 GKE 正确填充它们?

谢谢。

【问题讨论】:

检查this 链接是否对您有帮助。请告诉我。 【参考方案1】:

如果您将日志有效负载打印到stdout,则可以正确填充resource 字段。 GKE 集群的每个工作节点上的日志记录代理将解析打印到 stdout 的每一行,并将解析的有效负载作为具有正确 resource 字段值的单独日志条目摄取。

考虑使用v3.0.0 of Logging client library for Python。它支持以日志代理知道解析的格式打印出字符串化的 Json。通过这种方式,除了有效负载之外,您还可以摄取用户的标签、HTTP 请求上下文和其他元数据。它还允许您以文本或 Json 结构的形式摄取有效负载。

【讨论】:

以上是关于使用 python 标记日志到 gcp 日志查看器的主要内容,如果未能解决你的问题,请参考以下文章

安装在 VM 上的 GCP stackdriver-agent 每分钟发送一次奇怪的日志

如何为 gcp 中的组提供权限(创建/查看)并启用相同的日志记录

统计指定时间内的 GCP 日志条目数

将日志查看器导出到文件

Firebase 身份验证日志 - GCP

GCP 日志记录中的 ChromeOS 错误