了解容器见解的监视成本
本文提供容器见解的定价指导,从而帮助你了解如何:
- 为一个或多个容器启用容器见解之后度量成本。
- 控制数据收集并降低成本。
提示
有关降低 Azure Monitor 成本的策略,请参阅成本优化和 Azure Monitor。
Azure Monitor 定价模型主要基于 Log Analytics 工作区中每天引入的数据量(以 GB 为单位)。 Log Analytics 工作区的成本不仅基于收集的数据量,还取决于所选的计划,以及群集生成的数据的存储时间长短。
注意
请参阅估算 Azure Monitor 成本,以便在启用容器见解之前估算成本。
容器见解从 Kubernetes 群集收集的以下数据类型会影响成本,你可以根据使用情况对其进行自定义:
- Perf、Inventory、InsightsMetrics 和 KubeEvents 可以通过成本优化设置进行控制
- 来自群集中每个 Kubernetes 命名空间中的每个受监视容器的 stdout 和 stderr 容器日志(通过代理 ConfigMap)
- 来自群集中每个受监视容器的容器环境变量
- 群集中无需监视的已完成的 Kubernetes 作业/Pod
- Prometheus 指标的主动抓取
- Azure Kubernetes 服务 (AKS) 群集中 Kubernetes 主节点日志的资源日志收集,用于分析主要组件(例如
kube-apiserver
和kube-controller-manager
)生成的日志数据。
控制引入来降低成本
假设组织的不同业务部门共享 Kubernetes 基础结构和 Log Analytics 工作区。 各业务部门由 Kubernetes 命名空间分隔。 你可以使用“数据使用情况”runbook 可视化每个工作区中引入的数据量。 可从“报告”选项卡找到 runbook。
此工作簿可帮助你可视化数据源,而不必根据我们在文档中共享的内容生成自己的查询库。 在此工作簿中,可以查看显示计费数据的图表,例如:
- 按解决方案引入的总计费数据(以 GB 为单位)。
- 按容器日志(应用程序日志)引入的计费数据。
- 按 Kubernetes 命名空间引入的计费容器日志数据。
- 按群集名查看引入并分隔的计费容器日志数据。
- 按日志源条目引入的计费容器日志数据。
- 按诊断主节点日志引入的计费诊断数据。
若要了解如何管理工作簿的权限,请查看访问控制。
确定数据引入的根本原因
容器见解数据主要由指标计数器(Perf、Inventory、InsightsMetrics 和自定义指标)和日志 (ContainerLog) 组成。 根据群集使用情况和大小,可能有不同的要求和监视需求。
通过导航到“数据使用情况”工作簿的“按表”部分,可以查看容器见解的表大小明细。
如果大部分数据来自以下表格之一:
- 性能
- InsightsMetrics
- ContainerInventory
- ContainerNodeInventory
- KubeNodeInventory
- KubePodInventory
- KubePVInventory
- KubeServices
- KubeEvents
否则,大部分数据都属于 ContainerLog 表。 可以按照以下步骤来降低 ContainerLog 成本。
降低 ContainerLog 成本
完成分析,确定哪些源生成的数据超出要求后,可以重新配置数据收集。 有关配置 stdout、stderr 和环境变量收集的详细信息,请参阅配置代理数据收集设置。
以下示例说明了为帮助控制成本,可通过修改 ConfigMap 文件对群集应用哪些更改。
通过在拉取指标的 Azure 容器见解服务的 ConfigMap 文件中修改以下代码,在群集中的所有命名空间中禁用 stdout 日志:
[log_collection_settings] [log_collection_settings.stdout] enabled = false
禁用从开发命名空间收集 stderr 日志。 例如
dev-test
。 通过修改 ConfigMap 文件中的以下代码,继续从其他命名空间(例如prod
和default
)收集 stderr 日志:注意
kube-system 日志收集默认情况下处于禁用状态。 保留默认设置。 将
dev-test
命名空间添加到排除命名空间列表会应用于 stderr 日志收集。[log_collection_settings.stderr] enabled = true exclude_namespaces = ["kube-system", "dev-test"]
通过修改 ConfigMap 文件中的以下代码,禁用整个群集中的环境变量收集。 此修改适用于每个 Kubernetes 命名空间中的所有容器。
[log_collection_settings.env_var] enabled = false
若要清理已完成的任务,请在作业定义中指定清理策略。 下面是使用清理策略的示例作业定义。 有关更多详细信息,请参阅 Kubernetes 文档。
apiVersion: batch/v1 kind: Job metadata: name: pi-with-ttl spec: ttlSecondsAfterFinished: 100
将这些更改中的一项或多项应用于 ConfigMap 之后,使用命令 kubectl apply -f <config3. map_yaml_file.yaml>
将其应用到群集。 有关示例,请运行命令 kubectl apply -f container-azm-ms-agentconfig.yaml
以在默认编辑器中打开该文件,进行修改并保存。
配置基本日志
可以在 Log Analytics 工作区中的 ContainerLog 上节省数据引入成本(主要将其作为基本日志用于调试、故障排除和审核)。 有关详细信息(包括基本日志的限制),请参阅在 Azure Monitor 中配置基本日志。 ContainerLogV2 是容器见解使用的基本日志的配置版本。 ContainerLogV2 包含基于详细文本的日志记录。
必须位于 ContainerLogV2 架构上才能配置基本日志。 有关详细信息,请参阅启用 ContainerLogV2 架构(预览版)。
从 Kubernetes 群集收集的数据
指标数据
容器见解包含收集的一组预定义指标和清单项,这些指标和清单项作为日志数据写入到 Log Analytics 工作区中。 下表中的所有指标每分钟收集一次。
类型 | 指标 |
---|---|
节点指标 | cpuUsageNanoCores cpuCapacityNanoCores cpuAllocatableNanoCores memoryRssBytes memoryWorkingSetBytes memoryCapacityBytes memoryAllocatableBytes restartTimeEpoch used (磁盘)free (磁盘)used_percent (磁盘)io_time (diskio)writes (diskio)reads (diskio)write_bytes (diskio)write_time (diskio)iops_in_progress (diskio)read_bytes (diskio)read_time (diskio)err_in (net)err_out (net)bytes_recv (net)bytes_sent (net)Kubelet_docker_operations (kubelet) |
容器指标 | cpuUsageNanoCores cpuRequestNanoCores cpuLimitNanoCores memoryRssBytes memoryWorkingSetBytes memoryRequestBytes memoryLimitBytes restartTimeEpoch |
群集清单
下面列出了默认情况下收集的群集清单数据:
- KubePodInventory - 每个 pod 每分钟一次
- KubeNodeInventory - 每个节点每分钟一次
- KubeServices - 每个服务每分钟一次
- ContainerInventory - 每个容器每分钟一次
后续步骤
为了帮助你了解基于数据(通过容器见解收集)中的最新使用模式可能产生的成本,请参阅分析 Log Analytics 工作区中的使用情况。