你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

了解容器见解的监视成本

本文提供容器见解的定价指导,从而帮助你了解如何:

  • 为一个或多个容器启用容器见解之后度量成本。
  • 控制数据收集并降低成本。

提示

有关降低 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-apiserverkube-controller-manager)生成的日志数据。

控制引入来降低成本

假设组织的不同业务部门共享 Kubernetes 基础结构和 Log Analytics 工作区。 各业务部门由 Kubernetes 命名空间分隔。 你可以使用“数据使用情况”runbook 可视化每个工作区中引入的数据量。 可从“报告”选项卡找到 runbook。

Screenshot that shows the View Workbooks dropdown list.

此工作簿可帮助你可视化数据源,而不必根据我们在文档中共享的内容生成自己的查询库。 在此工作簿中,可以查看显示计费数据的图表,例如:

  • 按解决方案引入的总计费数据(以 GB 为单位)。
  • 按容器日志(应用程序日志)引入的计费数据。
  • 按 Kubernetes 命名空间引入的计费容器日志数据。
  • 按群集名查看引入并分隔的计费容器日志数据。
  • 按日志源条目引入的计费容器日志数据。
  • 按诊断主节点日志引入的计费诊断数据。

Screenshot that shows the Data Usage workbook.

若要了解如何管理工作簿的权限,请查看访问控制

确定数据引入的根本原因

容器见解数据主要由指标计数器(Perf、Inventory、InsightsMetrics 和自定义指标)和日志 (ContainerLog) 组成。 根据群集使用情况和大小,可能有不同的要求和监视需求。

通过导航到“数据使用情况”工作簿的“按表”部分,可以查看容器见解的表大小明细。

Screenshot that shows the By Table breakdown in Data Usage workbook.

如果大部分数据来自以下表格之一:

  • 性能
  • InsightsMetrics
  • ContainerInventory
  • ContainerNodeInventory
  • KubeNodeInventory
  • KubePodInventory
  • KubePVInventory
  • KubeServices
  • KubeEvents

可以通过使用成本优化设置和/或迁移到 Prometheus 指标插件来调整引入

否则,大部分数据都属于 ContainerLog 表。 可以按照以下步骤来降低 ContainerLog 成本。

降低 ContainerLog 成本

完成分析,确定哪些源生成的数据超出要求后,可以重新配置数据收集。 有关配置 stdout、stderr 和环境变量收集的详细信息,请参阅配置代理数据收集设置

以下示例说明了为帮助控制成本,可通过修改 ConfigMap 文件对群集应用哪些更改。

  1. 通过在拉取指标的 Azure 容器见解服务的 ConfigMap 文件中修改以下代码,在群集中的所有命名空间中禁用 stdout 日志:

    [log_collection_settings]       
       [log_collection_settings.stdout]          
          enabled = false
    
  2. 禁用从开发命名空间收集 stderr 日志。 例如 dev-test。 通过修改 ConfigMap 文件中的以下代码,继续从其他命名空间(例如 proddefault)收集 stderr 日志:

    注意

    kube-system 日志收集默认情况下处于禁用状态。 保留默认设置。 将 dev-test 命名空间添加到排除命名空间列表会应用于 stderr 日志收集。

    [log_collection_settings.stderr]          
       enabled = true          
          exclude_namespaces = ["kube-system", "dev-test"]
    
  3. 通过修改 ConfigMap 文件中的以下代码,禁用整个群集中的环境变量收集。 此修改适用于每个 Kubernetes 命名空间中的所有容器。

    [log_collection_settings.env_var]
        enabled = false
    
  4. 若要清理已完成的任务,请在作业定义中指定清理策略。 下面是使用清理策略的示例作业定义。 有关更多详细信息,请参阅 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 架构(预览版)

Prometheus 指标抓取

如果在 Log Analytics 工作区中收集 Prometheus 指标,请确保限制从群集收集的指标数:

  • 确保以最佳方式设置抓取频率。 默认值为 60 秒。 可以将频率提高到 15 秒,但必须确保抓取的指标以该频率发布。 否则,系统会抓取许多重复指标并每隔一段时间发送到 Log Analytics 工作区,这样不仅会增加数据引入和保留成本,用处也不大。
  • 容器见解支持按指标名称分类的排除列表和包含列表。 例如,如果要抓取群集中的 kubedns 指标,默认情况下可能会抓取数百个指标。 但你很可能仅对指标的子集感兴趣。 确认你指定了要抓取的指标列表,或者除了少数指标外,排除其他指标以节省数据引入量。 启用抓取但不使用其中许多指标(它们只会给 Log Analytics 帐单增加费用),这一点很容易做到。
  • 抓取 Pod 注释时,确保按命名空间进行筛选,以便从不使用的命名空间中排除 Pod 指标抓取。 例如 dev-test 命名空间。

从 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 工作区中的使用情况