监视和查询 Azure Kubernetes 服务 (AKS) apiserver 请求

本文介绍如何使用 Azure 诊断kube-apiserver 组件的用户和应用程序活动生成的 kube-audit 事件启用日志记录。 写入 Kubernetes 审核后端的审核事件将被收集并转发到 Log Analytics 工作区,你可以在工作区中将这些事件与现有日志数据集成到查询、警报和可视化效果中。

开始之前

收集 Kubernetes 审核日志

默认情况下,由于 Azure 管理 AKS 控制平面,AKS 群集上默认不启用 Kubernetes 审核日志记录。 你可以使用创建诊断设置一文中描述的多种方法之一来为群集资源创建诊断设置。 配置诊断设置时,请指定以下选项:

  • 要路由的日志和指标:对于日志,请选择“Kubernetes 审核”类别以发送到稍后指定的目标。
  • 目标详细信息:选中“Log Analytics”复选框。

注意

启用 kube-audit 日志后,可能会产生大量开销。 请考虑在不需要 kube-audit 日志记录时禁用它。 若要大幅减少日志数并帮助降低成本,另一种方法是启用从 kube-audit-admin 收集,不包括获取和列出审核事件。 有关降低 Azure Monitor 成本的策略,请参阅成本优化和 Azure Monitor

几分钟后,新设置将出现在此资源的设置列表中。 生成新的事件数据时,日志会流式传输到指定目标。 发出事件后可能需要长达 15 分钟的时间,该事件才会出现在 Log Analytics 工作区中。

创建诊断设置以收集 kube-audit 事件后,可以从 AzureDiagnostics 表中查询数据。

查询 apiserver 请求

从一两个示例开始生成查询,然后修改它们以适应需求的做法通常很有用。 可使用以下示例查询进行试验,帮助生成更高级的查询。

let starttime = datetime("2023-02-23");
let endtime = datetime("2023-02-24");
AzureDiagnostics
| where TimeGenerated between(starttime..endtime)
| where Category == "kube-audit"
| extend event = parse_json(log_s)
| extend HttpMethod = tostring(event.verb)
| extend User = tostring(event.user.username)
| extend Apiserver = pod_s
| extend SourceIP = tostring(event.sourceIPs[0])
| project TimeGenerated, Category, HttpMethod, User, Apiserver, SourceIP, OperationName, event

后续步骤

有关 AKS 指标、日志和其他重要值的详细信息,请参阅监视 AKS 数据参考