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

article/2025/10/29 15:25:56

1、springboot-admin实现对服务的监控

一、actuator客户端(即每一个需要监控的微服务)

1、在业务微服务中引入jar包
 <!-- 引入Actuator监控依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--这个包是作图形化服务端监控客户端:如果不用图形化客户端就不要导这个包--><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.3.0</version></dependency>
2、配置yml
management:server:port: 8092endpoints:web:exposure:# 从技术上更改端点的暴露 -- 通过HTTP公开所有的端点,可通过 /actuator/{ID} 去查看,如 /actuator/beansinclude: "*"base-path: /actuatorjmx:exposure:include: "*"endpoint:health:show-details: alwayshttptrace:enabled: truemetrics:enabled: truemetrics:export:prometheus:enabled: true
spring:boot:admin:client:#连接监控服务端的地址,也就是actuator的服务端的运行ip 端口url: http://localhost:8091instance:prefer-ip: true

二、actuator服务端的配置

1、创建一个springboot工程,导入包
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.3.0</version></dependency>
2、配置yml(正常springboot的配置无需特殊配置)
# 应用名称
spring:application:name: actuatormonitor
server:port: 8091
3、主启动类上加注解

@EnableAdminServer

这样就配置完成了:
访问服务端的地址即可看到监控的状态的图形化页面
localhost:8091即可
在这里插入图片描述

2、prometheus+grafana实时监控

先解决时间同步问题:

1、虚拟机与宿主机时间的同步 同步办法
①点击虚拟机的上面菜单栏 VM选择Install VMware Tools,这就安装了虚拟机工具
②点击VM选择settings,再选择options页签,选择VMware Tools,勾选上右上方的Synchronize guest
time with host 这样在xshell中执行date,即可看到时间已同步
2、docker与虚拟机的时间同步
在执行生成容器的命令的语句加上 -v /etc/localtime:/etc/localtime:ro 即把时间挂载与宿主机一致 例如:
docker run -d --name=prometheus -p 9090:9090 -v /home/soft/monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /etc/localtime:/etc/localtime:ro prom/prometheus
检查方法 进入已生成容器查看: ①docker exec -it 23f20c2e43e8 /bin/bash
②再输入date查看如果遇到 OCI runtime exec failed: exec failed:错误,那就用docker exec -it 23f20c2e43e8 /bin/sh命令
3、linux服务器(或虚拟机)的时间查看设定:
查看:date
按格式查看:date "+%Y-%m-%d %H:%M:%S"
设置时间:date -s 字符串时间(例如:date -s "2018-10-10 11:22:22")
查看日历:cal

注意:这里的-v /etc/localtime:/etc/localtime:ro 后面的:ro是read
only的意思,即docker容器只能读来自宿主机的数据,不可以增删改。

docker安装使用prometheus和grafana:

(这里的每个容器都同步了时间-v /etc/localtime:/etc/localtime:ro

1、安装prometheus

docker run -d --name=prometheus -p 9090:9090 \
-v /home/soft/monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /etc/localtime:/etc/localtime:ro \
prom/prometheus
访问方法:192.168.200.137:9090可以看到prometheus 是否启动

2、安装Grafana

docker run -d -p 3000:3000 --name=grafana \
-v /home/soft/monitor/grafana/Grafana-storage:/var/lib/Grafana \
-v /etc/localtime:/etc/localtime:ro \
grafana/grafana
访问方法:192.168.200.137:3000可以看到grafana 是否启动

3、docker部署cAdvisor:(监控docker的容器的运行指标)

docker run -d \
–volume=/:/rootfs:ro \
–volume=/var/run:/var/run:ro \
–volume=/sys:/sys:ro \
–volume=/var/lib/docker/:/var/lib/docker:ro \
–volume=/dev/disk/:/dev/disk:ro \
-v /etc/localtime:/etc/localtime:ro \
–publish=8080:8080 \
–detach=true \
–name=cadvisor \
google/cadvisor:latest
访问方法:192.168.200.137:8080 可以看到cAdvisor是否启动
访问:http://192.168.200.137:8080/metrics有数据就说明cAdvisor是启动好了的

在prometheus.yml中加入:

- job_name: 'docker'static_configs:- targets: ['192.168.200.137:8080']labels:instance: docker

在grafana中导入datasource,再引入import的模板,

监控docker的模板一般193就好用,其他模板随意试探,只要好用就行,模板地址:https://grafana.com/dashboards

就可以看到曲线图了(cAdvisor就是监控docker的)

4、监控linux的cpu、内存等网络信息,安装node-explore(据说最好安装在linux上)

docker run -d -p 9100:9100 --name=node-exporter \
-v “/proc:/host/proc:ro” \
-v “/sys:/host/sys:ro” \
-v “/:/rootfs:ro” \
-v /etc/localtime:/etc/localtime:ro \
–net=“host” \
prom/node-exporter
访问 http://192.168.200.137:9100就能看到效果
访问:http://192.168.200.137:9100/metrics有数据就说明node-explore是启动好了的

在prometheus.yml中加入:

- job_name: 'node-explore'static_configs:- targets: ['192.168.200.137:9100']labels:instance: node-explore

在访问prometheus就能看到效果:

选择模板9276就能看到监控的主机信息,其他模板随意试探,只要好用就行

5、监控springboot

5.1、在springboot中引入

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--prometheus监控  https://prometheus.io/docs/introduction/overview/--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency> 

这里没写版本号是因为:(pringboot自动找对应版本)

  <parent><version>2.2.5.RELEASE</version></parent>

5.2、 配置yml文件,暴露端口

management:endpoints:web:exposure:include: "*"base-path: /actuatorjmx:exposure:include: "*"endpoint:health:show-details: alwayshttptrace:enabled: truemetrics:enabled: truemetrics:export:prometheus:enabled: truetags:#为指标设置一个名为 ${spring.application.name}的Tag,Tag是Prometheus提供的一种能力,从而实现更加灵活的筛选application: ${spring.application.name}

5.3、配置
在主启动类上加

@Value("${spring.application.name}")
private String application;
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(){return (registry)->registry.config().commonTags("application",application);
}

5.4、 制作镜像
把springboot打成jar包,上传到 /usr/local/docker/monitor文件夹下,只要满足 /usr/local/docker/即可,monitor是自己建的。
写一个dockerfile,名字就叫 Dockerfile
vim Dockerfile

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER lc <513778675@qq.com>
# VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为monitor.jar
ADD monitor.jar monitor.jar
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/monitor.jar"]

生成docker镜像:docker build -t monitor .(最后还有一个点,你别忘了)
这个时候docker images就能看到该镜像(我当前这个springboot是运行在8091端口的)
生成容器:docker run -d --name=monitor -p 8091:8091 monitor
这样就把springboot的jar包生成容器在docker上运行起来了
访问:http://192.168.200.137:8091/metrics有数据就说明node-explore是启动好了的

5.5、 配置prometheus

  - job_name: 'monitor'metrics_path: '/actuator/prometheus'static_configs:- targets: ['192.168.200.137:8091']  labels:instance: monitor

注意这里多了一个metrics_path因为prometheus默认是前缀http://,后缀是/metrics,但是springboot通过actuator暴露出来端点是默认有/actuator的 所以这里要重新配置采集数据的路径 。

在grafana上引入模板,监控springboot我用的是 12900模板,其他模板随意试探,只要好用就行

就能看到图形效果

如果看不到 选一下 Application的下拉选和时间范围

6.实例监控与遇到的问题
以我本地启动项目 macro-auth 为例:

①注意引入的版本号:springboot的版本号是2.2.5.RELEASE 而引入的prometheus版本号是1.3.5 (版本不正确会报错)actuator的版本号是2.5.0
②我的 macro-auth 若是直接访问(以登录接口为例)的地址是:localhost:20001/auth/sys-user/login通过网关访问的地址是:localhost:20000/api/auth/sys-user/login
③配置步骤:
3.1 springboot引入依赖包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--prometheus监控  https://prometheus.io/docs/introduction/overview/-->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
3.2 配置yml文件
management:endpoints:web:base-path: /actuatorexposure:include: "*"jmx:exposure:include: "*"endpoint:health:show-details: alwayshttptrace:enabled: truemetrics:enabled: true
3.3 配置prometheus的yml(prometheus.yml)

只列出关键相关配置:(targets只写ip+端口,如有其他路径配置写在metrics_path里)

scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"metrics_path: '/api/auth/actuator/prometheus'# scheme defaults to 'http'.static_configs:- targets: ["localhost:20000"]
3.4 访问

直接访问 http://localhost:20000/api/auth/actuator/prometheus有数据返回则是通了
启动prometheus:访问http://localhost:9090/targets就看到服务监控到了
在grafana中监控prometheus并且下载模板号12900 即可完成对springboot的监控

7.监控受springsecurity安全保护的资源服务器

7.1 以我本地 macro-order为例

导包和yml配置与第6步相同,不再赘述

7.2 网关配置白名单

访问prometheus的路径放入白名单,不做拦截。GateWayFilterConfig类中
在这里插入图片描述

网关配置文件 yml中

在这里插入图片描述

7.3 在资源服务order中配置此路径不拦截。ResourceConfigServer类中

在这里插入图片描述
这里macro-order中的过滤器可能会报错,因为获取不到json-token。在TokenAuthenticationFilter类中
在这里插入图片描述
这样在访问 http://localhost:20000/api/order/actuator/prometheus就可以拿到数据了


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

相关文章

语言模型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…

Java单元测试介绍

文章目录 单元测试单元测试基本介绍单元测试快速入门单元测试常用注解 单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单元测试就是针对Java方法的测试&#xff0c;…

Jupyter 配置 Java环境,写Java代码,测试成功

本次简单诉说下怎么通过jupyter安装iJava&#xff0c;写Java代码。 安装Java的不说了 我使用的是Java15 然后去&#xff1a;https://github.com/SpencerPark/IJava/releases 下载zip&#xff0c;不要下载其他的 得到就是一个py文件 下面就是一个 python install.py 我这里就…

java调用python执行脚本,附代码

最近有个功能需要java调用python脚本实现一些功能&#xff0c;前期需要做好的准备&#xff1a;配置好python环境&#xff0c;如下&#xff1a; 以下展示的为两种&#xff0c;一种为生成图片&#xff0c;另一种为生成字符串。 package com.msdw.tms.common.utils.py;import ja…