使用 Log Analytics 分析日志量

本文档介绍了如何使用 Log Analytics 估算日志条目的可结算量。您可以编写查询,按不同的维度(例如资源类型或应用名称)报告和汇总可结算流量,然后以图表的形式查看查询结果。

如何查询可结算量

日志条目的可结算量(即向 Cloud Billing 报告的大小)可通过 storage_bytes 字段获取。在查询中,您可以使用 storage_bytes 字段,就像使用数据类型为 INTEGER 的任何架构字段一样。例如,您可以在 SELECT 子句、CASE 语句和通用表表达式中添加它。如需详细了解如何查询日志,请参阅以下文档:

由于 Cloud Billing 在确定费用时会使用可结算流量,因此您可以编写查询来帮助您了解费用来源。例如,您可以编写查询来确定哪些应用写入的日志条目最多。如需了解如何将可结算流量与费用相关联,请参阅 Cloud Logging 价格摘要Cloud Logging 价格

日志条目的可结算流量不是发送到 Cloud Logging API 的 LogEntry 对象的大小。可结算的传输量包括序列化和元数据所需的字节。

准备工作

本部分介绍了在使用 Log Analytics 之前必须完成的步骤。

配置日志存储分区

确保您的日志存储分区已升级为使用 Log Analytics:

  1. 在 Google Cloud 控制台中,转到日志存储页面:

    前往日志存储

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

  2. 对于包含您要查询的日志视图的每个日志存储桶,请确保日志分析可用列显示打开。如果系统显示升级,请点击升级并完成对话框。

配置 IAM 角色和权限

本部分介绍使用 Log Analytics 所需的 IAM 角色或权限:

  • 如需获得使用 Log Analytics 和查询日志视图所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

    • 如需查询 _Required_Default 日志存储分区,请使用以下角色:Logs Viewer (roles/logging.viewer)
    • 如需查询项目中的所有日志视图,请使用以下角色: Logs View Accessor (roles/logging.viewAccessor)

    您可以通过以下任一方式将主账号限制为只能访问特定的日志视图:向项目级别授予的日志视图访问权限角色授予中添加 IAM 条件,或者向日志视图的政策文件中添加 IAM 绑定。如需了解详情,请参阅控制对日志视图的访问权限

    这些权限与您在 Logs Explorer 页面上查看日志条目时所需的权限相同。如需了解查询用户定义的存储桶中的视图或查询 _Default 日志存储桶的 _AllLogs 视图所需的其他角色,请参阅 Cloud Logging 角色

查询示例

本部分提供了用于分析单个日志视图中数据的示例查询。如果您在多个日志视图中存储数据,并且想要计算存储在这些视图中的数据的汇总值,则需要使用 UNION 语句。

您可以使用日志分析页面或任何可查询 BigQuery 数据集的位置(包括 BigQuery StudioLooker Studio 页面以及 bq 命令行工具)查询日志条目。

如需使用示例查询,请执行以下操作:

  • 日志分析页面:将 TABLE_NAME_OF_LOG_VIEW 替换为日志视图的名称。格式为 project_ID.region.bucket_ID.view_ID

    转到 Log Analytics

  • BigQuery 数据集:将 TABLE_NAME_OF_LOG_VIEW 替换为关联数据集中的表路径

    前往 BigQuery Studio

按应用查询日志量

如需计算针对 Google Kubernetes Engine 资源写入且包含 JSON 载荷的日志条目,每个应用每天的总字节数,请使用以下查询:

SELECT
  timestamp_trunc(timestamp,DAY) as day,
  JSON_VALUE(labels["k8s-pod/app"]) as app_id,
  SUM(storage_bytes) as total_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"
GROUP BY ALL

如需直观呈现数据,您可以创建图表。

在以下示例中,数据显示为堆叠条形图。图表中的每个条形显示存储的字节总数,按应用进行分组。在此示例中,frontend 应用生成的日志数据最多:

显示按应用查询日志量结果的示例图表。

按日志名称查询日志量

如需列出包含 JSON 载荷且已写入 Google Kubernetes Engine 资源的每个日志条目的存储字节数和日志名称,请使用以下查询:

SELECT
  log_id AS log_name,
  storage_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"

上一个查询不会汇总结果,而是为每个日志条目提供一行,该行包含日志名称和存储的字节数。如果您将这些数据绘制成图表,则可以直观地了解写入不同日志的日志数据部分:

显示按日志名称查询日志量结果的示例图表。

上图显示,大多数日志数据会写入名为 stdout 的日志。

使用 bq 命令行工具按日志名称查询日志量

您可以在通过 BigQuery Studio 页面或使用 bq 命令行工具运行的查询中添加 storage_bytes 字段。

以下查询会报告每个日志条目的日志名称和存储的字节数:

bq query --use_legacy_sql=false  'SELECT log_id as log_name,
  storage_bytes FROM `TABLE_NAME_OF_LOG_VIEW`'

此查询的结果如下所示:

+----------+---------------+
| log_name | storage_bytes |
+----------+---------------+
| stdout   |           716 |
| stdout   |           699 |
| stdout   |           917 |
| stdout   |           704 |

每行都对应一条日志条目。storage_bytes 列的值是相应日志条目的可结算流量。

限制

只有在满足以下条件时,storage_bytes 字段才可用:

  • 日志存储桶已升级为使用 Log Analytics。
  • 您的查询将在 Log Analytics 页面或您可以查询 BigQuery 数据集的任何位置执行,包括 BigQuery StudioLooker Studio 页面以及 bq 命令行工具

  • 日志条目是在 2024 年 1 月 1 日当天或之后写入的。