使用 gcloud CLI 写入和查询日志条目

本文档介绍 Cloud Logging 的一些功能,并展示如何执行以下操作:

  • 使用 Google Cloud CLI 写入日志条目。
  • 使用 gcloud CLI 列出日志条目。
  • 使用 Logging API 列出日志条目。
  • 使用日志浏览器查看和查询日志条目。

准备工作

您必须有启用了结算功能的 Google Cloud 项目才能完成此快速入门。如果您没有 Google Cloud 项目,或者没有为 Google Cloud 项目启用结算功能,请执行以下操作:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  7. Verify that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.

  9. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  13. Verify that billing is enabled for your Google Cloud project.

  14. 所需的角色

    如需获得创建、列出和删除日志条目所需的权限,请让您的管理员向您授予项目的 Logging Admin (roles/logging.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

    Logs Writer (roles/logging.logWriter) 和 Logs Viewer (roles/logging.viewer) 角色包含用于创建和列出日志条目的权限。如需删除日志条目,请授予 Logging Admin (roles/logging.admin) 角色,该角色包含创建、列出和删除日志条目的权限。请注意,Logging Admin (roles/logging.admin) 角色还授予了在 Logging 中执行所有操作的权限。

    使用 gcloud CLI 写入日志条目

    Logging 支持包含结构化和非结构化数据的日志条目。结构化数据由 JSON 数据结构组成;例如 {"weather": "partly cloudy"}。非结构化数据是一串字符;例如 "A simple entry"。

    在接下来的步骤中,您将使用 gcloud CLI 写入含非结构化数据的日志条目和含结构化数据的日志条目。gcloud CLI 为 Cloud Logging API 提供了命令行界面。

    1. 将含非结构化数据的日志条目写入日志 my-test-log,运行 gcloud logging write 命令:

      gcloud logging write my-test-log "A simple entry."
      

      命令完成后,您会看到消息:Created log entry。

    2. 将含结构化数据的日志条目写入日志 my-test-log:

      gcloud logging write --payload-type=json my-test-log '{ "message": "My second entry", "weather": "partly cloudy"}'
      

      当您写入含结构化数据的日志条目时,必须包括 --payload-type=json。如果省略此字段,Logging 会将载荷解释为非结构化数据。

    如果日志 my-test-log 不存在,则 Logging 会在收到日志条目时创建该日志。

    使用 gcloud CLI 列出日志条目

    您可以从 Logging 中检索日志条目,并使用 gcloud CLI 显示它们。例如,要检索并显示资源类型为 global 的日志条目,请运行以下命令:

    gcloud logging read "resource.type=global"
    

    该命令会返回类似于如下所示的结果:

    ---
    insertId: jpj9zjf73t1mn
    jsonPayload:
      message: My second entry
      weather: partly cloudy
    logName: projects/myloggingproject/logs/my-test-log
    receiveTimestamp: '2018-11-01T18:39:31.114507977Z'
    resource:
      labels:
        project_id: myloggingproject
      type: global
    timestamp: '2018-11-01T18:39:31.114507977Z'
    ---
    insertId: vd4m1if7h7u1a
    logName: projects/myloggingproject/logs/my-test-log
    receiveTimestamp: '2018-11-01T18:39:19.718100792Z'
    resource:
      labels:
        project_id: myloggingproject
      type: global
    textPayload: A simple entry
    timestamp: '2018-11-01T18:39:19.718100792Z'
    

    如需了解如何读取日志,请参阅 gcloud logging read 参考文档。

    使用 API Explorer 列出日志条目

    如需在不编写任何代码的情况下运行 Logging API 方法,请参阅使用 APIs Explorer。如需从 Logging 中读取日志条目列表,请执行以下操作:

    1. 转到 entries.list API 方法的“API 参考文档”页面:

      转到 entries.list API 页面

    2. 配置并运行 API 命令:

      1. 替换以下文本中的 PROJECT_ID:

        "resourceNames": [
        "projects/PROJECT_ID"
        ],
        "filter": "resource.type=global",
        "orderBy": "timestamp desc"
        
      2. 复制上一步中更新后的文本,将其粘贴到 API Explorer 的请求正文字段中。

      3. 点击执行。

      该方法会返回类似于如下所示的响应:

      {
        "entries": [
          {
            "textPayload": "A simple entry",
            "insertId": "vd4m1if7h7u1a",
            "resource": {
              "type": "global",
              "labels": {
                "project_id": "myloggingproject"
              }
            },
            "timestamp": "2018-11-01T18:39:19.718100792Z",
            "logName": "projects/myloggingproject/logs/my-test-log",
            "receiveTimestamp": "2018-11-01T18:39:19.718100792Z"
          },
          {
            "insertId": "jpj9zjf73t1mn",
            "jsonPayload": {
              "message": "My second entry",
              "weather": "partly cloudy"
            },
            "resource": {
              "type": "global",
              "labels": {
                "project_id": "myloggingproject"
              }
            },
            "timestamp": "2018-11-01T18:39:31.114507977Z",
            "logName": "projects/myloggingproject/logs/my-test-log",
            "receiveTimestamp": "2018-11-01T18:39:31.114507977Z"
          }
        ]
      }
      

    在日志浏览器中查看日志条目

    如需在 Google Cloud 控制台中查看日志条目,您可以使用 Logs Explorer。大多数 Google Cloud 项目都会存储大量日志;您可以通过编写查询来选择某些日志条目。

    如需查看您使用 Logs Explorer 写入的日志条目,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面:

      前往 Logs Explorer

      如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

      确保在 Google Cloud导航栏中已选中您的 Google Cloud 项目。如有必要,请使用 Google Cloud 项目下拉列表选择您的 Google Cloud 项目。

    2. 在资源菜单中,选择全局。

      如果您没有看到全局菜单选项或者没有看到日志条目,请等待几分钟,然后刷新该页面。Logging 可能需要几分钟才能收到日志条目。

    3. 如需查看日志条目的详细信息,请点击其 菜单。

      第一个日志条目的数据存储在 textPayload 中。第二个日志条目的结构化数据存储在 jsonPayload 中。结构化载荷包含键 message 和 weather。

    如需了解日志条目的数据格式,请参阅 LogEntry 类型。

    在日志浏览器中查询日志条目

    您可以使用查询编辑器查询日志条目;对于结构化日志,也可以使用键和值查询日志条目。例如,若要显示包含文本 simple 的所有日志条目,请执行以下操作:

    1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面:

      前往 Logs Explorer

      如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

    2. 在资源菜单中,选择全局。

    3. 在查询编辑器中,输入字符串 simple(加引号)。日志显示区仅会显示日志条目 A simple entry.

    4. 当您查看完日志后,移除您添加的查询字符串,然后点击运行查询。显示区将重新显示这两个日志条目。

    如需显示包含结构化数据、键为 weather 并且 value 字段包含 partly 的所有日志条目,请执行以下操作:

    1. 查询编辑器中包含 resource.type="global" 这一行。 输入以下命令:

      jsonPayload.weather:partly
      
    2. 点击运行查询。结果为一条日志条目 My second entry。

    日志浏览器还提供保存的查询、建议的查询和最新查询。如需详细了解查询,请参阅在日志浏览器中构建查询。

    如需查看示例查询,请参阅使用日志浏览器的查询示例。

    问题排查

    • 输入错误和未知字段名称导致 gcloud CLI 命令完成时显示消息参数无效。例如,如果您忘记输入 resource.type 中的英文句点,则会导致以下错误:

       ERROR: (gcloud.logging.read) INVALID_ARGUMENT: Field not found: 'resourcetype'.
      
    • 当 Cloud Logging 未被授予所需的访问权限时,gcloud CLI 命令完成时会显示消息权限遭拒。例如,如果 Compute Engine 虚拟机实例配置了默认的 API 设置,则 list 命令完成时显示“权限遭拒”错误:

       ERROR: (gcloud.logging.read) PERMISSION_DENIED: Request had insufficient authentication scopes.
      

      如需解决此问题,请通过执行以下操作修改您的 Compute Engine 虚拟机实例权限以授予 Cloud Logging 读取权限:

      1. 转到虚拟机实例的虚拟机实例详情页面。点击停止。完成此操作可能需要一两分钟时间。
      2. 若要修改配置,请点击编辑。
      3. 搜索标题 Cloud API 访问权限范围,然后点击详情以显示每个 API 的设置。将来自 Cloud Logging API 的条目更改为全部。点击保存。
      4. 如需重新启动虚拟机实例,请点击启动。片刻之后,您的虚拟机就可以使用了。
    • 当 API Explorer 无法完成您的命令或需要其他授权时,它会显示一条消息或错误代码:

      • 200 响应代码和没有条目:如果显示消息 nextPageToken,则表示 APIs Explorer 没有时间完成搜索。在请求中添加 pageToken,将值设置为键 nextPageToken 所对应的值,然后重试命令。
      • 400 响应代码:查询值无效。例如,如果您将 global 错拼为 gloobal,则消息为 Unsupported resource type: gloobal。
      • 404 响应代码:项目 ID 无效。检查项目标识符的拼写。
      • 系统可能会要求您登录自己的Google Cloud 项目并允许 APIs Explorer 访问您的账号。

    清理

    为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

    1. (可选)若要删除您创建的日志条目,请运行以下 gcloud 命令:

      gcloud logging logs delete my-test-log
      

      如果您不删除日志条目,它们会过期,然后被移除。如需了解保留信息,请参阅配额和限制。

    后续步骤