Spring Boot服务监控(Prometheus)

article/2025/10/29 15:31:21

哲学

最近看到了一句话:定乎内外之分 辩乎荣辱之境。

一个外国作家也说过:

我生命里的的最大突破之一,就是我不再为别人的看法而担忧。此后,我真的能自由的去做我认为对自己最好的事,只有在我们不需要外来的赞许时,才变得自由。

说的都很好。人就是要突破自己,就像许三多,不要在意别人的看法,做自己认为有意义的事,今天比昨天好,这不就是希望。

监控

思考完一波哲学,开始搞搞软件上的东西。这篇记录下监控配置相关的知识。

为什么需要监控系统:简单点说。随时掌握系统运行情况,保证在你预期内运行。

先不扯别的,看两张效果图:

1、监控Linux服务器的CPU,内存,磁盘等:

2、监控Tomcat和jvm:

概念

1、Prometheus是什么,一款开源的优秀的时间序列数据库监控软件。收集各项指标,用于监控系统状态。提供强大的PromQL查询语句,满足各种个性化查询需求。

2、什么是Metrics,Metrics就是监控指标,在外行术语中,指标是数字度量,时间序列意味着随着时间的推移记录变化。用户想要测量的内容因应用程序而异。对于web服务器来说,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。简单理解,就是你想监控的东西,不必过分深究。

3、Grafana又是什么?简单来说就是图形化展示工具,和Prometheus天作之合。

安装配置

1、下载prometheus:

wget https://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*

2、配置prometheus:

global:
scrape_interval:     15s # By default, scrape targets every 15 seconds.# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:# 这里这个就是自带的监控,监控preometheus自己- targets: ['localhost:9090'] 

以上就完成了prometheus的下载和配置,非常的简单。

访问host:9090就可以看到如下界面:

这就是prometheus的管理页面。不够酷炫,接下来下载grafana。

3、下载grafana

sudo yum install grafana
sudo systemctl start grafana-server

这就完事了。验证下,默认的管理端是运行在3000端口,也就是http://ip:3000,就可以打开如下页面,账号密码默认都是admin。

我们现在有了prometheus和grafana,接下来将grafana连上prometheus。

1、添加数据源。

2、连接上prometheus。

3、测试是否连接成功。

这就完成了。截止到现在,最基本prometheus和grafna下载和安装的操作就完毕了。

exporter

接下来,来监控linux的状态。这个也是极其的简单。

首先下载node_exporter,然后启动

wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
./node_exporter

再去prometheus修改下配置文件prometheus.yaml,仿照之前的,加上下面的配置。然后重启prometheus。

- job_name: nodestatic_configs:- targets: ['localhost:9100']

这样已经有了监控linux运行情况的能力了,只是目前还没有展示出来而已。

接下来加上酷炫的页面。官网有配置好的,甚至不用自己配置。地址是:

https://grafana.com/grafana/dashboards/。

打开如下,搜索node,选中第一个。

复制官方提供的模板ID。然后去grafana导入一下即可。

大功告成了,如下图所示。

jvm的也是类似的操作,自己可以试验。

自定义监控指标

以上都是官方提供的exporter。监控机器或者jvm的,如果我们想监控自己的业务呢?例如想监控当前有多少请求?每个请求的性能如何?或者其他一些自定义的监控项?

在写代码之前,认识几个概念:prometheus中的四种指标类型。Counter(计数器):Counter类型用于增加的值,例如请求计数或错误计数。最重要的是,绝对不能将计数器用于可能减小的值。只增不减。

Gauges(仪表板(我自己的翻译)):仪表类型可用于向下和向上的值,例如当前内存使用量或队列中的项目数,可增可减。

histogram(直方图):这个概念比较难以理解。暂时我们认为他就是统计分位树的就好。例如你这个接口99%请求的耗时,TP99。

summaries:本篇不讲,感兴趣自行查看官网。

这四种类型,都什么时候使用呢?Counter:

1、你想记录一个只上升的值。

2、希望以后能够查询该值的增长速度(即增长率)。

Guage:

1、想要记录一个可以上升或下降的值。

2、你不需要查询它的增长率。

histogram:分桶计算,分位计算,计算TP99等。

OK,接下来写代码。

监控Spring Boot应用

用java,一般用Spring Boot项目开发,这个很容易实现,全部都是封装好的。

从一个最基本的项目入手,只需要如下的依赖即可。注意到这里除了web模块,还加了两个监控模块。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

然后写一个简单的controller。

package com.test.promethusmetrics;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/*** 测试Counter** @author fengkai*/
@RestController
public class CounterController {
private final Counter requestCount;public CounterController(CollectorRegistry collectorRegistry) {requestCount = Counter.build().name("request_count").help("Number of hello requests.").register(collectorRegistry);}
@GetMapping(value = "/hello")
public String hello() {requestCount.inc();
return "Hi!";}
}

注意到这里用了counter。这就完成了counter计数的代码部分。

代码完成后,还需要让prometheus去拉取我们Spring Boot的监控指标,配置和之前很相似。

添加如下配置,然后重启prometheus。

- job_name: "spring"metrics_path: /actuator/prometheusstatic_configs:- targets: ["192.168.181.1:8080"]

我们在浏览器上多请求几次。然后我们去grafana上配置监控面板,首先添加。

然后配置指标。

效果图如下。

以上只是单纯的计数,实际用途不是很大,其实更关心的应该是增长率。这又该如何统计呢?

只需要在外层包裹rate函数就可以了,具体的原理可以后续再解释,这里先用起来。

接下来再试一下使用histogram,统计下Spring Boot服务的请求的耗时情况如何?

代码部分:

package com.test.promethusmetrics;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Histogram;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import static java.lang.Thread.sleep;
@RestController
public class HistogramController {
private final Histogram requestDuration;
public HistogramController(CollectorRegistry collectorRegistry) {requestDuration = Histogram.build().name("test_wait").help("Time for HTTP request.").register(collectorRegistry);}
@GetMapping(value = "/wait")
public String makeMeWait() throws InterruptedException {Histogram.Timer timer = requestDuration.startTimer();
long sleepDuration = Double.valueOf(Math.floor(Math.random() * 10 * 1000)).longValue();sleep(sleepDuration);timer.observeDuration();
return String.format("I kept you waiting for %s ms!", sleepDuration);}
}

多访问几次:localhost:8080/wait然后grafana配置,这里用的是直方图histogram,计算的性能。QL的语法本篇不讲解,可以参考官网。

效果图如下:

总结

现在,我们应该清楚地了解prometheus中可以使用的不同监控指标类型,以及何时使用它们,如何查询它们。并且能够用grafna配置酷炫的监控图标。有了这些知识,可以更有效地发布应用程序中的监控,并确保它始终按预期运行。


http://chatgpt.dhexx.cn/article/sLvYwwqL.shtml

相关文章

几种服务器监控系统,几种服务器监控系统

几种服务器监控系统 内容精选 换一换 设置“云服务器名称”。名称可自定义&#xff0c;但需符合命名规则&#xff1a;只能由中文字符、英文字母、数字及“_”、“-”、“.”组成。如果同时购买多台弹性云服务器&#xff0c;系统会自动按序增加后缀。一次创建多台弹性云服务器时…

无线监控设置smtp服务器,监控smtp服务器

监控smtp服务器 内容精选 换一换 华为云提供了云监控服务&#xff0c;您可以使用该服务监控弹性云服务器&#xff0c;在您开通了弹性云服务器后&#xff0c;云监控服务将自动实时监控并根据您设置的告警预置触发告警和通知&#xff0c;帮助您更好地了解弹性云服务器的各项性能指…

对微服务的监控的两种办法(springbootAdmin、prometheus+grafana)

1、springboot-admin实现对服务的监控 一、actuator客户端(即每一个需要监控的微服务) 1、在业务微服务中引入jar包 <!-- 引入Actuator监控依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

语言模型BERT理解

一、BERT概述 BERT是由Google在2018年提出的一种预训练语言模型。BERT的创新之处在于采用了双向Transformer编码器来生成上下文相关的词向量表示。 传统的单向语言模型只考虑了左侧或右侧的上下文信息&#xff0c;而BERT则同时考虑了左侧和右侧的上下文信息&#xff0c;使得生…

【BERT类预训练模型整理】

BERT类预训练模型整理 1.BERT的相关内容1.1 BERT的预训练技术1.1.1 掩码机制1.1.2 NSP&#xff08; Next Sentence Prediction&#xff09; 1.2 BERT模型的局限性 2. RoBERTa的相关内容2.1 RoBERTa的预训练技术2.1.1动态掩码&#xff08;Dynamic Masking&#xff09;2.1.2取消N…

(四)目标检测yolov5-6.0模型训练

安装好yolov5-6.0环境后 1.数据结构格式 文件夹结构&#xff1a;新建coco128 images文件夹下的train与val都是图像 labels文件夹下的train与val都是yolo格式的txt标签文件 2.修改配置文件 第一个需要修改的文件data/coco128.yaml 修改数据集路径&#xff1a; 例如&#xf…

caffe 训练自己的分类模型

学习caffe的最终目的&#xff0c;是可以利用自己的数据集&#xff0c;训练模型&#xff0c;并解决实际问题。 所以在前面跑通了mnist和cifar-10例程的基础上&#xff0c;尝试训练自己的模型&#xff0c;从头到尾走一遍所有的流程。准备数据、训练并得到模型&#xff0c;利用模…

bert中文分类模型训练+推理+部署

文章预览&#xff1a; 0. bert简介1. bert结构1. bert中文分类模型训练1 下载bert项目代码代码结构 2 下载中文预训练模型3 制作中文训练数据集 2. bert模型推理1.tensorflow推理 2. onnxruntime推理1. checkpoint格式转换为saveModel格式2. saveModel格式转换为onnx格式3. 使用…

Bert模型详解和训练实例

前面已经介绍了transformer&#xff0c;理解了transformer&#xff0c;那么理解bert就简单多了。对transformer不是很了解的可以跳转到https://blog.csdn.net/one_super_dreamer/article/details/105181690 bert的核心代码解读在https://blog.csdn.net/one_super_dreamer/arti…

无监督模型 训练过程_监督使用训练模型

无监督模型 训练过程 Machine Learning, Artificial Intelligence, and Deep Learning are some of the most complex, yet highly demanded fields of expertise today. There are innumerable resources and tools to work in these fields, and one such popular tool is Su…

Tensorflow V2 图像识别模型训练流程

Tensorflow V2.0 图像识别教程 代码&#xff1a; https://github.com/dwSun/classification-tutorial.git 教程参考官方专家高级教程&#xff1a; https://tensorflow.google.cn/tutorials/quickstart/advanced?hlen 这里以 TinyMind 《汉字书法识别》比赛数据为例&#xf…

(三)mmclassification图像分类——模型训练

&#xff08;三&#xff09;mmclassification图像分类——模型训练和测试 1.模型训练1.1使用预训练模型1.2使用自己的数据训练1.2.1制作数据集1.2.2修改模型参数&#xff08;configs文件&#xff09;(1)models(2)datasets(3)schedules(4)新建mobilenet_v2_b32x8_car.py 1.3训练…

tensorflow CNN模型训练+优化参数+实战

训练线性函数 import numpy as np import tensorflow.keras as keras # 构建模型 model keras.Sequential([keras.layers.Dense(units1,input_shape[1])]) # optimizer优化&#xff0c;loss损失 model.compile(optimizersgd, lossmean_squared_error) #准备训练数据 xsnp.ar…

nanodet训练手势识别模型

序言 前段时间nanodet爆火&#xff0c;以非常小的模型和运算量&#xff0c;取得了超过tiny-yolov4的精度&#xff0c;非常惊艳&#xff0c;因为时间问题一直没有尝试&#xff0c;最近有空决定尝试一下。先来看下作者给的模型效果 一、nanodet安装 首先安装nanodet的环境包…

Pytorch教程[10]完整模型训练套路

一般的模型构建都是按照下图这样的流程 下面分享一个自己手动搭建的网络 from model import * import torchvision import torch from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from torch import nn from torch.utils.data import …

PaddleOCR学习(二)PaddleOCR检测模型训练

这一部分主要介绍&#xff0c;如何使用自己的数据库去训练PaddleOCR的文本检测模型。 官方教程https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md 一、准备训练数据 首先你需要有自己的数据&#xff0c;如果没有自己的数据&#xff0c;推荐使…

迁移学习的模型训练

用深度学习解决目标检测有两个重要工作&#xff1a; 1、设计、实现、训练和验证模型 模型如果设计模型如何编程实现如何收集足够的数据来训练并验证模型是否符合预期 从头开始设计、实现、训练和验证模型是需要有众多深度学习算法人才做支撑&#xff0c;并且极其耗时耗力 2、…

TF2.0模型训练

TF2.0模型训练 概述数据集介绍1、通过fit方法训练模型准备数据创建模型编译模型训练模型 2、通过fit_generator方法训练模型构建生成器创建模型编译模型训练模型 3、自定义训练准备数据创建模型定义损失函数及优化器训练模型 下一篇TF2.0模型保存 概述 这是TF2.0入门笔记【TF2…

TensorFlow 2.0 —— 模型训练

目录 1、Keras版本模型训练1.1 构造模型&#xff08;顺序模型、函数式模型、子类模型&#xff09;1.2 模型训练&#xff1a;model.fit()1.3 模型验证&#xff1a;model.evaluate()1.4 模型预测&#xff1a;model.predict()1.5 使用样本加权和类别加权1.6 回调函数1.6.1 EarlySt…

如何在jupyter上运行Java代码(适用LINUX)

如何在jupyter上运行Java代码 1.下载必须软件 下载JDK且JDK版本必须 ≥ 9 ≥9 ≥9从github上下载ijava 附 &#xff1a; ijava下载链接.装有jupyter&#xff0c;我在LINUX上是直接装的anaconda 安装过程 将下载的ijava压缩包解压出来&#xff0c;并在此路径用该命令 : sudo…