了解容器见解的监视成本

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

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

提示

有关降低 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

否则,大部分数据都属于 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 架构(预览版)

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