前言
前面系列文章中:
- 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 -
prometheusspec;- 這種方案和 Prometheus 其他配置耦合性較高;
- 通過 external name
Service+ServiceMonitor- 這種方案有個前提, 即: 被監控的服務是域名;
- 通過
Service+Endpoint+ServiceMonitor- 這種方案的適應性較強, 耦合性也較低. 推薦. ???
- 如果是 BlackboxProbe 類的監控, 即監控: Endpoint(HTTP/S、DNS、TCP、ICMP 和 grpc)的各種引數,包括 HTTP 回應時間、DNS 查詢延遲、SSL 證書過期資訊、TLS 版本等等,可以直接使用
ProbeCR, 前文: 如何使用 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 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538844.html
標籤:其他
上一篇:企業網路“衛生”實用指南
