使用 Prometheus 监控自定义 kubernetes pod 指标

Monitor custom kubernetes pod metrics using Prometheus

我正在使用 Prometheus 监控我的 Kubernetes 集群。我在单独的命名空间中设置了 Prometheus。我有多个命名空间,多个 pods 是 运行。每个 pod 容器在此端点公开一个自定义指标 :80/data/metrics 。我正在获取 Pods CPU、内存指标等,但是如何配置 Prometheus 以从每个可用 pod 中的 :80/data/metrics 中提取数据?我已经使用本教程设置了 Prometheus,Link

您必须将这三个注释添加到您的 pods:

prometheus.io/scrape: 'true'
prometheus.io/path: '/data/metrics'
prometheus.io/port: '80'

它将如何运作?

查看您用来配置 prometheus 的 config-map.yamlkubernetes-pods 作业,

- job_name: 'kubernetes-pods'

        kubernetes_sd_configs:
        - role: pod

        relabel_configs:
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: :
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: kubernetes_pod_name

检查这三个重新标记配置

- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: :
    target_label: __address__

此处,__metrics_path__port 以及是否从该 pod 废弃指标正在从 pod 注释中读取。

有关如何配置 Prometheus 的更多详细信息,请参阅 here

link provided in the question refers to this ConfigMap for the prometheus configuration. It that ConfigMap is used then prometheus is already configured to scrape pods.

对于该配置(请参阅 relabel_configs)让 prometheus 抓取 pods 在 :80/data/metrics 公开的自定义指标,将这些注释添加到 pods 部署配置:

metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/data/metrics'
    prometheus.io/port: '80'

请参阅普罗米修斯文档(向下滚动)中的 Kubernetes 发现 configuration options,了解与抓取 https 等相关的设置。

编辑: 只有在我发布我的帖子后,我才看到 Emruz Hossain 的回答。他的回答目前缺少 prometheus.io/scrape: 'true' 注释并指定 = 而不是 : 作为注释的 name/value 分隔符,这在 yaml 或 json.[=19= 中无效]