Prometheus
最开始设计是一个面向云原生应用程序的开源的监控&报警工具,在对 Kubernetes
服务发现协议分析之前,我们先来梳理下 Prometheus
如何接入云原生,实现对 Kubernetes
集群进行监控。
Kubernetes
云原生集群监控主要涉及到如下三类指标:node
物理节点指标、pod & container
容器资源指标和Kubernetes
云原生集群资源指标。针对这三类指标都有比较成熟的方案,见下图:
除了kube-state-metrics,node-exporter、cadvisor之外还有k8s集群的监控 kubernetes_sd_config ,至此四大组件已经完成
kubernetes_sd_config 是一种用于 Prometheus 目标发现的机制,是其中一种服务发现方式。它提供了与 Kubernetes 集成的能力,通过自动发现 Kubernetes 上运行的 Pod、Service、Node 等对象,并将其挂载到 Prometheus 的目标列表中,从而方便 Prometheus 进行采集和监控。
Prometheus 是一种流行的开源监控和告警工具,它可以对各种数据源进行采集和处理,并支持使用自定义的查询语言进行复杂指标的计算和分析。为了实现对 Kubernetes 集群的监控,需要使用 kubernetes_sd_config 去指导 Prometheus 进行目标发现。kubernetes_sd_config 可以通过配置 Kubernetes API 访问参数,从 Kubernetes 中获取对象元数据,然后结合特定的标签筛选规则过滤出符合要求的 targets,并将它们加入 Prometheus 的监控列表中。
通过 kubernetes_sd_config,可以轻松实现对 Kubernetes 集群各组件(如 API server、etcd、kubelet、kube-proxy 等)以及应用程序的监控,同时支持动态扩展和灵活配置。当有新的 Kubernetes 对象添加到集群中时,kubernetes_sd_config 会自动检测并将其加入到 Prometheus 的监控列表中,无需手动添加或修改配置文件,极大地减轻了管理员的工作负担。
这里举一个实际场景的例子,以帮助更好地理解 kubernetes_sd_config 和 kube-state-metrics 的应用。
假设有一个基于 Kubernetes 集群部署的微服务应用程序,由多个 Pod、Service、Deployment 和 ReplicaSet 等对象组成。为了对该应用程序进行监控和性能评估,可以使用 Prometheus、Grafana 和 Alertmanager 等工具来搭建完整的监控和告警系统。
在该环境中,kubernetes_sd_config 可以用于自动发现和监控 Kubernetes 的各个组件,如 API server、etcd、kubelet、kube-proxy 等。通过 kubernetes_sd_config 配置文件中定义的筛选规则,将符合条件的 targets 聚合到一个或多个 job 中,并为其绑定适当的 metrics 和 labels。
举例而言,我们可以使用以下配置文件(prometheus.yml)来定义一组监控目标:
Copy Codescrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- api_server: null
role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_kubelet_ready]
action: keep
regex: true
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- api_server: null
role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: replace
target_label: app
这个配置文件定义了两个 jobs,一个是监控 Kubernetes 集群中的 Node,另一个是监控 Pod。其中,kubernetes_sd_configs 部分指定了从 Kubernetes API 中发现 Node 和 Pod 的方式,relabel_configs 部分则定义了 labels 和 metrics 的映射关系。
而 kube-state-metrics 则可以用于自动发现和监控所有对象的状态指标,比如各个 Pod、Service、Deployment 和 ReplicaSet 的运行状态、健康状态、副本数、重启次数等。可以使用以下 manifest 文件来部署 kube-state-metrics:
Copy CodeapiVersion: apps/v1
kind: Deployment
metadata:
name: kube-state-metrics
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: kube-state-metrics
template:
metadata:
labels:
app: kube-state-metrics
spec:
containers:
- name: kube-state-metrics
image: quay.io/coreos/kube-state-metrics:v2.2.0
ports:
- containerPort: 8080
args:
- --metric-resolution=30s
这个部署文件定义了一个名为 kube-state-metrics 的 Deployment,并将它部署到 Kubernetes 集群的 kube-system 命名空间中。kube-state-metrics 容器的镜像是 quay.io/coreos/kube-state-metrics:v2.2.0,使用的端口号为 8080。args 部分则是指定了 kube-state-metrics 的参数,这里设置了 metric-resolution 参数为 30s,表示每 30 秒更新一次指标数据。
在完成 kubernetes_sd_config 和 kube-state-metrics 的配置和部署后,我们就可以使用 Prometheus 来采集和存储所有对象的监控数据,并通过 Grafana 实现可视化和展示。Alertmanager 则可以用于基于阈值或规则进行告警和通知,帮助管理员快速发现并解决异常情况。
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back 此页面的语言为中文(简体) 翻译为
- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语