本文档介绍了如何使用 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:
-
在 Google Cloud 控制台中,转到日志存储页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 对于包含您要查询的日志视图的每个日志存储桶,请确保日志分析可用列显示打开。如果系统显示升级,请点击升级并完成对话框。
配置 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 Studio 和 Looker Studio 页面以及 bq 命令行工具)查询日志条目。
如需使用示例查询,请执行以下操作:
日志分析页面:将 TABLE_NAME_OF_LOG_VIEW 替换为日志视图的名称。格式为
project_ID.region.bucket_ID.view_ID
。BigQuery 数据集:将 TABLE_NAME_OF_LOG_VIEW 替换为关联数据集中的表路径。
按应用查询日志量
如需计算针对 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 Studio 和 Looker Studio 页面以及 bq 命令行工具。
日志条目是在 2024 年 1 月 1 日当天或之后写入的。