前言

后面系列文章中:

  • Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn)
  • 监控 Kubernetes 集群证书过期工夫的三种计划 - 东风微鸣技术博客 (ewhisper.cn)

介绍了 Prometheus Operator 相比 原生 Prometheus 的一些劣势, 其曾经被各大厂商和风行开源云组件宽泛采纳. 举荐应用.

然而实战中, 可能并不是所有组件都在 K8S 集群内, 如: LB、DB、全局DNS、云服务...

如何用 Prometheus Operator 监控它们? 这里有以下几种计划(算不上计划, 小技巧而已)

用 Prometheus Operator 监控 K8s 集群外服务计划

如上文, 这里的 K8s 集群外服务, 指的是一些如 LB、DB、全局DNS、云服务... 的动态服务.

针对此类服务, 有以下监控计划:

  1. 通过 Prometheus Operator CR - prometheus spec;

    1. 这种计划和 Prometheus 其余配置耦合性较高;
  2. 通过 external name Service + ServiceMonitor

    1. 这种计划有个前提, 即: 被监控的服务是域名;
  3. 通过 Service + Endpoint + ServiceMonitor

    1. 这种计划的适应性较强, 耦合性也较低. 举荐. ️
  4. 如果是 BlackboxProbe 类的监控, 即监控: Endpoint(HTTP/S、DNS、TCP、ICMP 和 grpc)的各种参数,包含 HTTP 响应工夫、DNS 查问提早、SSL 证书过期信息、TLS 版本等等。能够间接应用 Probe CR, 前文: 如何应用 Blackbox Exporter 监控 URL? - 东风微鸣技术博客 (ewhisper.cn) 曾经提过了, 本次就不再赘述.

计划一: prometheus spec

简而言之, 就是间接在 prometheus spec 中退出相似这样的动态配置(static_configs):

static_configs:  - targets:    - SERVICE-FQDN

具体配置示例如下:

apiVersion: monitoring.coreos.com/v1kind: Prometheusmetadata:  name: monitor-kube-prometheus-st-prometheusspec:  additionalScrapeConfigs:  - job_name: external    metrics_path: /metrics    static_configs:      - targets:        - <IP>:<PORT>

计划二: external name Service + ServiceMonitor

利用 Kubernetes 的 Externalname Serivce, 将服务映射到 DNS 名称, 而不是典型的抉择算符,例如 my-service 或者 cassandra。

配置 Externalname Service:

apiVersion: v1kind: Servicemetadata:  name: gpu-metrics-svc  namespace: monitoring  labels:    k8s-app: gpu-metricsspec:  type: ExternalName  externalName: <gpu-machine-ip>  clusterIP: ''  ports:    - name: metrics      port: 9100      protocol: TCP      targetPort: 9100

配置指向该 Service 的 ServiceMonitor:

apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: gpu-metrics-sm  labels:    k8s-app: gpu-metrics    prometheus: kube-prometheusspec:  selector:    matchLabels:      k8s-app: gpu-metrics    namespaceSelector:      matchNames:        - monitoring  endpoints:    - port: metrics      interval: 10s      honorLabels: true

计划三: Service + Endpoint + ServiceMonitor

通过 Service + Endpoint 形式, 明确将内部服务映射为外部 Service.

举例如下:

kind: ServiceapiVersion: v1metadata:  name: external-es-exporter  labels:    app: elasticsearch  namespace: monitoringspec:  type: ClusterIP  ports:    - name: metrics      port: 9114      protocol: TCP      targetPort: 9114---apiVersion: v1kind: Endpointsmetadata:  name: external-log-es-exporter  labels:    app: elasticsearch  namespace: monitoringsubsets:  - addresses:      - ip: <elasticsearch_ip_1>      - ip: <elasticsearch_ip_2>      - ip: <elasticsearch_ip_3>    ports:      - name: metrics        port: 9114        protocol: TCP

相似计划二, 再创立对应的 ServiceMonitor 即可:

apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: elasticsearchspec:  selector:    matchLabels:      app: elasticsearch    namespaceSelector:      matchNames:        - monitoring    endpoints:    - port: metrics      path: /metrics      interval: 30s       

这样尽管绕了一些, 然而能够保障, 批改组件 A 的监控的时候, 齐全不会影响到组件 B 的配置; 另外, 也不会影响到 Prometheus 其余的监控.

配置更准确;
粒度更细;
耦合度更低.

️ 参考文档

  • Scrape external service with FQDN · Issue #3204 · prometheus-operator/prometheus-operator (github.com)
  • kubernetes - How to monitor external service in prometheus-operator - Stack Overflow
  • Prometheus Operator — How to monitor an external service | by Ido Braunstain | DevOps College
  • Monitor external services with the prometheus operator | jpweber blog
  • prometheus operator scrape external target for HAProxy — xnum's blog
本文由博客一文多发平台 OpenWrite 公布!