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

使用容器见解收集 Prometheus 指标

Prometheus 是常用的开源指标监视解决方案,是在监视 Kubernetes 群集时最常用的监视工具。 容器见解使用其容器化代理收集许多通常由 Prometheus 从群集中收集的数据,而无需 Prometheus 服务器。 此数据显示在容器见解视图中,可用于其他 Azure Monitor 功能,例如日志查询日志警报

容器见解还可以从群集中抓取 Prometheus 指标,并将数据发送到 Azure Monitor 日志或适用于 Prometheus 的 Azure Monitor 托管服务。 这需要通过导出程序或 Pod 公开 Prometheus 指标终结点,然后为容器见解使用的 Azure Monitor 代理配置其中一个加载项,如下图所示。

将 Prometheus 指标发送到 Azure Monitor 日志的容器监视体系结构示意图。

将数据发送到适用于 Prometheus 的 Azure Monitor 托管服务

适用于 Prometheus 的 Azure Monitor 托管服务是完全托管的 Prometheus 兼容服务,该服务支持行业标准功能,例如 PromQL、Grafana 仪表板和 Prometheus 警报。 这需要为 Azure Monitor 代理配置指标加载项,从而将数据发送到 Prometheus。

注意

用于为托管 Prometheus 收集 Prometheus 指标的指标加载项目前仅支持 AKS 群集,不能用作已启用 Arc 的 Kubernetes 扩展。 若要从运行自管理 Prometheus 的 Kubernetes 群集收集 Prometheus 指标,建议查看托管 Prometheus 的远程写入功能

提示

无需启用容器见解来配置 AKS 群集即可将数据发送到托管 Prometheus。 有关如何在不启用容器见解的情况下配置群集的详细信息,请参阅从 AKS 群集收集 Prometheus 指标(预览版)

使用以下过程将 Promtheus 集合添加到已使用容器见解的群集。

  1. 在 Azure 门户中打开“Kubernetes 服务”菜单,然后选择 AKS 群集。

  2. 单击“见解”。

  3. 单击“Monitor 设置”。

    用于监视 AKS 群集设置的按钮的屏幕截图。

  4. 单击“启用 Prometheus 指标”复选框,然后选择 Azure Monitor 工作区。

  5. 若要将收集的指标发送到 Grafana,请选择 Grafana 工作区。 有关创建 Grafana 工作区的详细信息,请参阅创建 Azure 托管 Grafana 实例

    AKS 群集的 monitor 设置的屏幕截图。

  6. 单击“配置”以完成配置。

有关验证部署限制的详细信息,请参阅从 AKS 集群收集 Prometheus 指标(预览版)

将指标发送到 Azure Monitor 日志

除了容器见解收集的预定义数据集外,你可能还希望收集其他数据。 此数据不用于容器见解视图,但可用于日志查询和警报,就像收集的其他数据一样。 这需要为 Azure Monitor 代理配置“监视加载项”,这是容器见解当前用于将数据发送到 Log Analytics 工作区的加载项。

Prometheus 擦除设置

从以下两个角度之一执行从 Prometheus 主动擦除指标的操作:

  • 群集范围:在 ConfigMap 部分 [Prometheus data_collection_settings.cluster] 中定义。
  • 节点范围:在 ConfigMap 部分 [Prometheus_data_collection_settings.node] 中定义。
终结点 范围 示例
Pod 批注 群集范围 prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Kubernetes 服务 群集范围 http://my-service-dns.my-namespace:9100/metrics
https://metrics-server.kube-system.svc.cluster.local/metrics
URL/终结点 单节点和/或群集范围 http://myurl:9101/metrics

指定 URL 后,容器见解仅抓取此终结点。 指定 Kubernetes 服务后,将使用群集 DNS 服务器来解析服务名称以获取 IP 地址。 然后抓取已解析的服务。

范围 密钥 数据类型 描述
群集范围 指定以下三种方法中的任何一种,以擦除指标的终结点。
urls String 逗号分隔的数组 HTTP 终结点(指定的 IP 地址或有效的 URL 路径)。 例如:urls=[$NODE_IP/metrics]。 ($NODE_IP 是特定的容器见解参数,可用于代替节点 IP 地址。必须全部大写。)
kubernetes_services String 逗号分隔的数组 用于从 kube-state-metrics 擦除指标的 Kubernetes 服务数组。 必须在此处使用完全限定的域名。 例如 kubernetes_services = ["https://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics]
monitor_kubernetes_pods 布尔 true 或 false 如果在群集范围设置中将此项设置为 true,则容器见解代理将在整个群集中抓取以下 Prometheus 批注的 Kubernetes pod:
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape 布尔 true 或 false 启用 Pod 的抓取,并且 monitor_kubernetes_pods 必须设置为 true
prometheus.io/scheme 字符串 http 或 https 默认为通过 HTTP 抓取。 必要时设置为 https
prometheus.io/path String 逗号分隔的数组 要从中提取指标的 HTTP 资源路径。 如果指标路径不是 /metrics,请使用此批注定义它。
prometheus.io/port 字符串 9102 指定要从其擦除的端口。 如果未设置端口,则默认为 9102。
monitor_kubernetes_pods_namespaces String 逗号分隔的数组 一个允许列表,其中的命名空间可以从 Kubernetes Pod 抓取指标。
例如 monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"]
节点范围 urls String 逗号分隔的数组 HTTP 终结点(指定的 IP 地址或有效的 URL 路径)。 例如:urls=[$NODE_IP/metrics]。 ($NODE_IP 是特定的容器见解参数,可用于代替节点 IP 地址。必须全部大写。)
节点范围或群集范围 interval 字符串 60s 收集间隔默认为 1 分钟(60 秒)。 可将 [prometheus_data_collection_settings.node] 和/或 [prometheus_data_collection_settings.cluster] 的收集间隔设置为 s、m 和 h 等时间单位。
节点范围或群集范围 fieldpass
fielddrop
String 逗号分隔的数组 可以通过设置允许 (fieldpass) 和禁止 (fielddrop) 列表,来指定要从终结点收集或不收集的特定指标。 必须先设置允许列表。

配置 ConfigMaps

执行以下步骤,为群集配置 ConfigMap 配置文件。 ConfigMap 是一个全局列表,只能将一个 ConfigMap 应用到代理。 不能使用推翻收集规则的其他 ConfigMap。

  1. 下载模板 ConfigMap YAML 文件,并将其另存为 container-azm-ms-agentconfig.yaml。 如果你已将 ConfigMap 部署到群集,但想要使用较新的配置更新 ConfigMap,可以编辑以前用过的 ConfigMap 文件。

  2. 编辑 ConfigMap YAML 文件,以添加用于抓取 Prometheus 指标的自定义设置。

    若要在群集范围内收集 Kubernetes 服务,请使用以下示例来配置 ConfigMap 文件:

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. 运行以下 kubectl 命令:kubectl apply -f <configmap_yaml_file.yaml>

    示例:kubectl apply -f container-azm-ms-agentconfig.yaml

配置更改可能需要几分钟才能完成,然后才会生效。 必须手动重启所有 Azure Monitor 代理 Pod。 重启完成后,系统会显示包含结果 configmap "container-azm-ms-agentconfig" created 的消息,如下所示。

验证配置

若要验证配置是否已成功应用于群集,请使用以下命令查看代理 Pod 的日志:kubectl logs ama-logs-fdf58 -n=kube-system

如果 Azure Monitor Agent 代理 Pod 存在配置错误,输出中会显示类似于以下示例的错误:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

还可以查看有关应用配置更改的错误。 以下选项可用于对配置更改和 Prometheus 指标抓取执行其他故障排除:

  • 使用同一个 kubectl logs 命令从代理 Pod 日志。

  • 从实时数据(预览版) 实时数据(预览版)日志显示类似于以下示例的错误:

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • 从 Log Analytics 工作区中的 KubeMonAgentEvents 表。 对于严重性为“警告”的抓取错误和严重性为“错误”的配置错误,数据每小时发送一次。 如果没有错误,表中的条目将包含严重性为“信息”的数据,这些数据不会报告错误。 Tags 属性包含有关发生错误的 Pod 和容器 ID 的详细信息、第一次发生错误的 Pod 和容器 ID、最后一次发生错误的 Pod 和容器 ID 以及最后一小时内的错误计数。

  • 对于 Azure Red Hat OpenShift v3.x 和 v4.x,请通过搜索 ContainerLog 表来检查 Azure Monitor 代理日志,以验证是否已启用 openshift-azure-logging 日志收集。

错误阻止了 Azure Monitor 代理分析文件,导致其重启并使用默认配置。 更正除 Azure Red Hat OpenShift v3.x 之外的群集上的 ConfigMap 中的错误后,保存 YAML 文件,并运行命令 kubectl apply -f <configmap_yaml_file.yaml 来应用已更新的 ConfigMap。

对于 Azure Red Hat OpenShift v3.x,请运行命令 oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging 编辑并保存已更新的 ConfigMaps。

查询 Prometheus 指标数据

要查看 Azure Monitor 抓取的 Prometheus 指标和代理报告的任何配置/抓取错误,请查看查询 Prometheus 指标数据

在 Grafana 中查看 Prometheus 指标

容器见解支持在 Grafana 仪表板中查看 Log Analytics 工作区中存储的指标。 我们提供了一个模板,可以从 Grafana 的仪表板存储库下载。 使用该模板开始并参考它来帮助你了解如何从受监视群集中查询其它数据,以在自定义 Grafana 仪表板中可视化。

后续步骤