【K8S系列】在 Kubernetes 中使用 Prometheus 进行监控的详细指南

在这里插入图片描述

Prometheus 是一个开源的监控和报警工具,广泛用于 Kubernetes 环境中。本文将深入探讨如何通过 Kubernetes
中的注解配置 Prometheus 的抓取设置,以高效监控服务,并确保系统的可靠性和可维护性。

一、Prometheus 简介

Prometheus 是一个功能强大的监控系统,具有以下主要特点:

  • 多维数据模型:使用时间序列数据,通过标签(labels)进行组织,支持高效查询。
  • 强大的查询语言:PromQL(Prometheus Query Language)允许用户灵活地查询和分析数据。
  • 简单的配置:通过 YAML 文件进行服务配置,易于管理和扩展。
  • 可视化集成:可以与 Grafana 等工具集成,创建丰富的监控仪表盘和报警系统。

二、Kubernetes 中的监控架构

在 Kubernetes 环境中,Prometheus 通过服务发现功能自动识别和监控运行的应用。监控的基本流程如下:

  1. 服务发现:Prometheus 自动识别集群中的服务和 Pod。
  2. 数据抓取:Prometheus 定期抓取应用暴露的监控数据。
  3. 数据存储:抓取的数据存储在时间序列数据库中,供后续查询。
  4. 查询与可视化:使用 PromQL 查询数据,并通过工具如 Grafana 创建可视化仪表盘。
  5. 报警机制:基于监控数据设置报警规则,及时发现和处理问题。

三、使用注解配置 Prometheus

在 Kubernetes 中,您可以通过在服务或 Pod 的 YAML 文件中添加特定的注解来配置 Prometheus 的抓取行为。以下是关键注解的详细说明:

1. prometheus.io/scrape

annotations:prometheus.io/scrape: "true"
  • 功能:此注解指示 Prometheus 应当抓取该服务的监控数据。
  • 默认值false,表示不抓取。
  • 重要性:通过将此值设置为 true,您明确告知 Prometheus 需要监控该服务。

2. prometheus.io/path

annotations:prometheus.io/path: "/actuator/prometheus"
  • 功能:指定服务上暴露监控数据的路径。
  • 应用场景:许多框架(如 Spring Boot)提供了专门的端点用于暴露监控数据。在此示例中,/actuator/prometheus 是 Spring Boot 应用中常用的路径。
  • 注意事项
    • 确保该路径在应用中正确配置,并且能够返回有效的监控数据。
    • 该路径通常返回格式化的 metrics 数据,Prometheus 可以直接解析。

3. prometheus.io/port

annotations:prometheus.io/port: "8080"
  • 功能:指定 Prometheus 应该用来抓取 metrics 的端口号。
  • 用途:如果应用监听的端口与默认的 HTTP 端口(80)不同,您需要通过此注解明确指定。例如,如果应用在 8080 端口上运行,Prometheus 将使用该端口抓取数据。

四、完整 YAML 示例

以下是一个完整的 Kubernetes Service YAML 文件示例,展示了如何配置上述注解,以便 Prometheus 可以监控该服务:

apiVersion: v1
kind: Service
metadata:name: my-app-serviceannotations:prometheus.io/scrape: "true"prometheus.io/path: "/actuator/prometheus"prometheus.io/port: "8080"
spec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 8080

解释

  • metadata.annotations:包含 Prometheus 的配置注解,指示服务应被监控,并提供数据的路径和端口。
  • spec:定义服务的规格,包括选择器和端口映射。
    • type:这里设置为 ClusterIP,表示该服务只能在集群内部访问。
    • selector:用于选择与该服务关联的 Pod。
    • ports:定义服务的端口映射,将外部访问的 80 端口映射到 Pod 的 8080 端口。

五、配置 Prometheus 进行抓取

在 Prometheus 的配置文件中,确保启用 Kubernetes 服务发现功能。以下是 Prometheus 配置的示例片段:

scrape_configs:- job_name: 'kubernetes-services'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true

解释

  • job_name:定义抓取任务的名称。
  • kubernetes_sd_configs:配置 Prometheus 进行 Kubernetes 服务发现,抓取指定的服务。
  • relabel_configs:通过正则表达式过滤服务,确保仅抓取带有 prometheus.io/scrape: "true" 注解的服务。

六、监控与可视化

一旦配置完成,Prometheus 将开始抓取指定服务的监控数据。您可以通过 Prometheus 的 Web 界面或 Grafana 创建可视化仪表盘,以便更直观地监控应用性能。

1. 使用 Prometheus Web 界面

  • 访问 Prometheus 的 Web 界面,通常在 http://<prometheus-server-ip>:9090
  • 通过 Targets 页签查看抓取目标,确认服务是否被正确抓取。

2. 使用 Grafana 创建仪表盘

  • 配置 Grafana 连接到 Prometheus 作为数据源。
  • 创建新的仪表盘,使用 PromQL 查询数据,并根据需要添加图表和面板。

七、报警机制

Prometheus 提供强大的报警功能。您可以基于监控数据设置报警规则,及时发现和处理问题。以下是一个报警规则的示例:

groups:
- name: example-alertsrules:- alert: HighErrorRateexpr: sum(rate(http_requests_total{status="500"}[5m])) by (service) > 0.05for: 5mlabels:severity: pageannotations:summary: "High error rate detected in {{ $labels.service }}"description: "Service {{ $labels.service }} is experiencing high error rates."

解释

  • alert:报警的名称。
  • expr:使用 PromQL 定义报警条件,这里监控 HTTP 500 错误率。
  • for:在条件满足的情况下持续多长时间后触发报警。
  • labelsannotations:提供报警的元数据和描述信息。

八、总结

通过在 Kubernetes 中使用 Prometheus 的注解配置,您可以轻松实现对服务的监控。注解 prometheus.io/scrapeprometheus.io/pathprometheus.io/port 使得 Prometheus 能够自动发现和抓取服务的监控数据。这种灵活的配置方式不仅提高了监控的可用性,还简化了整个监控流程。

在生产环境中,监控系统的建立是确保应用高可用性和性能的关键。通过 Prometheus 的强大功能,结合 Kubernetes 的灵活性,您可以构建出一个高效、可靠的监控体系,为您的微服务架构提供有力支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/487491.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页核心页面设计(第7章)

一、生态家居网页 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevi…

Unix、GNU、BSD 风格中 ps 参数的区别

注&#xff1a;本文为“不同风格中 ps 命令参数的区别”相关文章合辑。 未去重。 BSD 风格和 UNIX 风格中 ps 参数的区别 作者&#xff1a;Daniel Stori 译者&#xff1a;LCTT Name1e5s | 2017-06-17 10:53 One Last Question ps aux 以及 ps -elf 都是查看进程的方式&…

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档&#xff0c;不用写模板&#xff0c;直接导出即可。 第一种方法(简单版) 第一步&#xff1a;安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步&#xff1a;创建容器&#xff0c;页面使用方法&#xff08;简单版&#xff1…

【C++】map

map 可以看到&#xff0c;map也有map和multimap两种。 可以看到第一个参数Key是key&#xff0c;第二个T其实就是value。第三个参数可以看出只有Key参与比较&#xff0c;value不进行比较。 map的Key就是map底层关键字的类型&#xff0c;T是map底层value的类型&#xff0c;set默…

专题一:斐波那契数列模型算法

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是记忆化搜索&#xff0c;并且掌握记忆化搜索算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法&#xff08;朴素版&#xff09;2.2、Dijkstra算法&#xff08;堆优化版&#xff09;2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

Linux下mysql环境的搭建

1.mysql的下载 去MySQL官网下载mysql的linux压缩包 MySQL :: Download MySQL Community Server 如果下载慢请到网盘中自行下载 通过网盘分享的文件&#xff1a;mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.baidu.com/s/1vUJ-VuTwer1nLPT-haQCqw?pwd6342 提…

深入解析 Spring Security —— 打造高效安全的权限管理体系

目录 前言1. 初识 Spring Security1.1 Spring Security 的两大核心功能1.2 Spring Security 的主要特点 2. 配置 Spring Security2.1 配置类概述2.2 基础配置示例2.3 示例解析 3. Spring Security 的进阶功能3.1 自定义用户服务3.2 注解式权限控制3.3 动态权限控制 4. 实战应用…

Next.js 实战 (三):优雅的实现暗黑主题模式

前言 在 Next.js 中要实现暗黑模式&#xff0c;需要用到一个库&#xff1a;next-themes&#xff0c;它可以帮助我们很轻易地实现暗黑模式切换。 具体步骤 安装 next-themes 依赖&#xff1a; pnpm add next-themes新增 /components/ThemeProvider/index.tsx 文件&#xff1…

ubuntu下Qt5自动编译配置QtMqtt环境

原文链接&#xff1a;ubuntu下Qt5自动编译配置QtMqtt环境&#xff08;10&#xff09;-CSDN博客 19:57:10: 正在启动 "/usr/bin/make" install_docs -j16cd src/ && ( test -e Makefile || /opt/Qt5.14.2/5.14.2/gcc_64/bin/qmake -o Makefile /home/mhf/qtmq…

vscode明明已经安装好环境却报找不到包

背景&#xff1a; 首先确定相关的环境已切换已激活 在页面中相关的包也没有报错 但是&#xff0c;一运行就说xxx包找不到 解决&#xff1a; 删除原来的终端&#xff0c;先切换到别的环境中去&#xff0c;再切回来&#xff0c;再开一个新终端运行

FPGA实战篇(IP核之MMCM/PLL实验)

1.MMCM/PLL IP 核简介 锁相环作为一种反馈控制电路&#xff0c;其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪&#xff0c;所以锁相环通常用于闭环跟踪电路。 锁相环在工作的过程中&#xff0c;当…

基于单片机的农田智能驱鼠装置(论文+源码)

1总体设计 在基于单片机的农田智能驱鼠装置设计中&#xff0c;分为四个模块电源模块、感应模块、控制模块和音频模块。电源模块为整个系统提供5v的直流电源&#xff0c;支撑驱鼠器的整体运作。热释电红外感应模块用来感应鼠类的入侵。控制模块则采用STC89C52单片机编程进行时钟…

React路由react-router-dom鉴权以及网页标题

开源地址&#xff1a;GitHub - remix-run/react-router: Declarative routing for React react 路由有三种写法&#xff1a;传统组件法、useRoutes 法、data Router 法 官方推荐的写法是 data Router这里用 data Routerroute 的 handle 类似 vue-router 中的 metahandle 属性…

【Unity高级】如何动态调整物体透明度

本文介绍了如何设置及动态调整物体的透明度。 一、手动设置的方法 我们先来看下如何手动设置物体的透明度。 物体的透明与否是通过材质来设置的。只有我们把具有透明度的材质指给物体的渲染器&#xff08;Render&#xff09;&#xff0c;物体就被设置成相应的透明度了。 看一…

在Ubuntu 22.04上搭建Kubernetes集群

Kubernetes 简介 什么是 Kubernetes&#xff1f; Kubernetes&#xff08;常简称为 K8s&#xff09;是一个强大的开源平台&#xff0c;用于管理容器化应用程序的部署、扩展和运行。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff0…

安卓录屏软件添加隐藏按钮

again.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.an…

批量导出图片,按商品货号命名图片名-Excel易用宝

我们部门有这样一份商品信息表&#xff0c;包含着商品名称&#xff0c;货号和商品对应的图片&#xff0c;现在需要将这些商品图片导出&#xff0c;并且以对应的货号命名图片发给客户。 如果通过在图片上右键“另存为图片”&#xff0c;这样一张一张图片处理效率也太低了。 Exc…

关于SpringBoot项目创建后构建总是失败的问题

第一个问题&#xff1a;IDEA创建项目总是失败 原因&#xff1a;创建项目的时候默认使用的是https://start.spring.io&#xff0c;这个是一个外国网站&#xff0c;众所周知的就是国内访问总是出现不稳定的现象&#xff0c;这就是导致项目创建失败的最终原因。 解决方法&#x…