我在 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 值
问题:
如何修改 Prometheus relabel_configs 以包含用于抓取的 LoadBalancer Ingress 字段?
kubernetes_sd_configs 中是否有映射到 LoadBalancer Ingress 字段的特定标签或字段?
我是否需要单独的配置来显式定位 LoadBalancer 服务?
附加信息:
Kubernetes版本:1.30 Prometheus Helm 图表版本:prometheus-26.0.0
任何解决此问题的帮助将不胜感激!
- 如何修改 Prometheus relabel_configs 以包含用于抓取的 LoadBalancer Ingress 字段?
- kubernetes_sd_configs 中是否有映射到 LoadBalancer Ingress 字段的特定标签或字段?
根据 Prometheus service sd config,
LoadBalancer Ingress
不包含在 Prometheus 会抓取的元字段中,可以抓取的是 IP
字段。我相信您想要做的是通过AWS的ELB主机名来区分指标?每次创建 Ingress 资源时都会生成 ELB 的主机名,因此无法设置硬代码。
也许使用 AWS Load Balancer Controller 的注释(例如服务上的
alb.ingress.kubernetes.io/load-balancer-name
或 Ingress 上的 alb.ingress.kubernetes.io/load-balancer-name
)并配置 Prometheus 来抓取该注释可能会更好?