OpenShift中Prometheus抓取SpringBoot与MicroProfile指标的正确配置方法
问题原因
当前两个Prometheus抓取任务均基于Kubernetes Endpoints角色做全量目标发现,未对应用类型做筛选,导致Prometheus会使用MicroProfile的指标路径请求SpringBoot服务、使用SpringBoot的指标路径请求MicroProfile服务,最终在两类应用侧持续产生404无效请求告警。
配置方案
核心思路是给两类服务添加可区分的标识标签,再通过Prometheus的relabel_configs规则为每个抓取任务过滤出匹配类型的目标,从根源上避免错误路径的请求。
步骤1:给工作负载添加类型标签
分别为两类应用对应的Service资源添加区分标签(标签会自动关联到对应的Endpoints资源,可被Prometheus服务发现读取):
- 所有Eclipse MicroProfile应用对应的Service添加标签:
app-type: microprofile - 所有SpringBoot应用对应的Service添加标签:
app-type: springboot
如果你的标签是直接打在Pod上而非Service上,后续配置中替换对应的元数据标签字段即可。
步骤2:修改Prometheus抓取配置
在两个原有抓取任务中添加重标记规则,仅保留匹配对应类型、端口为9443的抓取目标:
Eclipse MicroProfile 抓取配置
- job_name: 'microprofile-metric' scrape_interval: 1m metrics_path: /metrics scheme: https bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true kubernetes_sd_configs: - role: endpoints relabel_configs: # 仅保留打了app-type=microprofile标签的服务目标 - source_labels: [__meta_kubernetes_service_label_app_type] regex: microprofile action: keep # 仅抓取9443端口的端点,排除其他端口的干扰 - source_labels: [__meta_kubernetes_endpoint_port_number] regex: 9443 action: keep
SpringBoot 抓取配置
- job_name: 'springboot-metric' scrape_interval: 1m metrics_path: /actuator/prometheus scheme: https bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true kubernetes_sd_configs: - role: endpoints relabel_configs: # 仅保留打了app-type=springboot标签的服务目标 - source_labels: [__meta_kubernetes_service_label_app_type] regex: springboot action: keep # 仅抓取9443端口的端点,排除其他端口的干扰 - source_labels: [__meta_kubernetes_endpoint_port_number] regex: 9443 action: keep
补充说明
- 如果你将类型标签打在Pod资源上,将上述配置中
__meta_kubernetes_service_label_app_type替换为__meta_kubernetes_pod_label_app_type即可。 - 配置生效后,Prometheus只会向对应类型的服务发送匹配路径的抓取请求,应用侧不会再出现无效404请求的告警日志。
内容的提问来源于stack exchange,提问作者funtoos
相关产品推荐
相关产品推荐

