我正在使用Prometheus监视我的Kubernetes集群。我在单独的命名空间中设置了Prometheus。我有多个名称空间,并且有多个Pod正在运行。每个容器容器在此端点:80/data/metrics
处公开自定义指标。我正在获取Pods的CPU,内存指标等,但是如何配置Prometheus从每个可用的Pod中的:80/data/metrics
中提取数据?我已使用本教程来设置Prometheus,Link
答案 0 :(得分:1)
您必须将这三个注释添加到您的广告连播中:
prometheus.io/scrape: 'true'
prometheus.io/path: '/data/metrics'
prometheus.io/port: '80'
它将如何工作?
查看您用于配置Prometheus的kubernetes-pods
的{{1}}作业,
config-map.yaml
检查这三个重新标记配置
- 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: $1:$2
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: $1:$2
target_label: __address__
和__metrics_path__
,以及是否从该容器中删除指标。
有关如何配置Prometheus的更多详细信息,请参见here。
答案 1 :(得分:0)
问题中提供的link指的是this ConfigMap的Prometheus配置。如果使用了ConfigMap,则prometheus已配置为scrape pods。
对于该配置(请参见relabel_configs
),以使Prometheus抓取Pod在:80/data/metrics
处公开的自定义指标,请将这些注释添加到Pod部署配置中:
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/data/metrics'
prometheus.io/port: '80'
有关在https
上抓取更多内容的设置,请参见Prometheus文档(向下滚动)中的configuration options for Kubernetes发现。
编辑:
我张贴我的消息后才看到Emruz Hossain的回答。他的答案目前缺少prometheus.io/scrape: 'true'
批注,并指定了=
而不是:
作为批注的名称/值分隔符,这在yaml或json中无效。