我正在使用 Google 的Stackdriver Logging Client Libraries for Python以编程方式检索日志条目,类似于使用gcloud beta logging read
.
Stackdriver 还提供了一个 API 来检索日志名称列表,这很可能是gcloud beta logging logs list
使用的。
如何将该 API 与 Python 客户端库一起使用?我在文档中找不到任何东西。
我正在使用 Google 的Stackdriver Logging Client Libraries for Python以编程方式检索日志条目,类似于使用gcloud beta logging read
.
Stackdriver 还提供了一个 API 来检索日志名称列表,这很可能是gcloud beta logging logs list
使用的。
如何将该 API 与 Python 客户端库一起使用?我在文档中找不到任何东西。
您可以使用适用于 Python 的Stackdriver Logging 客户端库。您可以使用命令安装它们pip install --upgrade google-cloud-logging
,设置身份验证后,您将能够运行一个简单的程序,例如我快速开发并在下面分享的程序。
在进入代码本身之前,让我与您分享一些有趣的文档页面,这些页面将帮助您开发自己的代码,以使用这些客户端库以编程方式检索日志条目:
现在您已经拥有了所需的所有数据,让我们开始一些简单的编码:
# Import the Google Cloud Python client library
from google.cloud import logging
from google.cloud.logging import DESCENDING
# Instantiate a client
logging_client = logging.Client(project = "<YOUR_PROJECT_ID>")
# Set the filter to apply to the logs
FILTER = 'resource.type:gae_app and resource.labels.module_id:default and severity>=WARNING'
i = 0
# List the entries in DESCENDING order and applying the FILTER
for entry in logging_client.list_entries(order_by=DESCENDING, filter_=FILTER): # API call
print('{} - Severity: {}'.format(entry.timestamp, entry.severity))
if (i >= 5):
break
i += 1
这个小片段导入客户端库,在您的项目中实例化一个客户端(项目 ID 等于YOUR_PROJECT_ID),设置一个过滤器,只查找严重性高于WARNING的日志条目,最后列出与过滤器匹配的 6 个最新日志.
运行此代码的结果如下:
my-console:python/logs$ python example_log.py
2018-01-25 09:57:51.524603+00:00 - Severity: ERROR
2018-01-25 09:57:44.696807+00:00 - Severity: WARNING
2018-01-25 09:57:44.661957+00:00 - Severity: ERROR
2018-01-25 09:57:37.948483+00:00 - Severity: WARNING
2018-01-25 09:57:19.632910+00:00 - Severity: ERROR
2018-01-25 09:54:39.334199+00:00 - Severity: ERROR
哪些条目与我建立的过滤器匹配的日志完全对应(请注意,它们在此屏幕截图中以相反的顺序显示):
我希望这一小段代码(随附我共享的所有文档页面)对您使用 Stackdriver Client Libraries for Python 以编程方式检索日志有用。
正如@otto.poellath 所指出的,列出项目中所有可用的日志名称也可能很有趣。但是,目前没有可用于此目的的 Python 客户端库方法,因此我们必须使用旧的Python API 客户端库(与 Python 客户端库不同)。它可以使用命令安装pip install --upgrade google-api-python-client
,并且更容易使用 REST API(正如您在问题中分享的那样,它确实包括列出日志名称的方法) 通过为 Python 提供一个库。使用它不像使用新的客户端库那么容易,但它实现了所有(或几乎所有)可通过 REST API 本身获得的方法。下面我分享另一个代码片段,其中列出了您项目中任何书面日志的所有日志名称:
from apiclient.discovery import build
from oauth2client.client import GoogleCredentials
import json
credentials = GoogleCredentials.get_application_default()
service = build('logging', 'v2', credentials=credentials)
# Methods available in: https://developers.google.com/resources/api-libraries/documentation/logging/v2/python/latest/index.html
collection = service.logs()
# Build the request and execute it
request = collection.list(parent='projects/<YOUR_PROJECT_ID>')
res = request.execute()
print(json.dumps(res, sort_keys=True, indent=4))
它打印如下结果:
my-console:python/logs$ python list_logs.py
{
"logNames": [
"projects/<YOUR_PROJECT_ID>/logs/my-log",
"projects/<YOUR_PROJECT_ID>/logs/my-test-log",
"projects/<YOUR_PROJECT_ID>/logs/python",
"projects/<YOUR_PROJECT_ID>/logs/requests"
]
}
我知道这不是您在问题中所问的,因为它没有专门使用 Python 客户端库,但我认为这对您来说可能也很有趣,因为知道此功能在新的客户端库中不可用,结果类似,因为您可以使用 Python 以编程方式访问日志名称列表。
from google.cloud import logging
# Instantiate a client
logging_client = logging.Client(project="projectID")
# Set the filter to apply to the logs
FILTER = 'resource.labels.function_name="func_name" severity="DEBUG"'
for entry in logging_client.list_entries(filter_=FILTER): # API call
print(entry.severity, entry.timestamp, entry.payload)
这是关于云功能的!