常用监控方案 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.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图,图节点的拓扑排序定义如下: 对…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

【AI News | 20250609】每日AI进展
AI Repos 1、OpenHands-Versa OpenHands-Versa 是一个通用型 AI 智能体,通过结合代码编辑与执行、网络搜索、多模态网络浏览和文件访问等通用工具,在软件工程、网络导航和工作流自动化等多个领域展现出卓越性能。它在 SWE-Bench Multimodal、GAIA 和 Th…...
【bat win系统自动运行脚本-双击启动docker及其它】
win系统自动化运行脚本 创建一个 startup.bat右键编辑,输入以下示例 echo off start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"timeout /t 5docker start your_container_namestart cmd /k "conda activate your_conda_e…...
结构性-代理模式
动态代理主要是为了处理重复创建模板代码的场景。 使用示例 public interface MyInterface {String doSomething(); }public class MyInterfaceImpl implements MyInterface{Overridepublic String doSomething() {return "接口方法dosomething";} }public class M…...