2

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

例子:

1

我找到了一种将资源类型更改为 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 正确填充它们?

谢谢。

4

1 回答 1

0

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

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

于 2022-03-05T07:49:45.650 回答