使用Python从Google Cloud Stackdriver API检索日志名称列表

ott*_*ath 7 python google-cloud-platform google-cloud-python google-cloud-stackdriver

我正在使用Google的Stackdriver Logging Client Libraries for Python以编程方式检索日志条目,类似于使用gcloud beta logging read.

Stackdriver还提供了一个API来检索日志名称列表,这很可能是gcloud beta logging logs list使用的.

如何将该API与Python客户端库一起使用?我在文档中找不到任何内容.

dse*_*sto 7

您可以使用Python 的Stackdriver日志客户端库.您可以使用该命令安装它们pip install --upgrade google-cloud-logging,并在设置身份验证后,您将能够运行一个简单的程序,例如我快速开发并在下面共享的程序.

在进入代码本身之前,让我与您分享一些有趣的文档页面,这些页面将帮助您开发自己的代码,以使用这些客户端库以编程方式检索日志条目:

  • 首先,有一般的Stackdriver Logging Python客户端库文档.您可以在此处找到所有类型的信息:检索,写入和删除日志,导出日志等.
    • 具体而言,您将对如何检索日志条目,从单个或多个项目列出它们以及应用高级过滤器感兴趣.
  • 还要看看如何定义入口类,以便访问您感兴趣的字段(在我的示例中,我只检查时间戳严重性字段).
  • 可能也有用的示例.

既然您拥有了所需的所有数据,那么让我们进行一些简单的编码:

# 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
Run Code Online (Sandbox Code Playgroud)

这个小片段导入客户端库,在您的项目中实例化客户端(项目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
Run Code Online (Sandbox Code Playgroud)

哪些条目与我建立的过滤器匹配的日志完全对应(注意它们在此屏幕截图中以相反的顺序显示):

在此输入图像描述

我希望这一小段代码(伴随我共享的所有文档页面)对于使用Stackdriver Client Libraries for Python以编程方式检索日志非常有用.


正如@ otto.poellath所指出的,列出项目中可用的所有日志名称可能也很有趣.但是,目前没有可用于此目的的Python客户端库方法,因此我们必须使用旧的Python API客户端库(与Python客户端库不同).它可以随命令一起安装,通过为Python提供库,pip install --upgrade google-api-python-client可以更容易地使用REST API(正如您在问题中所共享的那样确实包括列出日志名称的方法).使用它并不像使用新的客户端库那样容易,但它实现了通过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))
Run Code Online (Sandbox Code Playgroud)

它会输出如下结果:

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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是你在问题中提出的问题,因为它没有特别使用Python客户端库,但我认为它可能对您有意义,因为您知道新客户端库中没有此功能,结果类似,因为您可以使用Python以编程方式访问日志名称列表.