使用 Log Analytics 分析日志量

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

如何查询可结算量

可通过 storage_bytes 字段获取日志条目的计费量(即报告给 Cloud Billing 的大小)。在查询中,您可以按照与使用数据类型为 INTEGER 的任何架构字段相同的方式使用 storage_bytes 字段。例如,您可以将其包含在 SELECT 子句、CASE 语句和通用表表达式中。如需详细了解如何查询日志,请参阅以下文档:

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

日志条目的计费量与发送到 Cloud Logging API 的 LogEntry 对象的大小不同。计费量包括序列化和元数据所需的字节数。

准备工作

  1. 如需获取使用 Log Analytics 运行查询和查看日志所需的权限,请让管理员向您授予项目的以下 IAM 角色:

    • 如需查询 _Required_Default 日志存储分区,请执行以下操作: 日志查看器 (roles/logging.viewer)
    • 如需查询自定义日志存储分区,请执行以下操作: Logs View Accessor (roles/logging.viewAccessor)

    如需详细了解如何授予角色,请参阅管理访问权限

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

  2. 对于要查询的日志视图,请转到日志存储页面,并验证存储这些日志视图的日志存储分区是否已升级以使用 Log Analytics。如有必要,请升级日志存储桶。

    在 Google Cloud 控制台中,前往日志存储页面:

    前往日志存储

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

  3. 可选:如果要使用 BigQuery 数据集查询日志数据,请创建关联的 BigQuery 数据集

查询示例

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

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

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

按应用查询日志量

对于针对 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`
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`
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`'

此查询的结果类似于以下内容:

+----------+---------------+
| 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 日或之后写入的。