如何用 Prometheus Operator 监控 K8s 集群外服务?

如何,prometheus,operator,监控,k8s,集群,服务 · 浏览次数 : 198

小编点评

## Prometheus Operator 监控 K8s 集群外服务方案概述 **方案一: prometheus spec** * 直接在 prometheus spec 中加入类似这样的静态配置: ```yaml 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** * 将服务映射到 DNS 名称,而不是典型的选择算符,例如 my-service 或者 cassandra。配置 Externalname Service: ```yaml 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 + Endpoint + ServiceMonitor** * 通过 Service + Endpoint 方式,明确将外部服务映射为内部 Service。举例如下: ```yaml kind: ServiceapiVersion: v1metadata: name: external-es-exporter labels: app: elasticsearch namespace: monitoringspec: type: ClusterIP ports: - name: metrics port: 9114 protocol: TCP targetPort: 9114 ``` **注意事项:** * 以上方案需要根据实际情况进行调整,例如需要设置证书、配置 HealthCheck 等。 * 选择合适的方案需要考虑监控粒度、耦合度、易用性等因素。

正文

前言

前面系列文章中:

介绍了 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/v1
kind: Prometheus
metadata:
  name: monitor-kube-prometheus-st-prometheus
spec:
  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: v1
kind: Service
metadata:
  name: gpu-metrics-svc
  namespace: monitoring
  labels:
    k8s-app: gpu-metrics
spec:
  type: ExternalName
  externalName: <gpu-machine-ip>
  clusterIP: ''
  ports:
    - name: metrics
      port: 9100
      protocol: TCP
      targetPort: 9100

配置指向该 Service 的 ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: gpu-metrics-sm
  labels:
    k8s-app: gpu-metrics
    prometheus: kube-prometheus
spec:
  selector:
    matchLabels:
      k8s-app: gpu-metrics
    namespaceSelector:
      matchNames:
        - monitoring
  endpoints:
    - port: metrics
      interval: 10s
      honorLabels: true

方案三: Service + Endpoint + ServiceMonitor

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

举例如下:

kind: Service
apiVersion: v1
metadata:
  name: external-es-exporter
  labels:
    app: elasticsearch
  namespace: monitoring
spec:
  type: ClusterIP
  ports:
    - name: metrics
      port: 9114
      protocol: TCP
      targetPort: 9114
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-log-es-exporter
  labels:
    app: elasticsearch
  namespace: monitoring
subsets:
  - 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/v1
kind: ServiceMonitor
metadata:
  name: elasticsearch
spec:
  selector:
    matchLabels:
      app: elasticsearch
    namespaceSelector:
      matchNames:
        - monitoring
    endpoints:
    - port: metrics
      path: /metrics
      interval: 30s       

这样虽然绕了一些, 但是可以保证, 修改组件 A 的监控的时候, 完全不会影响到组件 B 的配置; 另外, 也不会影响到 Prometheus 其他的监控.

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

🎉🎉🎉

📚️ 参考文档

本文由博客一文多发平台 OpenWrite 发布!

与如何用 Prometheus Operator 监控 K8s 集群外服务?相似的内容:

如何用 Prometheus Operator 监控 K8s 集群外服务?

前言 前面系列文章中: Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn) 监控 Kubernetes 集群证书过期时间的三种方案 - 东风微鸣技术博客 (ewhisper.cn) 介绍了 Prometheus

Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群

简介 系列文章: 标签 - Prometheus - 东风微鸣技术博客 (ewhisper.cn) Prometheus Operator 的上一篇: Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn) kub

Prometheus性能调优-什么是高基数问题以及如何解决?

背景 近期发现自己实验用的 Prometheus 性能出现瓶颈, 经常会出现如下告警: PrometheusMissingRuleEvaluations PrometheusRuleFailures 之后慢慢排查发现是由于 Prometheus 的某些 series 的高基数(High Cardin

[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置

kafka配置jmx_exporter 点击:https://github.com/prometheus/jmx_exporter,选择下面的jar包下载: 将下载好的这个agent jar包上传到kafka的broker节点所在服务器上,每个broker都需要,比如上传到如下路径: /opt/ag

如何精简 Prometheus 的指标和存储占用

前言 随着 Prometheus 监控的组件、数量、指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多。 在这种情况下,要优化 Prometheus 性能, 优化存储占用. 第一时间想到的可能是各种 Prometheus 的兼容存储方案, 如 Thanos 或 VM

如何精简 Prometheus 的指标和存储占用

前言 随着 Prometheus 监控的组件、数量、指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多。 在这种情况下,要优化 Prometheus 性能, 优化存储占用. 第一时间想到的可能是各种 Prometheus 的兼容存储方案, 如 Thanos 或 VM

strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

通过strimzi部署的kafka集群,如何部署prometheus+grafana去监控呢?官方文档信息量太大,即便照着做也可能失败,这里有一份详细的保姆级操作指南,助您成功部署监控服务

Prometheus 性能调优-水平分片

简介 之前笔者有连续 2 篇文章: Prometheus 性能调优 - 什么是高基数问题以及如何解决? 如何精简 Prometheus 的指标和存储占用 陆续介绍了一些 Prometheus 的性能调优技巧,包括高基数问题的解决以及精简 Prometheus 的指标和存储占用。 今天再介绍一个新的调

如何使用 Blackbox Exporter 监控 URL?

如何在 Kubernetes 中使用 Blackbox Exporter 与 Prometheus 进行 URL 监控采集、展示和告警。

使用prometheus来避免Kubernetes CPU Limits造成的事故

使用prometheus来避免Kubernetes CPU Limits造成的事故 译自:Using Prometheus to Avoid Disasters with Kubernetes CPU Limits 本文将介绍Kubernetes的resource limits是如何工作的、使用哪些