Rhi*_*guy 6 google-bigquery google-cloud-logging stackdriver google-cloud-python google-cloud-stackdriver
我正在使用 Python3 查询 Stackdriver 以获取 GCP 日志。不幸的是,具有重要数据的日志条目以“NoneType”而不是“dict”或“str”的形式返回给我。结果“entry.payload”是“None”类型,“entry.payload_pb”有我想要的数据,但是是乱码。
有没有办法让 Stackdriver 以干净的格式返回这些数据,或者有没有办法解析它?如果没有,有没有办法查询比我正在做的更好的数据并产生干净的数据?
我的代码看起来像这样:
#!/usr/bin/python3
from google.cloud.logging import Client, ASCENDING, DESCENDING
from google.oauth2.service_account import Credentials
projectName = 'my_project'
myFilter = 'logName="projects/' + projectName + '/logs/compute.googleapis.com%2Factivity_log"'
client = Client(project = projectName)
entries = client.list_entries(order_by=DESCENDING, page_size = 500, filter_ = myFilter)
for entry in entries:
if isinstance(entry.payload, dict):
print(entry.payload)
if isinstance(entry.payload, str):
print(entry.payload)
if isinstance(entry.payload, None):
print(entry.payload_pb)
Run Code Online (Sandbox Code Playgroud)
“entry.payload_pb”数据总是这样开头:
type_url: "type.googleapis.com/google.cloud.audit.AuditLog"
value: "\032;\n9gcp-user@my-project.iam.gserviceaccount.com"I\n\r129.105.16.28\0228
Run Code Online (Sandbox Code Playgroud)
看起来 python 库中与解析 protobuf 以进行日志记录相关的某些内容已损坏。发现两个老问题
这似乎在不久前就得到了解决 - 但我相信问题又重新出现了。我已经就这个问题向谷歌支持开票了,他们正在调查这个问题。
作为解决方法 - 您可以使用两个选项:
您可以使用 gcloud 命令。尤其
gcloud 日志记录读取
它非常强大(支持过滤器、时间戳)——但它的输出格式是yaml。您可以安装并使用 PyYAML 库将日志转换为字典。
归档时间: |
|
查看次数: |
2023 次 |
最近记录: |