前言
后面系列文章中:
- 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、云服务 … 的动态服务.
针对此类服务, 有以下监控计划:
-
通过 Prometheus Operator CR –
prometheus
spec;- 这种计划和 Prometheus 其余配置耦合性较高;
-
通过 external name
Service
+ServiceMonitor
- 这种计划有个前提, 即: 被监控的服务是域名;
-
通过
Service
+Endpoint
+ServiceMonitor
- 这种计划的适应性较强, 耦合性也较低. 举荐. 👍️
- 如果是 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 其余的监控.
配置更准确;
粒度更细;
耦合度更低.
🎉🎉🎉
📚️ 参考文档
- 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 公布!