Google Cloud 日志服务可以自动接收和存储各种云服务比如虚机、对象存储、负载均衡、容器服务等的日志并提供方便的索引查询功能。近日,Google Cloud 日志服务推出了新的日志分析 (Log Analytics) 服务,方便用户对日志数据进行高效的 SQL 查询,可以更加方便和高效地挖掘日志数据的价值。

使用日志分析,您可以运行查询来分析日志数据以生成有用的数据洞见。例如,假设您正在排查问题,并且希望了解一段时间内发送到特定网址的 HTTP 请求的平均延迟时间。日志存储桶升级到使用日志分析后,您可以使用 SQL 查询查询存储在日志存储桶中的日志。通过对日志进行分组和汇总,您可以深入了解日志数据,这有助于减少问题排查所花的时间。

借助日志分析,您还可以使用 BigQuery 查询数据。例如,假设您希望将日志中的网址与已知恶意网址的公开数据集进行比较。要执行此分析,您必须使用存储在 Logging 之外的数据来分析日志。在升级存储桶以使用日志分析,然后创建关联的数据集后,您可以查看日志存储桶中存储的数据。通过使用链接的数据集,您可以将日志数据与 BigQuery 可访问的其他数据联接起来。例如,此数据可以是存储已知恶意网址的数据集,也可以是通过 Looker 和数据洞察等商业智能工具生成的数据。

本文主要基于实例介绍如何打开并使用 Log Analytics 日志分析服务。


升级日志服务存储桶

使用 Log Analytics 进行日志分析

示例一 日志按类型统计数量

示例二 访问日志按状态码分组统计

示例三 根据访问日志统计出向流量

使用 BigQuery 分析日志桶里的日志


升级日志服务存储桶

默认日志桶没有开通日志分析服务,需要在控制台手动升级。升级操作没有费用。

首先在控制台菜单进入日志服务,并选择导航栏中的 Logs Storage 菜单页。

在列出的日志存储桶中,选择要升级的日志桶,并点击 UPGRADE 按钮。

在确认页面点击 UPGRADE。

点击完成后等待大概3-5分钟,升级可以完成。完成后可以看到 Log Analytics 状态为 OPEN,并且可以从其下拉菜单中点击进入对应的 Log Analytics 查询界面。

使用 Log Analytics 进行日志分析


进入 Log Analytics 页面后,可以看到日志桶的列表。每个日志桶里,会有一个或多个日志表。比如下面的_Default 日志桶里,有_AllLogs 表和_Default 表。选中一个表,可以在右侧看到这个表的 Schema 表结构,了解有哪些字段,每个字段是什么数据类型。其中有一些字段是嵌入式字段,可以展开为下一级细分字段。这个表结构与日志桶里日志的 JSON 结构是相对应的。

在 Log Analytics 页面的上方,是 SQL 查询编辑框。

下面,我们通过一些示例来演示如何使用 SQL 对日志进行分析和统计。

请注意,Log Analytics 只能查询到日志存储桶升级完成后新增到桶里的日志,之前的日志不能用 SQL 查询,而只能在日志浏览器界面用查询表达式查询。

示例一 日志按类型统计数量

下面查询,将过去一小时内的 GKE 日志中的报错日志按照集群名字来分组统计并排序。

SELECT

JSON_VALUE(resource.labels.cluster_name) AS Cluster_Name, COUNT(*) AS Error_Total

FROM

`logs__Default_US._AllLogs`

WHERE

timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

AND resource.type='k8s_container'

AND severity='ERROR'

GROUP BY 1

ORDER BY 2 DESC

LIMIT 50

示例二 访问日志按状态码分组统计

下面查询,将一个时间段内的 HTTP 负载均衡访问日志按照返回状态码进行分组统计并排序。

SELECT

 http_request.status, COUNT(*)

FROM

 `logs__Default_US._AllLogs`

WHERE

 timestamp >= TIMESTAMP("2022-09-19 15:00:00", "Asia/Shanghai")

AND timestamp <= TIMESTAMP("2022-09-19 17:00:00", "Asia/Shanghai")

AND resource.type = 'http_load_balancer'

AND http_request IS NOT NULL

GROUP BY 1

ORDER BY 1

LIMIT 50

示例三 根据访问日志统计出向流量

下面查询,将一个时间段内所有 HTTP 负载均衡访问日志的响应字节数进行统计。

SELECT

 SUM(http_request.response_size) AS Egress

FROM

 `logs__Default_US._AllLogs`

WHERE

 timestamp >= TIMESTAMP("2022-09-19 15:00:00", "Asia/Shanghai")

AND timestamp <= TIMESTAMP("2022-09-19 17:00:00", "Asia/Shanghai")

AND resource.type = 'http_load_balancer'

AND http_request IS NOT NULL

LIMIT 50

使用 BigQuery 分析日志桶里的日志

如果有需要对日志桶里的数据做深入的 SQL 分析,并且联合查询 BigQuery 中的其它表,比如关于业务或者用户的维度表,可以基于日志存储桶创建 BigQuery 的链接数据集 Linked Dataset,之后再在 BigQuery 的查询界面或者 API 来查询分析日志。创建链接数据集并不会使日志数据从存储桶导入 BigQuery,因此不会有数据导出导入的费用和延时。

下面介绍如何打开这个功能并做示例查询。

首先在日志桶列表界面,选择要创建链接数据集的桶,并在菜单中选择编辑桶。


在编辑详情页中勾选 Create a linked dataset in BigQuery,并提供一个数据集名字。这个名字不能与已有的 BigQuery 数据集重合。

点击提交后,稍等一分钟然后刷新,可以看到日志桶的信息中新增了一个 BigQuery 数据集的访问链接。点击此链接,可以进入 BigQuery 页面对其进行查询分析。

下面的示例查询,将日志桶里的日志表与 BigQuery 中的一个恶意客户端表做 JOIN,使用已知恶意客户端的 IP 对日志进行筛选,并根据恶意客户端 IP 进行日志分组统计。

注意,日志桶创建的链接数据集的默认区域为 US,因此只能与同为 US 区域的数据集的表做 JOIN。

SELECT

 JSON_VALUE(json_payload.remoteIp) AS attacker_IP, COUNT(*) AS total

FROM

 `youzhi_lab_logs_default._AllLogs` AS t1 JOIN `youzhi-lab.helpdesk.bad_clients` AS t2

 ON JSON_VALUE(t1.json_payload.remoteIp) = t2.IP

WHERE

 timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)

 AND resource.type = 'http_load_balancer'

 AND http_request IS NOT NULL

GROUP BY 1

ORDER BY 2

LIMIT 50


相关推荐