Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s 1.31 一站式部署监控服务后 ,如何精简采集指标?

k8s 1.31 一站式部署监控服务后 ,如何精简采集指标?

作者头像
希里安
发布于 2025-03-31 11:05:16
发布于 2025-03-31 11:05:16
11700
代码可运行
举报
文章被收录于专栏:希里安希里安
运行总次数:0
代码可运行

近日见闻

转眼间,10月已经悄然过去,距离上次与大家分享见闻的时光又过了一月有余。不知各位读者近来可好?愿你们都能好好照顾自己。

国庆假期,大家的选择都不尽相同,有的人选择外出旅行,去探亲访友,有的人则在家中享受宁静。而我则回了一趟老家,去看望爷爷奶奶,奶奶的身体欠佳,近来常住院。今年倒是因为这个原因,回家乡的次数是外出打工这几年里最多的。愈发意识到,踏入三十岁这个门槛后,不得不接受身边长辈逐渐老去的事实,而自己身心状态也无法像二十几岁时那般肆无忌惮了。

往年的长假,只要回到家乡,总是和朋友们聚在一起,去欣赏辽阔的戈壁滩、眺望连绵起伏的祁连山,或只是徜徉在一条清澈的小溪边。享受着当地鲜美的牛羊肉,搭配一口生蒜,再与好友畅聊聊外面的世界,高兴处将杯中的青稞酒一饮而尽,那时的快乐,真的是年轻时特有的滋味。

而这次回去那几天,几乎奔波于市县里的医院,心中祈祷着一切顺利,短暂几天后又回来打工干活,继续忙碌。有时候想想,这工作到底没有个头,而人生中的许多重要时刻,往往都是在短暂的假期中完成的,因此,那些时光显得格外珍贵,令人难以忘怀。

上次发文时,有读者留言表示对我技术文章不甚感兴趣,却对读书分享充满期待。这让我思索良久,与其单一地写技术文章,不如开设一个新栏目,如此不仅能保持公众号的专一性,也为读书分享提供一个归宿。我希望将自己读过的那些触动心灵的作品分享给大家,激发大家的阅读热情。即使现在忙碌无暇,也可以透过我的文字了解书中的大意,待有闲暇时再细细品味,欢迎大家关注我的新栏目。

技术分享

因为有一段时间没有写文章,所以对于业界新闻的了解收集就没有多少,就不在这里复制粘贴了,不过顺带推荐下国内外技术新闻网站,感兴趣的读者朋友们可以关注下:

https://www.itnews.com.au/

https://www.oschina.net/

Helm一站式部署k8s监控服务

Kubernetes 监控领域,一个备受欢迎的 Helm Chart 名为 kube-prometheus-stack,它能够同时部署 PrometheusGrafana 及其他相关监控组件。该Helm Chart由 prometheus-community 维护,为用户提供了完整的Kubernetes 监控解决方案。

详细的安装方法在我之前的这一篇文章《k8s-1.30.1版本一站式部署监控服务》,今天,我将重点分享如何在完成安装后,仅采集所需的指标,以减少资源消耗并提升监控系统的效率。

项目地址https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

chart包地址https://github.com/prometheus-community/helm-charts/

k8s版本:v1.31.0

Helm chart版本:kube-prometheus-stack-65.5.1

promrtheus:v2.55.0

grafana:11.2.2

为什么要精简指标?

在默认配置下,kube-prometheus-stack 会采集大量指标,而并非所有指标都是用户所需的。通过精简指标,可以显著减少 Prometheus 的存储负担和查询开销,从而提升系统性能。

前提条件

  • 一个 K8s 集群
  • 一个prometheus实例

如何精简指标?

这里我们思考下,一般精简指标应该怎么做?我们可以通过以下几种方式来精简 Prometheus 的指标采集:

  • 配置 Prometheus 的抓取规则:在定义 scrape_configs 时,可以使用 metric_relabel_configs 来过滤不需要的指标。
  • 配置 Exporter:如 Node Exporter 或者 cAdvisor,可以通过命令行参数来启用或禁用特定的收集器。
  • 开发应用程序:通过 Prometheus 客户端库选择性地导出所需指标,避免导出不必要的指标。

本文将重点介绍如何通过配置抓取规则精简指标。

常用组件指标概览

cadvisor

通常由 Kubernetes 的 Kubelet 集成,用于收集节点上运行的所有容器的资源使用情况,如 CPU、内存、文件系统和网络等。指标可以直接被 Prometheus 抓取和存储。

kube-proxy

kube-proxy 维护节点上的网络规则,允许 Kubernetes 服务之间的网络通信。监控 kube-proxy 的指标可以帮助了解服务间流量的行为和网络性能。

kube-scheduler

负责监控未调度的 Pod,并为其分配运行的节点。它的指标通常用于监控调度延迟、调度成功率等。

kubelet

它与 kube-apiserver 通信,并确保容器在 Pod 中运行。监控 kubelet 可以提供关于节点状态、Pod 生命周期管理以及资源使用的详细信息。

kube-apiserver

kube-apiserver 是 Kubernetes 控制平面的中心组件,处理所有 REST API 请求。监控它可以提供关于 API 请求速率、延迟和错误率的信息。

kube-state-metrics

这是一个用于生成关于 Kubernetes 集群状态的指标的服务。如 Deployment 的副本计数、Pod 的状态等。

kube-controller-manager

这是 Kubernetes 的一个核心组件,负责运行控制循环以实现集群的期望状态。监控它可以帮助理解控制器的性能和功能,如节点控制器、副本控制器等。

Node-exporter

node-exporter 是 Prometheus 官方提供的工具,用于公开机器级别的硬件和操作系统指标。它通常用于监控节点的 CPU、内存、磁盘 I/O 和其他系统级指标。

配置示例

以下是配置示例,展示如何为不同组件设置抓取规则及指标过滤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kube-state-metrics:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: kube_pod_container_info
      

kubelet:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: kubelet_running_container_count
    - sourceLabels: ["__name__"]
      regex: container_cpu_usage_seconds_total

node-exporter:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: node_filesystem_files_free
      

kubeControllerManager:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: rest_client_request_duration_seconds_bucket

kubeApiServer:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: apiserver_current_inflight_requests
      

kubeScheduler:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: process_cpu_seconds_total

kubeProxy:
  serviceMonitor:
    interval: 30s
    metricRelabelings:
    - sourceLabels: ["__name__"]
      regex: rest_client_requests_total
      action: keep

解释配置项

可以发现,主要是加了这四行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
metricRelabelings: 
    - sourceLabels: ["__name__"] # 要检测的label名称,__name__ 表示指标名称,也可以是任意这个点所带的label
      regex: kube_node_info|kube_node_role # 上述label是否满足这个正则,在这里,我们希望__name__满足kube_node_info或kube_node_role
      action:  keep # 如果点满足上述条件,则保留,否则就自动抛弃

sourceLabels: 这是一个列表,用于指定应该从哪些标签中获取值进行匹配。["name"] 表示使用指标的名称作为匹配源。name 是一个内置标签,用于指代指标的完整名称。

regex: 这个是正则表达式,用于匹配 sourceLabels 中组合后的值。

action: 这个参数意思是在匹配成功后执行的操作。keep 表示保持这些匹配到的指标,而将未匹配的指标丢弃。 drop(丢弃匹配项)、replace(替换标签值)、labeldrop(删除标签)等。

以上配置为您提供了精简指标的整体思路与实践示例,可以根据自身需求采集自己想监控的指标。快去实践吧,打造属于自己的个性化监控面板!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验