首页/新闻资讯/正文详情

kube-prometheus 监控附加命名空间:通过 jsonnet 扩展 Prometheus 抓取范围与 ServiceMonitor 实战指南

发布时间:2026/9/27 7:31:40 来源:云帆数科 栏目:资讯中心
kube-prometheus 监控附加命名空间:通过 jsonnet 扩展 Prometheus 抓取范围与 ServiceMonitor 实战指南
云原生可观测性指标监控监控大盘告警【免费下载链接】kube-prometheusUse Prometheus to monitor Kubernetes and applications running on Kubernetes项目地址https://gitcode.com/gh_mirrors/ku/kube-prometheus点击查看免费下载导读在默认部署中kube-prometheus 的 Prometheus 服务仅具备在default、kube-system以及监控栈自身所在命名空间由$.values.namespace指定内发现与抓取目标的能力这是由 Prometheus 服务账号所绑定的命名空间级 RBAC 权限决定的。本文基于 docs/customizations/monitoring-additional-namespaces.md 的定制指南讲解如何通过 jsonnet 向$.values.prometheus.namespaces追加目标命名空间从而让 Prometheus 自动生成对应命名空间的 Role/RoleBinding 并完成服务发现随后介绍如何在同一 jsonnet spec 中定义 ServiceMonitor 资源将命名空间内的应用服务纳入抓取。读完本文你将掌握一套完整的、与 kube-prometheus 原生工具链一致的多命名空间监控扩展方案。为什么默认只能监控三个命名空间RBAC 是抓取的前提Prometheus 在 Kubernetes 上通过 ServiceMonitor / PodMonitor 等自定义资源发现目标时实际上依赖 Prometheus Operator 内部的 Kubernetes 服务发现kubernetes_sd机制——它需要调用 Kubernetes API 去枚举Service、Pod、EndpointSlice或Endpoints与Ingress。因此Prometheus 服务账号必须拥有对应命名空间内这些资源的get、list、watch权限否则即使存在 ServiceMonitor 也无法抓取到任何目标。这一点可以在源码中得到直接印证。在 jsonnet/kube-prometheus/components/prometheus.libsonnet#L13 中默认的命名空间列表被定义为namespaces:: [default, kube-system, defaults.namespace],defaults.namespace即用户通过$.values.namespace配置的监控栈部署命名空间默认为monitoring。紧接着同一文件中基于该列表生成了两类命名空间级 RBAC 对象roleSpecificNamespacesprometheus.libsonnet#L276-L319为列表中的每个命名空间各生成一个Role其规则覆盖endpointslices或endpoints取决于serviceDiscoveryRole配置、services、pods与ingresses的get/list/watch权限roleBindingSpecificNamespacesprometheus.libsonnet#L184-L206为每个命名空间生成对应的RoleBinding将 Prometheus 的 ServiceAccount位于监控栈命名空间与上述Role绑定。因此默认部署下你会在集群中看到三个Role/RoleBinding组合。以仓库自带的渲染产物 manifests/prometheus-roleSpecificNamespaces.yaml 和 manifests/prometheus-roleBindingSpecificNamespaces.yaml 为例其中分别为default、kube-system、monitoring三个命名空间各生成了一份Role与RoleBindingRole 规则中包含endpointslices、services、pods、ingresses的get/list/watch权限RoleBinding 的 subject 则是位于monitoring命名空间下的prometheus-k8sServiceAccount。注意Role与RoleBinding都是命名空间级资源必须成对出现在目标命名空间内。仅仅在目标命名空间放置 ServiceMonitor 而不授予 Prometheus 对应权限目标将永远处于 Down / 不可发现状态。第一步向$.values.prometheus.namespaces追加目标命名空间要将额外的命名空间纳入监控范围只需在 jsonnet spec 中通过合并操作符向prometheus.namespaces追加命名空间名称。完整的可运行示例见 examples/additional-namespaces.jsonnetlocal kp (import kube-prometheus/main.libsonnet) { values:: { common: { namespace: monitoring, }, prometheus: { namespaces: [my-namespace, my-second-namespace], }, }, }; { [00namespace- name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } { [0prometheus-operator- name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } { [node-exporter- name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } { [kube-state-metrics- name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } { [alertmanager- name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } { [prometheus- name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } { [grafana- name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }需要理解的关键点是namespaces: [my-namespace, my-second-namespace]使用的是:合并操作符而不是::覆盖。:会在默认列表[default, kube-system, monitoring]的基础上追加新命名空间而::则会整体替换默认列表这正是 examples/all-namespaces.jsonnet 中配合全命名空间插件使用namespaces: []清空列表的原因。如果你确实需要替换默认列表应使用::。追加列表后jsonnet 渲染阶段会自动为my-namespace、my-second-namespace各生成一份Role与RoleBinding生成的逻辑与前述roleSpecificNamespaces/roleBindingSpecificNamespaces完全一致因此无需手工编写这些 RBAC 清单。若监控栈部署命名空间不是monitoring请同步修改common.namespace使整个 jsonnet 生成结果自洽。补充监控所有命名空间的替代方案如果你希望省去逐个维护命名空间列表的成本仓库提供了all-namespacesaddonjsonnet/kube-prometheus/addons/all-namespaces.libsonnet。它会直接向 Prometheus 的clusterRole追加endpointslices、services、endpoints、pods、ingresses的get/list/watch权限并将roleBindingSpecificNamespaces与roleSpecificNamespaces置为null——因为集群级 Role 已覆盖所有命名空间无需再生成命名空间级 RBAC。使用方式见 examples/all-namespaces.jsonnetlocal kp (import kube-prometheus/main.libsonnet) (import kube-prometheus/addons/all-namespaces.libsonnet) { values:: { common: { namespace: monitoring, }, prometheus: { namespaces: [], }, }, };该方案以提升权限为代价换取免维护适合对安全隔离要求不高的测试环境生产环境建议按需使用本文第一部分介绍的精确命名空间追加方式。第二步为每个附加命名空间定义 ServiceMonitor仅完成 RBAC 扩展还不足以让 Prometheus 开始抓取。还需要为目标命名空间内的服务定义 ServiceMonitor 资源——它是 Prometheus Operator 用于描述抓取哪些端点、以何种指标路径抓取的声明式配置。官方指南强调通常应由命名空间的属主应用团队自行维护各自命名空间内的 ServiceMonitor。但如果你希望与集群监控基础设施使用同一套 jsonnet 工具链生成可以在自己的 jsonnet spec 中直接声明 ServiceMonitor。完整示例见 examples/additional-namespaces-servicemonitor.jsonnetlocal kp (import kube-prometheus/main.libsonnet) { values:: { common: { namespace: monitoring, }, prometheus:: { namespaces: [my-namespace, my-second-namespace], }, }, exampleApplication: { serviceMonitorMyNamespace: { apiVersion: monitoring.coreos.com/v1, kind: ServiceMonitor, metadata: { name: my-servicemonitor, namespace: my-namespace, }, spec: { jobLabel: app, endpoints: [ { port: http-metrics, }, ], selector: { matchLabels: { app.kubernetes.io/name: myapp, }, }, }, }, }, }; { [00namespace- name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } { [0prometheus-operator- name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } { [node-exporter- name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } { [kube-state-metrics- name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } { [alertmanager- name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } { [prometheus- name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } { [grafana- name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } { [example-application- name]: kp.exampleApplication[name] for name in std.objectFields(kp.exampleApplication) }该示例与第一步相比仅多了两点改动新增了一个名为exampleApplication的顶层对象用于承载用户自定义的 ServiceMonitor 等应用级资源文件末尾的生成列表中追加了{ [example-application- name]: kp.exampleApplication[name] for name in std.objectFields(kp.exampleApplication) }确保自定义对象也能被渲染成独立的 YAML 文件输出。ServiceMonitor 字段解读与实战参数说明对照示例中的 ServiceMonitor各字段的作用如下字段取值示例说明metadata.namemy-servicemonitorServiceMonitor 资源的名称用于在集群内唯一标识metadata.namespacemy-namespace必须与目标服务所在的命名空间一致且该命名空间必须在第一步的namespaces列表中spec.jobLabelapp指定使用目标 Service 的哪个标签值作为抓取任务的job标签示例中对应 Service 上的app: myapp标签spec.endpoints[].porthttp-metrics指定抓取目标 Service 的哪个端口按端口名匹配不是端口号spec.selector.matchLabelsapp.kubernetes.io/name: myapp通过标签选择器匹配目标 ServicePrometheus 将发现所有带该标签的 Service 的端点被监控 Service 必须带正确的标签示例的selector使用app.kubernetes.io/name: myapp匹配目标 Service而jobLabel: app又要求目标 Service 带有app标签作为 job 名。因此目标 Service 上必须同时存在app: myapp与app.kubernetes.io/name: myapp这两类标签否则 ServiceMonitor 无法选中它抓取也就不会发生。官方文档的原话是确保你的 Service 资源带有正确的标签例如app: myapp因为 Prometheus 依赖 Kubernetes 标签在命名空间内发现资源。作为参考仓库自带的示例应用 examples/example-app/example-app.yaml 中Service 的 selector 与 Deployment 的 Pod 标签都使用了app.kubernetes.io/name: example-app端口命名为webport: 8080、targetPort: web这与 ServiceMonitor 的endpoints[].port按端口名匹配的机制是严格对应的——配置 ServiceMonitor 前务必确认你的 Service 暴露了与endpoints[].port一致的具名端口。验证与故障排查要点应用上述 jsonnet 配置并渲染部署后可以从以下几个层面验证结果RBAC 是否生效确认目标命名空间内已生成prometheus-k8s的Role与RoleBindingkubectl get role,rolebinding -n my-namespace其规则应包含endpointslices/services/pods/ingresses的get/list/watch权限ServiceMonitor 是否被 Operator 接受kubectl get servicemonitor -n my-namespace并检查 Prometheus Operator 日志中是否存在因标签不匹配或 RBAC 缺失导致的报错目标是否出现在 Prometheus 中通过 Prometheus UI 的 Status → Targets 页面查看my-namespace下的目标及其健康状态或在 Prometheus 中执行up{namespacemy-namespace}查询确认。小结扩展 kube-prometheus 的监控范围是一个两步走的过程第一步通过$.values.prometheus.namespaces:追加目标命名空间让 jsonnet 自动生成命名空间级Role/RoleBinding解决 Prometheus 的服务发现权限问题第二步为每个目标命名空间内的服务定义ServiceMonitor并确保 Service 具备匹配的标签与具名端口解决抓什么、从哪个端点抓的问题。两者缺一不可且都以 jsonnet 为单一事实来源与 kube-prometheus 的声明式渲染工具链保持一致。需要更深入的背景知识时可结合 monitoring-other-namespaces.md、monitoring-all-namespaces.md 以及 customizing.md 进一步阅读。赞分享云原生可观测性指标监控监控大盘告警【免费下载链接】kube-prometheusUse Prometheus to monitor Kubernetes and applications running on Kubernetes项目地址https://gitcode.com/gh_mirrors/ku/kube-prometheus点击查看免费下载相关推荐kube-prometheus自定义ServiceMonitor监控特定命名空间应用kube prometheus自定义ServiceMonitor监控特定命名空间应用 1. 痛点与挑战Kubernetes多命名空间监控困境 在复杂的Kub云原生可观测性指标监控监控大盘告警Loop 窗口管理从入门到快捷键定制一次讲透Loop 窗口管理从入门到快捷键定制一次讲透 macOS 桌面上同时开着十几个窗口时最磨人的往往不是写代码而是拖窗口想摆成一半屏得拖到边缘再目测、来回云原生可观测性指标监控监控大盘告警kube-prometheus 全命名空间监控指南使用 all-namespaces mixin 监控集群所有命名空间kube prometheus 全命名空间监控指南使用 all namespaces mixin 监控集群所有命名空间 本指南基于 kube promethe云原生可观测性指标监控监控大盘告警上一篇解锁索尼相机隐藏功能Sony-PMCA-RE逆向工程工具完全指南下一篇告别千篇一律用system24打造专属Discord终端风格界面创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Longhorn 定时快照清理:snapshot-delete 与 snapshot-cleanup 任务类型实战指南
Longhorn 定时快照清理:snapshot-delete 与 snapshot-cleanup 任务类型实战指南

云原生存储高可用容器编排 【免费下载链接】longhorn Cloud-Native distributed storage built on and for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/lo/longhorn 点击查看 免费下载 导读 Longhorn 的 RecurringJob(定时任务)… · 2026/9/27 7:31:40

Linux系统管理工具supervisor使用详解!
Linux系统管理工具supervisor使用详解!

supervisor是一个进程管理工具,当进程中断的时候supervisor能自动重新启动它,同时,它也是一个客户端/服务器系统,允许用户在类unix操作系统上控制多个进程。supervisor是用Python开发的一套通用的进程管理程序,能将一个… · 2026/9/27 7:31:34

MySQL复杂查询与Union操作
MySQL复杂查询与Union操作

在日常开发中,数据查询是数据库操作的核心部分,尤其是在处理多表数据时,单一的查询方式无法满足业务的复杂需求。因此,掌握复杂查询技术变得至关重要。 本教程将介绍如何使用UNION操作进行多表数据合并查询,并通过CASE语句实现条件选择。通过对这些技巧的学习,可以轻松处… · 2026/9/27 7:31:34

AI爬虫抓不到网页怎么办?从robots.txt到SSR的完整排查与配置指南
AI爬虫抓不到网页怎么办?从robots.txt到SSR的完整排查与配置指南

你的网站在Google里能搜到,但用户在ChatGPT、Perplexity里问同样的问题,答案里从来没有你。打开服务器日志一看,GPTBot的请求记录是零。这不是内容质量问题,而是AI爬虫根本没读到你的页面,或者读了之后发现什么都没有。… · 2026/9/27 8:14:58

搞懂公司网站建设需要的材料,别再被坑了
搞懂公司网站建设需要的材料,别再被坑了

搞懂公司网站建设需要的材料,别再被坑了 很多老板一上来就问建站报价,结果做出来的网站丑得像90年代网吧主页。模板网站太丑不够用,更别提转化了。别急着比价,先看看你手里有没有这些“硬通货”。 1. 公司核心资料清单:别只给个Logo… · 2026/9/27 8:14:34

open-pencil 工具栏响应式分页状态:useToolbarState 源码解析与实战
open-pencil 工具栏响应式分页状态:useToolbarState 源码解析与实战

前端桌面应用AI 应用MCP 服务 【免费下载链接】open-pencil AI-native design editor. Open-source Figma alternative. 项目地址: https://gitcode.com/gh_mirrors/op/open-pencil 点击查看 免费下载 useToolbarState 是 open-pencil(AI-native 设计编… · 2026/9/27 8:14:28

TradingAgents-CN 部署指南:三条命令拉起一套多智能体股票分析平台
TradingAgents-CN 部署指南:三条命令拉起一套多智能体股票分析平台

TradingAgents-CN 部署指南:三条命令拉起一套多智能体股票分析平台 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 本文讲解 Trading… · 2026/9/27 8:14:21

大模型推理网关的会话粘滞与全局负载均衡实战
大模型推理网关的会话粘滞与全局负载均衡实战

大模型推理网关的会话粘滞与全局负载均衡实战在大语言模型(LLM)多轮长对话、智能体(AI Agents)协同交互以及复杂代码生成助手的生产应用中,用户与大模型之间的交互呈现出强烈的 “长会话上下文依赖(Multi-T… · 2026/9/27 8:14:21

使用 AWS Device Farm 浏览器测试特性在 CI 中运行 Selenium 测试:PyTest 实战指南
使用 AWS Device Farm 浏览器测试特性在 CI 中运行 Selenium 测试:PyTest 实战指南

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/27 8:14:21

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码