【问题标题】:How to filter GCP stackdriver logs by timestamp from python如何通过python的时间戳过滤GCP stackdriver日志
【发布时间】:2019-09-28 05:23:41
【问题描述】:

我正在尝试从 python 模块获取 GCP 堆栈驱动程序日志。 我可以从 request_id 和 user 过滤日志

但是当我试图在两个时间段之间获取日志时,它会给出我的错误。

import json
import sys
from google.cloud import logging
from google.cloud.logging import DESCENDING
from google.cloud import bigquery

#stackdriver client object
logging_client = logging.Client()

FILTER="logName:projects/cognitedata-europe-west1-1/logs/stdout AND timestamp>="+sys.argv[3]
results_iterator = logging_client.list_entries(filter_=FILTER,projects=PROJECT_IDS,order_by=DESCENDING,page_size=1000)

我使用以下模式来提供时间。

timestamp:sys.argv[3]
timestamp=sys.argv[3]
timestamp>sys.argv[3]
timestamp>=sys.argv[3]

但是注意解决了我的问题。

我输入 sys.argv3 的时间为“2019-09-28T03:28:04.189Z”

我的要求是从时间戳中过滤数据

但在 GCP 堆栈驱动程序记录器 UI 中,它会为两者提供结果

timestamp:"2019-09-28T03:28:04.189Z"

timestamp>="2019-09-28T03:28:04.189Z" AND timestamp<="2019-09-28T03:30:39.189Z" 

【问题讨论】:

  • 我怀疑(!)您需要转义您提供的时间戳。您正在提供FILTER="timestamp&gt;=2019-09-28T03:28:04.189Z(注意该值未引用),但您想要FILTER="timestamp&gt;=2019-09-28T03:28:04.189Z"。你想要:...AND timestamp&gt;=\""+sys.argv[3]\""

标签: python google-cloud-platform stackdriver google-cloud-stackdriver


【解决方案1】:

正如 DazWilkin 在 cmets 中提到的,您还需要在过滤器中包含双引号。 您可以执行以下操作:

FILTER="logName:projects/cognitedata-europe-west1-1/logs/stdout AND timestamp>=" + "\"" + sys.argv[3] + "\""

如果上面看起来太复杂而难以阅读,您可以使用 Python 的单引号和双引号字符串的组合,如下所示:

FILTER='logName:projects/cognitedata-europe-west1-1/logs/stdout AND timestamp>=' + '\"' + sys.argv[3] + '\"'

注意:反斜杠 (\) 用于转义双引号 (")。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多