Kubernetes 中的 Prometheus 服务发现 - 抓取 LoadBalancer 入口标签

问题描述 投票:0回答:1

我在 Kubernetes 集群中使用 Prometheus Helm 图表来监控服务。但是,我无法让 Prometheus 发现或抓取 Kubernetes 服务的 LoadBalancer Ingress 字段。

这是服务的配置:

Name:                     postgres-xyz-postgresql-primary
Namespace:                xyz
Labels:                   app.kubernetes.io/component=primary
                      app.kubernetes.io/instance=postgres-app
                      app.kubernetes.io/managed-by=Helm
                      app.kubernetes.io/name=postgresql
                      app.kubernetes.io/version=17.0.0
                      helm.sh/chart=postgresql-16.0.1
Annotations:              meta.helm.sh/release-name: postgres-app
                      meta.helm.sh/release-namespace: xyz
Selector:                               app.kubernetes.io/component=primary,app.kubernetes.io/instance=postgres-   app,app.kubernetes.io/name=postgresql
Type:                     LoadBalancer
IP Family Policy:         SingleStack  
IP Families:              IPv4
IP:                       
IPs:                      
LoadBalancer Ingress:     aoo000nnbbgghhsdfg-182496858.us-east-1.elb.amazonaws.com
Port:                     tcp-postgresql  5432/TCP
 TargetPort:               tcp-postgresql/TCP
 NodePort:                 tcp-postgresql  32599/TCP
Endpoints:                10.0.91.92:5432
Session Affinity:         None
External Traffic Policy:  Cluster

在我的 Prometheus scrape 配置中,我使用以下作业进行服务发现:

- job_name: 'kubernetes-services'
  honor_labels: true

  metrics_path: /probe
  params:
    module: [http_2xx]

 kubernetes_sd_configs:
   - role: service

 relabel_configs:
   - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
     action: keep
     regex: true
   - source_labels: [__address__]
     target_label: __param_target
   - target_label: __address__
     replacement: blackbox
   - source_labels: [__param_target]
     target_label: instance
   - action: labelmap
     regex: __meta_kubernetes_service_label_(.+)
   - source_labels: [__meta_kubernetes_namespace]
     target_label: namespace
   - source_labels: [__meta_kubernetes_service_name]
     target_label: service

抓取作业似乎没有捕获 LoadBalancer Ingress 字段。

我尝试将以下内容添加到 relabel_configs 以将 LoadBalancer Ingress 映射到自定义标签 (loadbalancer_ingress):

- source_labels: [__meta_kubernetes_service_annotation_external_dns_hostname]
  target_label: loadbalancer_ingress

但是,这似乎没有捕获 LoadBalancer Ingress 值

问题:

  1. 如何修改 Prometheus relabel_configs 以包含用于抓取的 LoadBalancer Ingress 字段?

  2. kubernetes_sd_configs 中是否有映射到 LoadBalancer Ingress 字段的特定标签或字段?

  3. 我是否需要单独的配置来显式定位 LoadBalancer 服务?

附加信息:

Kubernetes版本:1.30 Prometheus Helm 图表版本:prometheus-26.0.0

任何解决此问题的帮助将不胜感激!

kubernetes prometheus kubernetes-helm amazon-eks
1个回答
0
投票
  1. 如何修改 Prometheus relabel_configs 以包含用于抓取的 LoadBalancer Ingress 字段?
  2. kubernetes_sd_configs 中是否有映射到 LoadBalancer Ingress 字段的特定标签或字段?

根据 Prometheus service sd config

LoadBalancer Ingress
不包含在 Prometheus 会抓取的元字段中,可以抓取的是
IP
字段。
我认为你也不能从 Ingress 资源中抓取地址。

我相信您想要做的是通过AWS的ELB主机名来区分指标?每次创建 Ingress 资源时都会生成 ELB 的主机名,因此无法设置硬代码。

也许使用 AWS Load Balancer Controller 的注释(例如服务上的

alb.ingress.kubernetes.io/load-balancer-name
或 Ingress 上的
alb.ingress.kubernetes.io/load-balancer-name
)并配置 Prometheus 来抓取该注释可能会更好?
您可以通过名称来识别 AWS 创建的负载均衡器,而不必担心 AWS 将为您生成哪个主机名。

© www.soinside.com 2019 - 2024. All rights reserved.