如何用 Prometheus Operator 监控 K8s 集群外服务?
2022/12/2 4:25:00
本文主要是介绍如何用 Prometheus Operator 监控 K8s 集群外服务?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
前面系列文章中:
- 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
本文由东风微鸣技术博客 EWhisper.cn 编写!
这篇关于如何用 Prometheus Operator 监控 K8s 集群外服务?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在Kubernetes (k8s) 中搭建三台 Nginx 服务器怎么实现?-icode9专业技术文章分享
- 2024-11-05基于Kubernetes的自定义AWS云平台搭建指南
- 2024-11-05基于Kubernetes Gateway API的现代流量管理方案
- 2024-11-05在Kubernetes上部署你的第一个应用:Nginx服务器
- 2024-11-05利用拓扑感知路由控制Kubernetes中的流量
- 2024-11-05Kubernetes中的层次命名空间:更灵活的资源管理方案
- 2024-11-055分钟上手 Kubernetes:精简实用的 Kubectl 命令速查宝典!
- 2024-10-30K8s 容器的定向调度与亲和性
- 2024-10-28云原生周刊:K8s未来三大发展方向 丨2024.10.28
- 2024-10-25亚马逊弹性Kubernetes服务(EKS)实战:轻松搭建Kubernetes平台