使用 Log Analytics 分析日志量

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

如何查询可结算量

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

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

日志条目的计费量不是 LogEntry 的大小 对象。可结算量包括 序列化和元数据所需的字节数。

准备工作

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

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

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

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

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

    前往日志存储

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

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

查询示例

本部分提供了分析单个日志视图中的数据的示例查询。 如果您将数据存储在多个日志视图中,并且希望计算聚合, 值,那么您需要使用 UNION 声明。

您可以使用 Log Analytics 页面或任何您可以查询 BigQuery 数据集的平台, 其中包括 BigQuery StudioLooker Studio 页面,以及 bq 命令行工具

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

  • Log Analytics 页面:替换 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 命令行工具按日志名称查询日志卷

通过storage_bytes BigQuery Studio 页面或使用 bq 命令行工具

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

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