Prometheus 薪资翻倍的监控系统?

news2024/11/18 2:28:48

1. 介绍与架构

Prometheus是一个开源的系统监控和警报工具包,用于收集和存储时间序列数据,包括指标信息、记录时间戳以及可选的键值对标签。许多公司使用Prometheus监控K8s集群。

2. 合适与不合适场景

合适场景

Prometheus适用于记录各种数字时间序列,既适用于以机器为中心的监控,也适用于监控高度动态的面向服务的架构。在微服务环境中,其对多维数据收集和查询的支持是特别优势。设计用于可靠性,在中断期间仍可使用,能够快速诊断问题。每个Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。在基础设施的其他部分受损时,可以依赖Prometheus,而无需设置大量基础设施即可使用。

不合适场景

如果需要100%准确性,例如按请求计费时,Prometheus可能不太适合。在这种情况下,最好使用其他系统来收集和分析数据以进行计费。

3. 数据模型

由于监控数量庞大,Prometheus采用了时间序列数据存储,即带有时间戳和值的数据。

3.1 Prometheus本地存储:

  Prometheus的本地存储被称为Prometheus TSDB(时间序列数据库)。TSDB的设计核心包括两个主要部分:block和WAL。

  • Block:TSDB将监控数据按时间划分为blocks。每个block包含chunk、index、meta.json和tombstones。Block的大小并不固定,按照设定的步长倍数递增。随着数据量的增长,TSDB会将小的blocks合并成大的blocks,以减少数据存储和内存中的block数量,方便进行索引。每个block都有全局唯一的名称,通过ULID(Universally Unique Lexicographically Sortable Identifier)原理生成,使得可以通过文件名确定block的创建时间,方便按时间排序。
  • WAL(Write-Ahead Logging):为了防止丢失暂存在内存中但尚未写入磁盘的监控数据,Prometheus引入了WAL机制。WAL是一种关系型数据库中利用日志实现事务性和持久性的技术。在Prometheus中,WAL用于记录周期性采集的监控数据,先保存到磁盘中。在TSDB宕机重启后,多协程会读取WAL,从而恢复之前的状态。

3.2 Prometheus 数据模型:

  Prometheus将监控数据存储为时间序列,包括标签(键值对)、时间戳和最终的值。表示法如下:

<metric_name>[{<label_1=“value_1”>,<label_N=“value_N”>}]<datapoint_numercial_value>

4. 指标

4.1 Counter

  Counter是指Prometheus实例接收的数据包总数。该指标一直在增加,用于计量累计事件的次数。

4.2 Gauge

  Gauge是一种测量指标,它在收集时对给定的测量进行快照,并可以增加或减少。例如,温度、磁盘空间、内存使用量等都可以使用Gauge进行测量。

4.3 Histogram

Histogram常用于观察某时间段内的百分比或请求数量。一个Histogram包含合并的值,用于描述事件的分布。

5. 指标的摘要和聚合

5.1 指标摘要

单个指标对于我们来说价值较小,通常需要联合并可视化多个指标。这涉及一些数学变换,例如统计函数应用于指标或指标组。常见函数包括计数、求和、平均值、中位数、百分位数、标准差、变化率等。

5.2 指标聚合

指标聚合提供了来自多个源的指标的综合视图,使得整体系统状态更加清晰可见。

6. NodeExporter部署

Prometheus使用exporter工具来暴露主机和应用程序上的指标。NodeExporter是一种用于暴露主机相关指标的工具,有多种类型的exporter可供选择。

7. cAdvisor监控Docker容器

cAdvisor(Container Advisor)是由谷歌开发的项目,用于收集、聚合、分析和导出运行中容器的数据。该工具提供丰富的数据,涵盖从内存限制到GPU指标等几乎所有可能需要的内容。cAdvisor通过容器守护进程和Linux cgroups收集数据,与Docker容器的发现透明且完全自动化。除了以Prometheus格式公开指标外,cAdvisor还提供了一个有用的Web界面,可视化展示主机及其容器的状态。

8. 捕获目标生命周期

  1. 服务发现:识别和发现要监控的目标。
  2. 配置:为发现的目标设置配置。
  3. 重新标记(relable_configs):调整标签和配置以更好地对齐。
  4. 抓取:从目标获取指标。
  5. 指标重新标记(metrics_relable_configs):进一步调整抓取的指标的标签。

9. PromQL查询语言

9.1 选择器和标签匹配器:

选择器

  • 标签匹配器和度量名称的组合。
  • 用于处理成千上万的时间序列,通过匹配标签选择合适的时间序列。
  • 返回即时或范围向量。

示例:

$ prometheus_build_info{version="2.17.0"}

标签匹配器

  • 用于将查询限制为特定一组标签值。
  • 操作符:=、!=、=~ 和 !~。

范围、偏移、子查询

  • 范围向量:使用即时向量选择器并使用[]定义范围向量查询。
  • 偏移修饰符:查询过去的数据,相对于当前时间的时间段。
  • 子查询:类似于 MySQL 的子查询。

PromQL操作符

  • 向量匹配:one-to-one、many-to-one、one-to-many【类似于MySQL的左右外连接】。

PromQL函数

  • label_join() 和 label_replace():操作标签,允许连接、提取和删除标签。
  • predict_linear():可以基于线性回归预测时间序列在 t 秒后的值。
  • rate() 和 irate():计算时间序列数据的变化速率。
  • sort() 和 sort_desc():用于排序结果。

10. 计算CPU使用率

示例:avg(irate(node_cpu_seconds_total{job=“node”}[5m] by (instance) * 100))

11. 计算CPU负载(饱和度)

要监控CPU饱和度,跟踪平均负载是一种方法。公式将1分钟负载与CPU数量的两倍进行比较。

示例:

promQLCopy codenode_load1 > on (instance) 2 * count by (instance)(node_cpu_seconds_total{mode="idle"})

12. 计算内存使用率

使用Node Exporter的内存指标可计算内存使用百分比。

示例:

promQLCopy code(总内存 - 可用内存 - 缓冲 - 缓存)/ 总内存 * 100

13. 计算内存饱和度

通过检查读写活动来监控内存饱和度。使用 node_vmstat_pswpin和 node_vmstat_pswpout指标。

示例:

promQLCopy code1024 * sum by (instance) ((rate(node_vmstat_pswpin[1m]) + rate(node_vmstat_pswpout[1m])))

14. 磁盘使用率

仅测量磁盘空间使用情况而不是速率、饱和度或错误。这是因为在大多数情况下,这是最有用的可视化和警报数据。

示例:

promQLCopy code(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100

根据特定挂载点进行自定义:

promQLCopy code(node_filesystem_size_bytes{mountpoint="/data"} - node_filesystem_free_bytes{mountpoint="/data"}) / node_filesystem_size_bytes{mountpoint="/data"} * 100

15.预测磁盘空间耗尽

预测磁盘空间是否在未来四小时内耗尽。

示例:

promQLCopy codepredict_linear(node_filesystem_free_bytes{mountpoint="/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web系统架构基于springCloud的各技术栈

博主目前开发的web系统架构是基于springCloud的一套微服务架构。 使用的技术栈&#xff1a;springbootmysqlclickhousepostgresqlredisrocketMqosseurekabase-gatewayapollodockernginxvue的一套web架构。 一、springboot3.0 特性&#xff1a;Spring Boot 3.0提供了许多新特性…

每日一题——LeetCode1313.解压缩编码列表

这么简单的题目要说的这么复杂 nums里每相邻的两个元素nums[i]、nums[j]为一对&#xff0c;nums[i]表示nums[j]的次数 var decompressRLElist function(nums) {let res[]for(let i0,j1;j<nums.length-1;i2,j2){while(nums[i]--){res.push(nums[j])}}return res }; 消耗时…

代码随想录 Leetcode107. 二叉树的层序遍历 II

题目&#xff1a; 代码&#xff08;首刷自解 2024年1月24日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res {};if(root nullptr) return res;queue<TreeNode…

第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式

第11次修改了可删除可持久保存的前端html备忘录&#xff1a;将样式分离&#xff0c;可以自由秒添加秒删除样式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…

Cesium for Unity包无法加载

太上老君急急如律⚡令⚡ &#x1f959;关闭UnityHub&#x1f9c0;启动梯子&#x1f96a;cmd 启动UnityHub &#x1f959;关闭UnityHub &#x1f9c0;启动梯子 &#x1f96a;cmd 启动UnityHub 把批处理启动文件&#x1f448;中的exe的路径换成自己的安装目录&#xff01;保存…

使用Electron打包vue文件变成exe应用程序

文章目录 一、下载Electron二、修改下载的Electron项目1.修改index.html文件2.修改main.js文件3.修改package.json文件 三、修改vue项目1.修改vite.config.js文件2.修改.env.production文件3.修改auth.js文件4.修改router下得index.js文件6.修改Navbar.vue文件 四、Electron打包…

ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types

异常类型详解 Exception types 一&#xff0c; 什么是异常二&#xff0c;同步异常&#xff08;synchronous exceptions&#xff09;2.1 无效的指令和陷阱异常&#xff08;Invalid instructions and trap exceptions&#xff09;2.2 内存访问产生的异常2.3 产生异常的指令2.4 调…

Type-c一分二C+L/C+C同时快充数据线方案

一分二快充线是一种具有同时快充功能的线缆&#xff0c;可以实现同时给两个设备充电&#xff0c;并且都能达到快充的效果。那么&#xff0c;一分二快充线是如何实现同时快充功能的呢&#xff1f; 首先&#xff0c;一分二快充线采用了一种高效能的充电芯片LDR6020&#xff0c;这…

文件上传技术总结

语言可解析的后缀 &#xff08;前提&#xff1a;在Apache httpd.conf 配置文件中有特殊语言的配置 AddHandler application/x-httpd-php .php 搭配大小写、双重、空格来进行 其中&#xff1a; phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀 常见的…

Web开发4:单元测试

在Web开发中&#xff0c;单元测试是一种重要的开发实践&#xff0c;它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;减少错误和缺陷&#xff0c;并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…

Markdown 数学公式详细总结

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a;开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f4…

二分搜索树(Java)

完整代码在最后 树结构&#xff1a; 1.树结构本身是一种天然的组织结构 2.高效 二分搜索树的基础 1、二叉树 1.和链表一样&#xff1a;动态存储 2.具有唯一的根 3.每个结点最多只有2个孩子&#xff0c;每个结点最多只有一个父亲 4.具有天然的递归结构 2、满二叉树 a. 叶子…

关于IP地址欺骗的知识,看这篇文章就差不多了

无论是什么媒介,身份盗窃始终是一种威胁。所谓的“IP欺骗”是恶意用户为了他们的黑客攻击企图快速获得可信度的一种常见方式。 考虑到每台计算机和服务器都有一个唯一的标识符(Internet Protocol或IP地址),几乎任何使用互联网的人都可能受到攻击。IP欺骗是一种“伪造”源地…

开始读 Oracle PL/SQL Programming 第6版

最近觉得PL/SQL越来越重要&#xff0c;因为这本书早就在待读列表中&#xff0c;因此决定系统的学一下。 2024年1月24日晚开始读。 在亚马逊上的评价还不错&#xff1a; 本书的第一作者是Steven Feuerstein&#xff0c;是Oracle资深的Developer Advocate。 本书的示例代码可…

Gradlew安装配置和使用

官网 https://gradle.org/install/ 在线安装 $ sdk install gradle 8.5Homebrew is “the missing package manager for macOS”. $ brew install gradle手动安装 安装包下载 安装 $ mkdir /opt/gradle $ unzip -d /opt/gradle gradle-8.5-bin.zip $ ls /opt/gradle/gradle…

使用Burp Collaborator验证无回显的RCE漏洞

使用Burp Collaborator验证无回显的RCE漏洞 1.概述2.Collaborator演示3.通过DNS查找外带命令执行结果1.概述 当应用程序容易受到命令注入攻击,但命令是异步执行时,就会发生异步操作系统命令注入漏洞。这意味着它对应用程序的响应没有明显影响 Burp Collaborator 可以帮助您…

JAVA_ArrayList添加元素时的源码分析(jdk17)

目录 ArrayList 在 Collection 中的位置&#xff1a; ArrayList 集合底层原理&#xff1a; 先总结&#xff1a; ArrayList 底层是数组结构的&#xff1a;查找快&#xff0c;增删慢 看源码&#xff1a; 看一些重要的源码&#xff1a; 第一次存元素&#xff1a; 逻辑总览…

C++ STL之queue的使用及模拟实现

文章目录 1. 介绍2. 队列的使用3. 队列的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 队列作为容器适配器实现&…

go语言(十七)----json

1、结构体转json package mainimport ("encoding/json""fmt" )type Movie struct{Title string json:"title"Year int json:"year"Price int json:"rmb"Actors []string json:"actors" }func main() {movie : Mo…

数字与数学高频问题(算法村第十三关白银挑战)

数组实现加法专题 数组实现整数加法 66. 加一 - 力扣&#xff08;LeetCode&#xff09; 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数…