我想使用 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
只有两个属性:value
和type_url
。
否则我只能获取一些值,例如 timestamp
、logName
、insertId
.
我想获取“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
。
我正在使用客户端库。
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
只有两个属性:value
和type_url
。
否则我只能获取一些值,例如 timestamp
、logName
、insertId
.
我想获取“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
。