常用监控方案 Prometheus + Grafana 简单使用小结
文章目录
- 前言
- 一、概念
- 1.1 发展
- 1.2 时序数据
- 1.3 Metric
- 二、Prometheus
- 2.1 架构
- 2.2 配置
- 2.3 查询语言PromQL
- 2.4 Exporter
- 三、Grafana
- 3.1 数据源
- 3.2 权限
- 3.3 面板可视化
- 3.4 仪表盘
- 四、实战
- 4.1 监控 Windows/Linux
- 4.2 监控 JVM
- 4.3 监控 MySQL
- 4.4 监控 Springboot API
- 参考
前言
Prometheus 是用 GO 语言开发的一个开源的系统监控和告警工具包,最初是 2012 年 SoundCloud 发布的,后面被很多大公司组织所使用,于2016年加入了云原生云计算基金会(Cloud Native Computing Foundation,CNCF),并于2018年毕业,它现在是一个独立的开源项目,并独立于任何公司进行维护。
Prometheus是一个非常优秀的监控工具,准确的说,更是一套监控方案。Prometheus提供了监控数据收集,存储,处理可视化和告警的一套完整的监控解决方案。
-
官方网站:https://prometheus.io/
-
github 地址:https://github.com/prometheus/prometheus
Grafana 是一个开源的跨平台的度量分析、可视化工具,支持多种数据源,如Prometheus、Elasticsearch、InfluxDB等。它提供了丰富的可视化图表和面板,可以帮助用户更好地理解和分析监控数据。
- 文档地址:https://grafana.com/docs/grafana/latest/
- github 地址:https://github.com/grafana/grafana
Prometheus 自身携带一个web UI用来显示数据图表,但是有点简陋,而 Grafana 能够支持精美图表的制作并显示,而且自身支持Prometheus, 所以经典的监控方案就是 Prometheus + Grafana。
一、概念
1.1 发展
运维监控的发展历程可以追溯到计算机技术的早期阶段。随着计算机技术的不断发展,运维监控也在不断地演化和改进。
- 最初的运维监控主要是通过手动检查系统日志和性能指标来进行的,这种方法非常耗时且容易出错。
- 随着计算机技术的不断发展,出现了一些基于SNMP 协议的监控工具,例如Nagios、Zabbix等等。这些工具可以自动地收集系统日志和性能指标,并对其进行分析和处理,从而帮助用户更好地了解系统的运行状态。
- 近年来,随着云计算和容器技术的不断发展,运维监控也在不断地演化和改进。例如 Prometheus就是一种基于云原生技术的开源监控系统,它可以帮助用户更好地管理和监控云原生应用程序。
总之,随着计算机技术的不断发展,运维监控也在不断地演化和改进,从最初的手动检查到基于SNMP协议的监控工具,再到现在的自动化运维监控工具,运维监控为用户提供更好的服务和支持。
1.2 时序数据
时序数据,即时间序列数据(Time Series Data),按时间维度顺序记录且索引的数据。像物联网、车联网、工业互联网等领域各种类型的设备都会产生海量的时序数据,这些数据将占世界数据总量的90%以上。在监控平台,时序数据常常指的是系统的性能指标、日志信息等等带有时间戳的序列数据。
时序数据和传统关系数据的对比,时序数据侧重CRUD中的CR,没有U
1.3 Metric
metric(度量,指标)一个很重要的概念,在运维监控出现的非常高频,是指监控系统中的指标,例如CPU使用率、内存使用率、网络流量等等,在Prometheus 其本质是指存在于数据库的一条记录。
在Prometheus client 中可分为4种类型
- Counter:一种累积度量,它表示一个单调递增的计数器,其值只能在重新启动时增加或重置为零。例如,可以使用计数器来表示所服务的请求、已完成的任务或错误的数量。
- Gauge:一个可以任意起伏的单个数值。 测量器通常用于测量值,比如温度或当前内存使用量,但也用于可能上下波动的“计数”,比如并发请求的数量。
- Histogram:直方图,表示一段时间内的数据采样统计结果,通过分桶(bucket)的方式来统计样本的分布。比如统计接口的耗时,多少的请求落在 10ms - 20ms,多少的请求落在 20ms - 30ms 等。
- Summary:和Histogram类似,根据样本统计出百分位。例如统计链路耗时,TP99 是多少,TP95 是多少等。
二、Prometheus
2.1 架构

-
Prometheus Server:利用服务发现机制获取需要监控的 target,通过Pull方式从target处拉取指标数据,根据定义的rule,可以提前对指标数据再次进行计算,触发报警的发送到 alertmanager组件,用于收集和存储时间序列数据。
-
PushGateway:各个目标主机可上报数据到 PushGateway,然后Prometheus server统一从pushgateway拉取数据。
-
Exporters:采集已有的第三方服务监控指标并暴露metrics。Prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到Prometheus server 端。
-
Alertmanager:组件根据报警的告警方式发送相应的通知。从Prometheus server端接收到alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉,slack等。
-
Grafana:数据可视化组件,监控仪表盘,通过PromQL从Prometheus Server查询数据,进行展示
-
Prometheus web UI:简单的Web控制台,默认端口9090
2.2 配置
Prometheus 可以通过 --config.file 命令选项来加载配置文件。
当启用–web.enable-lifecycle,可通过URL /-/reload 发送 POST 请求实现不需要重启Prometheus 加载配置文件
配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/,下面是4个常用的配置大类
-
global
配置全局的信息,如监控数据的间隔,业务的超时时间,告警规则执行周期等
- scrape_interval 拉取 targets 的默认时间间隔,默认1m
- scrape_timeout 拉取超时时间,默认10s
- evaluation_interval 执行rules间隔时间,默认1m
-
rule_files
包含两种规则文件:记录规则和告警规则。
-
记录规则
记录规则允许预先计算经常需要的或计算成本昂贵的表达式,并将其结果保存为一组新的时间序列。查询预先计算的结果通常会比每次需要时执行原始表达式快得多。这对于仪表板特别有用,它们需要在每次刷新时重复查询相同的表达式。
文档:https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
-
告警规则
根据PromQL来定义警报条件,并向外部服务发送关于触发警报的通知。
文档:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
-
-
alerting
配置管理 Alertmanager
-
scrape_configs
配置拉取数据节点job,文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config
- job_name job名字
- scrape_interval 抓取频率,默认globa.scrape_interval
- scrape_timeout 抓取超时,默认globa.scrape_timeout
- metrics_path 抓取路径, 默认/metric
- static_configs 抓取目标URL地址
2.3 查询语言PromQL
Prometheus 提供了一种名为PromQL(Prometheus Query Language)的函数式查询语言,允许用户实时选择和聚合时间序列数据.文档地址:https://prometheus.io/docs/prometheus/latest/querying/basics/
-
过滤查询
通过{} 对结果进行过滤,内部标签值可使用=表示相等,!= 表示不相等,=~表示正则匹配,!~表示正则不匹配
http_requests_total{method="GET"} http_requests_total{environment=~"staging|testing|development",method!="GET"} http_requests_total{status!~"4.."} -
范围时间查询
可通过[时间值]进行选择,例如
http_requests_total [5m] -
偏移时间查询
通过offset 可以允许更改查询中单个即时向量和范围向量的时间偏移量。例如过去5分钟http请求总数
http_requests_total offset 5m -
定点时间查询
@ 允许更改查询中 单个即时向量和范围向量的计算时间。提供给@修改符的时间是一个unix时间戳,用浮点数表示
例如:返回在2021-01-04T07:40:00+00:00时的值
http_requests_total @ 1609746000 -
聚合查询
Prometheus 提供sum,max,min,avg,count,bottomk,topk等聚合命令查询数据
sum(http_requests_total) sum by (application, group) (http_requests_total) topk(5, http_requests_total) -
函数查询
Prometheus 提供函数参与计算查询数据,文档:https://prometheus.io/docs/prometheus/latest/querying/functions/
rate(http_requests_total[5m])[30m:1m]
2.4 Exporter
Prometheus通过 Exporter 来获取数据,可以根据文档中的链接按需下载安装:https://prometheus.io/docs/instrumenting/exporters/
三、Grafana
3.1 数据源

3.2 权限
grafana 提供一套权限系统,能够让用户根据不同的角色拥有不同的权限,如面板的查看,编辑等等
权限分为三种:admin, viewer, editer
可通过邀请用户,并向用户发送链接的操作来添加用户,并且可以通过组来通知查看面板的权限控制
3.3 面板可视化
相关文档:https://grafana.com/docs/grafana/latest/panels-visualizations/
-
面板查询表达式

-
面板种类
最常见的就是Graph,更多的种类可以去官网下载导入,注意下版本

-
面板参数
y轴的参数如果是百分比可以通过如下控制

3.4 仪表盘
上述多个面板整合在一起就是仪表盘了
-
导入
除了可以自定义面板外,还可以使用其他人制作好的面板 https://grafana.com/grafana/dashboards/,通过菜单中的Import导入
-
查看
-
查看仪表盘可通过url添加参数&kiosk 隐藏侧边栏和顶部菜单
-
匿名访问
修改配置文件conf/defaults.ini
[auth.anonymous] # 设置为true即可匿名访问,不用登陆就可以直接访问url enabled = true -
嵌套允许
修改配置文件conf/defaults.ini
# 设置为true即可嵌套 allow_embedding = true
-
-
变量
通过变量可以实现下拉列表选择想要显示的部分:文档:https://grafana.com/docs/grafana/latest/dashboards/variables/
四、实战
4.1 监控 Windows/Linux
windows: 下载Exporter https://github.com/prometheus-community/windows_exporter/releases
linux: 下载 https://github.com/prometheus/node_exporter/releases
下面以windows 为例
windows_exporter.exe --collectors.enabled "[defaults],process,container"
windows_exporter.exe --config.file config.yml

监控项
| 监控指标 | 表达式 |
|---|---|
| CPU 使用率 | 100 - (avg by (instance,region) (irate(windows_cpu_time_total{mode=“idle”}[2m])) * 100) |
| 内存 使用率 | 100-(windows_os_physical_memory_free_bytes/windows_cs_physical_memory_bytes)*100 |
| 磁盘总使用率 | (sum(windows_logical_disk_size_bytes{volume!~“Harddisk."}) by (instance) - sum(windows_logical_disk_free_bytes{volume!~"Harddisk.”}) by (instance)) / sum(windows_logical_disk_size_bytes{volume!~"Harddisk."}) by (instance) *100 |
| 各个磁盘使用率 | 100- 100 * (windows_logical_disk_free_bytes/windows_logical_disk_size_bytes) |
| 带宽 | (sum(irate(windows_net_bytes_total[1m])) > 1)* 8 |
| 系统线程 | windows_system_threads |
| 系统进程 | windows_os_processes |
4.2 监控 JVM
下载Exporter:https://github.com/prometheus/jmx_exporter/releases
java -javaagent:jmx_prometheus_javaagent-0.18.0.jar=12345:config.yml -jar vhr-web-0.0.1-SNAPSHOT.jar
rules:
- pattern: ".*"

| 监控指标 | 表达式 |
|---|---|
| jvm 堆内存使用 | jvm_memory_bytes_used{area=“heap”} |
| Eden 区使用 | jvm_memory_pool_bytes_used{pool=“PS Eden Space”} |
| Old 区使用 | jvm_memory_pool_bytes_used{pool=“PS Old Gen”} |
| 元空间 使用 | jvm_memory_pool_bytes_used{pool=“Metaspace”} |
| gc时间 | increase(jvm_gc_collection_seconds_sum[$__interval]) |
| gc增长次数 | increase(jvm_gc_collection_seconds_count[$__interval]) |
4.3 监控 MySQL
https://github.com/prometheus/mysqld_exporter/releases
mysqld_exporter.exe --config.my-cnf config.cnf --web.listen-address=localhost:9104
[client]
user=root
password=

| 监控指标 | 表达式 |
|---|---|
| 连接数 | sum(max_over_time(mysql_global_status_threads_connected[$__interval])) |
| 慢查询数 | sum(rate(mysql_global_status_slow_queries[$__interval])) |
| 平均运行线程数 | sum(avg_over_time(mysql_global_status_threads_running[$__interval])) |
| 当前QPS | rate(mysql_global_status_queries[$__interval]) |
4.4 监控 Springboot API
有时候在 Springboot 项目中需要统计 API 接口的调用次数和调用时间,可以使用actuator+micrometer ,已经内置两个注解实现两者功能,因为要使用到aop,所以还需导入aop包
文档:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
management:metrics:tags:application: ${spring.application.name}web:server:max-uri-tags: 200endpoints:web:exposure:include: prometheusspring:application:name: prometheus-test-api
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {return new TimedAspect(registry);
}
@GetMapping("/test")
@Timed(value = "test_method",description = "测试接口耗时")
@Counted(value = "test_method", description = "测试接口次数")
public String test() {//try {// Thread.sleep(1000);//} catch (InterruptedException e) {// throw new RuntimeException(e);//}return "ok";
}

参考
- Prometheus+Grafana 搭建全方位的监控告警系统
相关文章:
常用监控方案 Prometheus + Grafana 简单使用小结
文章目录 前言一、概念1.1 发展1.2 时序数据1.3 Metric 二、Prometheus2.1 架构2.2 配置2.3 查询语言PromQL2.4 Exporter 三、Grafana3.1 数据源3.2 权限3.3 面板可视化3.4 仪表盘 四、实战4.1 监控 Windows/Linux4.2 监控 JVM4.3 监控 MySQL4.4 监控 Springboot API 参考 前言…...
基于长短期神经网络LSTM的飞行轨迹跟踪预测,基于长短期神经网络LSTM的三维路径预测
目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的飞行轨迹跟踪 完整代码: https://download.csdn.net/download/abc991835105/87705046 效果图 结果分析 展望 参考论文 背影 路径追踪预测,对实现自动飞行驾驶拥有重要意义,长短期神经网络是一种改进…...
计算机组成原理-指令系统-指令格式及寻址方式
目录 一、指令的定义 1.1 扩展操作码指令格式 二、指令寻址方式 2.1 顺序寻址 2.2 跳跃寻址 三、 数据寻址 3.1 直接寻址 3.2 间接寻址 3.3 寄存器寻址 3.4 寄存器间接寻址 3.5 隐含寻址 3.6 立即寻址 3.7 偏移地址 3.7.1 基址寻址 3.7.2 变址寻址 3.7.3 相对寻址…...
【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹…...
Apache 网页与安全优化
目录 一:Apache网页优化概述 1、概述 2、优化内容 3、gzip介绍 4、Apache的压缩模块 5、mod_ gzip 模块与mod_ deflate 模块 二: 网页压缩 1.检查是否安装 mod_deflate 模块 2. 如果没有安装mod_deflate 模块,重新编译安装 Apache 添…...
Unity的IFilterBuildAssemblies:深入解析与实用案例
Unity IFilterBuildAssemblies Unity IFilterBuildAssemblies是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自定义哪些程序集需要被包含在构建中,哪些程序集需要被排除在建之外。这个功能可以帮助开发者更好地控制项目的构建过程&…...
分片架构,Redis Cluster 分析
分片架构解决的问题 通过堆机器,提升读写性能,与存储性能 分片架构设计要点 分片规则 选择Cardinality大的作为分片键,尽可能保证数据分布均匀 常见分片键: 基于主键(业务型数据),基于时间…...
Linux-0.11 文件系统bitmap.c详解
Linux-0.11 文件系统bitmap.c详解 模块简介 该模块包含了两对函数,第一对是和i节点相关的free_inode()和new_inode()。第二对是和逻辑块相关的free_block()和new_block()。 函数详解 free_block void free_block(int dev, int block)该函数的作用是释放设备dev…...
【Linux】基本指令,拥抱Linux的第一步
[Linux]常见指令 Linux基本指令指令的本质ls指令pwd指令cd指令touch指令mkdir指令(重要)rmdir&&rm指令(重要)man指令(重要)cp指令(重要)mv指令(重要)重定向cat指令more指令less指令(重要…...
CTF 2015: Search Engine-fastbin_dup_into_stack
参考: [1]https://gsgx.me/posts/9447-ctf-2015-search-engine-writeup/ [2]https://blog.csdn.net/weixin_38419913/article/details/103238963(掌握利用点,省略各种逆向细节) [3]https://bbs.kanxue.com/thread-267876.htm(逆向调试详解&am…...
DRF之全局异常处理
一、REST framework 提供了异常处理,我们可以自定义异常处理函数 使用方式: from rest_framewoork.views import exception_handerdef custom_exception_handler(exc,context):# 先调用REST framework默认的异常处理方法获得标准错误响应对象response …...
AI创作工具的使用体验报告
下面是AI创作工具的使用体验报告,围绕以下三点展开: 一、工具的使用体验如何? CSDN博客AI创作工具是一款非常易用的工具,操作简单,可以很快地开始创建内容。在使用过程中,我发现它的语言模型很智能&#…...
C++算法模板(转自acwing)
快速排序算法模板 —— 模板题 AcWing 785. 快速排序 void quick_sort(int q[], int l, int r) {if (l > r) return;int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i],…...
阿里云服务器最新优惠价格及最新收费标准(2023更新)
阿里云服务器收费标准分为包年包月和按量付费两种模式,包年包月是一种先付费后使用的计费方式,按量付费是一种先使用后付费的计费方式。选择包年包月的收费模式,用户可以提前预留资源,同时享受更大的价格优惠,帮您更大…...
React实现监听粘贴事件并获取粘贴板中的截图
目录 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件 ? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRef<HTML…...
ISO_IEC_7816-3
介绍 ISO/IEC 7816 是一系列标准,规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果,卡传递信息(计算结果、存储的数据)和/或修改其内容࿰…...
学习C#反射(Reflection)
反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性(Attribute)…...
Spring Boot的核心组件和工作原理
引言 Spring Boot是一个快速构建应用程序的框架,通过自动化配置和约定优于配置的原则,可以快速地创建可独立运行的、生产级别的Spring应用程序。Spring Boot的核心组件是自动配置、起步依赖和嵌入式Web服务器。 在本文中,我们将深入了解Spr…...
【指针的深刻理解】
如何看待下面代码中的a变量? #include<stdio.h> int main() {int a 0;//同样的一个a,在不同的表达式中,名称是一样的,但是含义是完全不同的!a 10;//使用的是a的空间:左值int b a; //使用的是a的内容&#x…...
lintcode-图的拓扑排序(java)
拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图,图节点的拓扑排序定义如下: 对…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
