我想使用 python 从 google 云中以完全 JSON 的格式获取所有属性的日志

I want to fetch logs from google cloud, with all the attributes, in the exact JSON format using python

我正在使用客户端库。

for entry in logging_client.list_entries(order_by=DESCENDING, filter_=FILTER, page_size=1):

    timestamp = entry.timestamp.isoformat()
    print('****{}'.format(entry.payload_pb))
    print (entry.payload_pb)
    print('* {}: {}: {}'.format(timestamp, entry.logger.name, entry.insert_id))

但是payload_pb只有两个属性:valuetype_url。 否则我只能获取一些值,例如 timestamplogNameinsertId.

我想获取“protopayload”中的值。请推荐一个方法!

proto payload的value是序列化的protocol buffer消息。您需要对其进行反序列化以读取消息中的字段。

https://developers.google.com/protocol-buffers/docs/pythontutorial

proto payload是一个Any消息,值的类型由type_url

表示

https://developers.google.com/protocol-buffers/docs/proto3#any

获得原始消息后,您可以使用 json_format.MessageToJson 将其转换为 JSON。

只要原始消息的描述符已知,也可以直接使用 MessageToJson 处理 Any 消息。这可以通过“RegisterMessage”更新原型 symbol database 来完成。

尽管提供了提示,但我无法使其与 API 一起使用。

相反,您可以将日志导出到像 BigQuery 这样的接收器,并从那里使用 SQL 进行查询。请参阅此处的操作方法 https://cloud.google.com/logging/docs/export/configure_export_v2

由于没有关于如何从 GCP 服务读取特定 protobuf 负载的代码(样本或示例),它可能还没有准备好迎接黄金时段,或者不打算以这种方式使用。 AAMOF 唯一的文档是 - 截至今天 - 仅用于编写和阅读自定义日志。

这里是我提出的问题,如果你想跟进:https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5313

我找不到客户端库的任何方法。但是,我使用了 Python API,

loglist = bq.entries().list(body=request_body).execute()

这里,bq 是来自 discovery.build 的响应,loglist 提供 JSON 格式的响应,dicts 和 [=14 的组合=].我们必须深入挖掘它们,以获得准确的键值对。

我希望这能帮助那些需要以某种方式完成工作的人,比如我!

实际上,您可以通过将环境变量 GOOGLE_CLOUD_DISABLE_GRPC 设置为非空字符串,使 API return 成为 dict (JSON) 有效负载,例如GOOGLE_CLOUD_DISABLE_GRPC=true.

这将填充 payload 而不是 payload_pb