广告
返回顶部
首页 > 资讯 > 精选 >Prometheus如何监控Springboot程序
  • 244
分享到

Prometheus如何监控Springboot程序

2023-06-14 05:06:52 244人浏览 泡泡鱼
摘要

这篇文章主要介绍prometheus如何监控SpringBoot程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 添加依赖我本次使用的springboot版本为1.5.12.RELEASE,如果是Springb

这篇文章主要介绍prometheus如何监控SpringBoot程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. 添加依赖

我本次使用的springboot版本为1.5.12.RELEASE,如果是Springboot2.0+,那么监控的配置以及吐出的监控指标会有所不同。
添加Maven依赖,pom文件配置如下:

<dependency>   <groupId>io.prometheus</groupId>   <artifactId>simpleclient_spring_boot</artifactId>   <version>${prometheus.client.version}</version>  </dependency>  <dependency>   <groupId>io.prometheus</groupId>   <artifactId>simpleclient</artifactId>   <version>${prometheus.client.version}</version>  </dependency>  <dependency>   <groupId>io.prometheus</groupId>   <artifactId>simpleclient_hotspot</artifactId>   <version>${prometheus.client.version}</version>  </dependency>

其中Prometheus的版本号为:

<prometheus.client.version>0.5.0</prometheus.client.version>

2. 修改配置文件

修改application.properties配置文件,添加如下内容:

server.port=8080# 启用基础认证security.basic.enabled = false# 安全路径列表,逗号分隔,此处只针对/admin路径进行认证security.basic.path = /admin# 认证使用的用户名security.user.name = admin# 认证使用的密码。 默认情况下,启动时会记录随机密码。security.user.passWord = 123456# 可以访问管理端点的用户角色列表,逗号分隔management.security.roles = SUPERUSER# actuator暴露接口使用的端口,为了和api接口使用的端口进行分离management.port = 8099# actuator暴露接口的前缀management.context-path = /admin# actuator是否需要安全保证management.security.enabled = false# actuator的metrics接口是否需要安全保证endpoints.metrics.sensitive = false# actuator的metrics接口是否开启endpoints.metrics.enabled=true# actuator的health接口是否需要安全保证endpoints.health.sensitive=false# actuator的health接口是否开启endpoints.health.enabled=true

application.yml 配置如下:

# actuator是否需要安全保证management.security.enabled: falseendpoints: metrics: # actuator的metrics接口是否需要安全保证 sensitive: false # actuator的metrics接口是否开启 enabled: true health: # actuator的health接口是否需要安全保证 sensitive: false # actuator的health接口是否开启 enabled: true

3. 启用Prometheus监控

在Springboot启动类上添加注解@EnablePrometheusEndpoint,同时使用simpleclient_hotspot中提供的DefaultExporter该Exporter会在metrics endpoint中放回当前应用JVM的相关信息

@SpringBootApplication@EnablePrometheusEndpoint@EnableSpringBootMetricsCollectorpublic class CaseApplication implements CommandLineRunner { public static void main(String[] args) {  SpringApplication.run(CaseApplication.class, args); } @Override public void run(String... strings) throws Exception {  DefaultExports.initialize(); }}

4. 监控埋点

4.1 新建拦截器

建立一个拦截器,用来拦截URL。

public class PrometheusMetricsInterceptor implements HandlerInterceptor { private Histogram.Timer histogramRequestTimer; private Histogram.Timer NacosTimer; private Histogram.Child nacosChild; static final Histogram requestLatencyHistogram = Histogram.build().labelNames("path", "method", "code")   .name("io_namespace_Http_requests_latency_seconds_histogram").help("Request latency in seconds.")   .reGISter(); @Override public boolean preHandle(httpservletRequest request, HttpServletResponse response, Object handler) throws Exception {  System.out.println("-------Histogram--------");  histogramRequestTimer = requestLatencyHistogram    .labels(request.getRequestURI(), request.getMethod(), String.valueOf(response.getStatus()))    .startTimer();  nacosTimer = MetricsMonitor.getConfigRequestMonitor(request.getMethod(), request.getRequestURI(), String.valueOf(response.getStatus()));  nacosChild = MetricsMonitor.getNamingRequestMonitor(request.getMethod(), request.getRequestURI(), String.valueOf(response.getStatus()));  return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  histogramRequestTimer.observeDuration();  nacosTimer.observeDuration();  nacosChild.startTimer(); }}

4.2 注册拦截器

新建拦截器后需要注册到服务中才可以拦截URL。

@Configurationpublic class WEBServletContextConfiguration extends WebmvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) {  registry.addInterceptor(getInterceptor()).addPathPatterns("/**");  super.addInterceptors(registry); } @Bean public HandlerInterceptor getInterceptor() {  return new PrometheusMetricsInterceptor(); }}

5. 验证监控

启动应用程序,访问地址
http://localhost:8099/admin/prometheus,验证是否存在监控指标。

Prometheus如何监控Springboot程序

6. 指标类型

普罗米修斯客户端库提供了四种核心度量类型。目前,它们只在客户端库(为了使api能够根据特定类型的使用而定制)和wire协议中有所区别。Prometheus服务器还没有利用类型信息,并将所有数据压缩成无类型的时间序列。这种情况在未来可能会改变。

6.1 Counter

计数器是一个累积度量,它表示一个单调递增的计数器,其值在重新启动时只能递增或重置为零。例如,您可以使用计数器来表示服务的请求、完成的任务或错误的数量。
不要使用计数器来暴露可能降低的值。例如,不要为当前正在运行的进程的数量使用计数器;而是使用量规。
示例代码:

import io.prometheus.client.Counter;class YourClass { static final Counter requests = Counter.build()  .name("requests_total").help("Total requests.").register(); void processRequest() { requests.inc(); // Your code here. }}

6.2 Gauge

量规是一个度量单位,它表示一个可以任意上下移动的数值。
压力表通常用于测量温度或当前内存使用情况等测量值,但也用于“计数”,比如并发请求的数量。
示例代码:

class YourClass { static final Gauge inprogressRequests = Gauge.build()  .name("inprogress_requests").help("Inprogress requests.").register(); void processRequest() { inprogressRequests.inc(); // Your code here. inprogressRequests.dec(); }}

6.3 Histogram

直方图对观察结果(通常是请求持续时间或响应大小之类的东西)进行采样,并在可配置的桶中计数。它还提供所有观测值的和。
示例代码:

class YourClass { static final Histogram requestLatency = Histogram.build()  .name("requests_latency_seconds").help("Request latency in seconds.").register(); void processRequest(Request req) { Histogram.Timer requestTimer = requestLatency.startTimer(); try {  // Your code here. } finally {  requestTimer.observeDuration(); } }}

6.4 Summary

与柱状图类似,摘要对观察结果进行采样(通常是请求持续时间和响应大小之类的内容)。虽然它还提供了观察值的总数和所有观察值的总和,但它计算了一个滑动时间窗口上的可配置分位数。

class YourClass { static final Summary receivedBytes = Summary.build()  .name("requests_size_bytes").help("Request size in bytes.").register(); static final Summary requestLatency = Summary.build()  .name("requests_latency_seconds").help("Request latency in seconds.").register(); void processRequest(Request req) { Summary.Timer requestTimer = requestLatency.startTimer(); try {  // Your code here. } finally {  receivedBytes.observe(req.size());  requestTimer.observeDuration(); } }}

6.5 自定义Collector

有时不可能直接测试代码,因为它不在您的控制范围内。这要求您代理来自其他系统的指标。
为此,您需要创建一个自定义收集器(需要将其注册为普通度量)。

class YourCustomCollector extends Collector { List<MetricFamilySamples> collect() { List<MetricFamilySamples> mfs = new ArrayList<MetricFamilySamples>(); // With no labels. mfs.add(new GaugeMetricFamily("my_gauge", "help", 42)); // With labels GaugeMetricFamily labeledGauge = new GaugeMetricFamily("my_other_gauge", "help", Arrays.asList("labelname")); labeledGauge.addMetric(Arrays.asList("foo"), 4); labeledGauge.addMetric(Arrays.asList("bar"), 5); mfs.add(labeledGauge); return mfs; }}// Registrationstatic final YourCustomCollector requests = new YourCustomCollector().register()

7. 安装配置Prometheus

7.1 安装配置

下载安装包

wget https://GitHub.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz

解压文件

tar -zxvf prometheus-2.12.0.linux-amd64.tar.gz

修改配置文件prometheus.yml采集Nacos metrics数据。配置监控的job以及目标服务器,每一个目标服务器都是一个实例。

cd prometheus-*

Prometheus如何监控Springboot程序

后台启动Prometheus服务,并出到日志

./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

通过访问http://{ip}:9090/graph可以看到prometheus的采集数据,在搜索栏搜索监控指标,例如:nacos_monitor可以搜索到Nacos数据说明采集数据成功

Prometheus如何监控Springboot程序

在查询条件框中输入表达式,进行统计。例如:

sum(rate(nacos_client_request_seconds_count{url=~'/dialog/slu/NLP/parser', instance=~'39.97.161.102:30315|39.97.161.102:30316'}[1m])) by (method,url,instance)

结果如下图:

Prometheus如何监控Springboot程序

8. 安装配置Grafana

 8.1 安装配置

安装grafana,下载安装包

wget https://dl.grafana.com/oss/release/grafana-6.5.2.linux-amd64.tar.gztar -zxvf grafana-6.5.2.linux-amd64.tar.gz

修改端口配置,复制一个配置文件,后续修改基于该自定义配置文件修改,不需要修改原始文件。

cd grafana-6.5.2/confcp sample.ini custom.inivi custom.ini

可以在该配置文件中修改端口号

Prometheus如何监控Springboot程序

访问grafana: http://{ip}:3000,用户名密码默认为:admin/admin。

Prometheus如何监控Springboot程序

登录时提示修改默认密码,如果不想修改可以跳过。

8.2 配置数据源

Prometheus如何监控Springboot程序

Prometheus如何监控Springboot程序

Prometheus如何监控Springboot程序

Prometheus如何监控Springboot程序

8.3 配置监控面板

监控面板可以自己配置,也可以通过导入JSON文件来进行修改,推荐使用配置好的json文件,修改起来会非常方便。

Prometheus如何监控Springboot程序

Prometheus如何监控Springboot程序

Prometheus如何监控Springboot程序

修改后的展示效果如图所示:

Prometheus如何监控Springboot程序

注:此处grafana的模板文件是从别处下载的,可以根据需要导入自己的模板文件。

以上是“Prometheus如何监控Springboot程序”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Prometheus如何监控Springboot程序

本文链接: https://www.lsjlt.com/news/268233.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Prometheus如何监控Springboot程序
    这篇文章主要介绍Prometheus如何监控Springboot程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 添加依赖我本次使用的Springboot版本为1.5.12.RELEASE,如果是Springb...
    99+
    2023-06-14
  • Prometheus监控Springboot程序的实现方法
    目录1. 添加依赖2. 修改配置文件3. 启用Prometheus监控4. 监控埋点4.1 新建拦截器4.2 注册拦截器5. 验证监控6. 指标类型6.1 Counter6.2 Ga...
    99+
    2022-11-11
  • SpringBoot如何使用prometheus监控
    这篇文章主要介绍SpringBoot如何使用prometheus监控,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.关于PrometheusPrometheus是一个根据应用的metrics来进行监控的开源工具。相...
    99+
    2023-06-14
  • prometheus监控节点程序如何安装及卸载
    这篇文章主要介绍“prometheus监控节点程序如何安装及卸载”,在日常操作中,相信很多人在prometheus监控节点程序如何安装及卸载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”prometheus监...
    99+
    2023-07-02
  • prometheus+grafana如何监控nginx
    这篇文章主要介绍prometheus+grafana如何监控nginx,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在prometheus需要向ngxin中打入探针,通过探针获取ngxin信息,并通过接口输出。下文将...
    99+
    2023-06-21
  • SpringBoot使用prometheus监控的示例代码
    目录1.关于Prometheus2.有关Grafana3.SpringBoot使用Prometheus3.1 依赖内容3.2 配置文件3.3 设置application4.Prome...
    99+
    2022-11-11
  • Grafana+Prometheus如何监控MySql服务
    这篇文章主要为大家展示了“Grafana+Prometheus如何监控MySql服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Grafana+Prometh...
    99+
    2022-10-18
  • prometheus client_go为应用程序自定义监控指标
    目录使用prometheus client_go为应用程序添加监控指标原因去掉Proc和Go指标使用prometheus client_go为应用程序添加监控指标 使用promet...
    99+
    2023-02-15
    prometheus client_go监控指标 go监控指标
  • python如何获取Prometheus监控数据
    目录获取Prometheus监控数据获取Prometheus target数据获取Prometheus 监控信息(cpu、mem、disks)通过promsql读取prometheu...
    99+
    2022-11-11
  • 如何自定义Prometheus监控指标
    本篇内容介绍了“如何自定义Prometheus监控指标”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目前大部分使用Spring  ...
    99+
    2023-06-17
  • prometheus监控节点程序的安装及卸载命令
    目录安装监控服务卸载监控程序本教程基于AlpineLinux,请注意将apk相关命令替换为对应系统的包命令,比如apt、yum等。 安装监控服务 apk add prometheus...
    99+
    2022-11-13
  • CentOS7如何搭建Prometheus监控Linux主机
    这期内容当中小编将会给大家带来有关CentOS7如何搭建Prometheus监控Linux主机,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 简介prometheus可以拆分成多个节点进行指标收...
    99+
    2023-06-15
  • Grafana + Prometheus如何快速搭建监控平台
    小编给大家分享一下Grafana + Prometheus如何快速搭建监控平台,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!总体可视化方案Grafana:通过将采...
    99+
    2023-06-15
  • Python如何调用Prometheus监控数据并计算
    小编给大家分享一下Python如何调用Prometheus监控数据并计算,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Prometheus是什么Prometheu...
    99+
    2023-06-22
  • 如何使用Prometheus监控Linux系统各项指标
    这篇文章主要讲解了“如何使用Prometheus监控Linux系统各项指标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Prometheus监控Linux系统各项指标”吧!首先在Li...
    99+
    2023-06-05
  • 小程序如何监控接口
    小编给大家分享一下小程序如何监控接口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!小程序新增自定义业务数据监控功能。开发者可自定义监控数据上报,在小程序管理后台配...
    99+
    2023-06-26
  • 怎么在SpringBoot中利用Prometheus和Grafana实现实现应用监控和报警功能
    这篇文章将为大家详细讲解有关怎么在SpringBoot中利用Prometheus和Grafana实现实现应用监控和报警功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SpringBoot的...
    99+
    2023-06-06
  • springboot线程池监控的简单实现
    目录背景代码代码类结构线程池扩展类线程工具类线程bean类线程池实现类线程池监控接口类运行结果背景 在我们实际项目开发中,常常会为不同的优先级的任务设置相对应的线程池。一般我们只关注...
    99+
    2022-11-13
  • Jvisualvm监控远程SpringBoot项目的方法
    这篇文章主要介绍了Jvisualvm监控远程SpringBoot项目的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Jvisualvm监控远程SpringBoot项目的方法文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
  • Jvisualvm监控远程SpringBoot项目的过程详解
    目录JMX1.修改SpringBoot启动参数2.使用本地jvisualvm监控远程jstatd1.添加配置2.使用本地jvisualvm监控远程注意:VisualVM连接远程服务器...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作