使用Prometheus监控Java应用性能

ops/2024/11/14 1:13:36/

使用Prometheus监控Java应用性能

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何使用Prometheus监控Java应用的性能。

一、引入Prometheus客户端库

在Java应用中使用Prometheus进行监控,首先需要引入Prometheus的客户端库。在Maven项目中,可以在pom.xml文件中添加以下依赖:

<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient</artifactId><version>0.10.0</version>
</dependency>
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_httpserver</artifactId><version>0.10.0</version>
</dependency>
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_hotspot</artifactId><version>0.10.0</version>
</dependency>
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_common</artifactId><version>0.10.0</version>
</dependency>

二、创建指标

Prometheus使用不同类型的指标来收集和暴露应用的性能数据。主要有以下几种:

  • Counter:用于计数,例如请求的次数。
  • Gauge:用于表示一个可以上下浮动的值,例如当前的内存使用量。
  • Histogram:用于观察一段时间内的值的分布,例如请求的延迟时间。
  • Summary:与Histogram类似,但更注重百分位数的数据。

下面是一个示例代码,演示如何在Java应用中创建和使用这些指标:

java">package cn.juwatech.monitoring;import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import io.prometheus.client.Histogram;
import io.prometheus.client.Summary;
import io.prometheus.client.exporter.HTTPServer;
import io.prometheus.client.hotspot.DefaultExports;import java.io.IOException;public class MonitoringDemo {static final Counter requestCounter = Counter.build().name("requests_total").help("Total number of requests.").register();static final Gauge inprogressRequests = Gauge.build().name("inprogress_requests").help("Number of in-progress requests.").register();static final Histogram requestLatency = Histogram.build().name("requests_latency_seconds").help("Request latency in seconds.").register();static final Summary requestSize = Summary.build().name("requests_size_bytes").help("Request size in bytes.").register();public static void main(String[] args) throws IOException {// 启动Prometheus HTTP ServerHTTPServer server = new HTTPServer(1234);// 默认的JVM指标DefaultExports.initialize();// 模拟处理请求while (true) {processRequest();}}private static void processRequest() {requestCounter.inc();inprogressRequests.inc();Histogram.Timer requestTimer = requestLatency.startTimer();try {// 模拟请求处理int sleepTime = (int) (Math.random() * 1000);Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();} finally {requestTimer.observeDuration();inprogressRequests.dec();requestSize.observe(Math.random() * 1000);}}
}

三、暴露指标

上面的代码已经演示了如何通过HTTPServer在端口1234上暴露Prometheus指标。运行Java程序后,可以通过浏览器访问http://localhost:1234/metrics来查看暴露的指标。

四、配置Prometheus服务器

接下来,需要配置Prometheus服务器来抓取这些暴露的指标。在Prometheus的配置文件prometheus.yml中,添加如下内容:

scrape_configs:- job_name: 'java_app'static_configs:- targets: ['localhost:1234']

保存配置文件后,启动Prometheus服务器:

./prometheus --config.file=prometheus.yml

五、创建Grafana仪表盘

Prometheus收集到数据后,可以通过Grafana来进行可视化。安装和启动Grafana后,按照以下步骤操作:

  1. 添加Prometheus数据源。
  2. 创建新的仪表盘,并添加相应的图表。
  3. 在图表的查询框中输入Prometheus的查询语言(PromQL)来获取和显示指标数据。

例如,查询总请求次数的PromQL语句为:

requests_total

查询请求延迟直方图的PromQL语句为:

histogram_quantile(0.95, sum(rate(requests_latency_seconds_bucket[5m])) by (le))

六、总结

通过以上步骤,我们实现了使用Prometheus监控Java应用性能。我们介绍了如何在Java应用中创建和使用Prometheus指标,如何配置Prometheus服务器抓取指标,以及如何通过Grafana进行数据的可视化。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!


http://www.ppmy.cn/ops/87482.html

相关文章

MySQL——日期与时间类型

为了方便在数据库中存储日期和时间&#xff0c;MySQL 提供了表示日期和时间的数据类型分别是 YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下表列举了这些 MySQL 中日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值。 数据类型字节数取值范围日期格式零值YEAR119…

vue+node后台处理大文件切片上传--前端部分

本文主要介绍&#xff0c;在vue3vite项目下&#xff0c;如何进行有效的大文件上传&#xff0c;本文章主要讲大文件切片上传方式&#xff0c;并提供简单的demo代码供参考 首先&#xff0c;请确保已经创建好项目&#xff0c;这一步跳过。 1、为了选择合适的文件&#xff0c;我们…

Python酷库之旅-第三方库Pandas(060)

目录 一、用法精讲 231、pandas.Series.reorder_levels方法 231-1、语法 231-2、参数 231-3、功能 231-4、返回值 231-5、说明 231-6、用法 231-6-1、数据准备 231-6-2、代码示例 231-6-3、结果输出 232、pandas.Series.sort_values方法 232-1、语法 232-2、参数…

精心准备的高水平的博客【点评语】,来抄啊!

大家好&#xff0c;我是一名_全栈_测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家关注我&#xff0c;和我一起【分享测试知识&#xff0c;交流测试技术&#xff0c;趣聊行业热点】。 第 1 条 这篇博客文章如同灯塔般照亮了技…

从入门到自动化:一篇文章掌握Python的80%

Python作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能性&#xff0c;在全球编程社区内享有极高的声誉。本文将带领你从Python的基础语法入手&#xff0c;介绍其常用库的应用&#xff0c;以及如何将Python用于数据分析、网络爬虫和简单的自动化任务&#xff0…

什么是负责任的人工智能

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识AI 进阶&#xff1a;企业项目实战 可直接在橱窗里购买&#xff0c;或者到文末领取优惠后购买&#xff1a; 拥有权利的同时也被赋予了重大的…

Python可视化开发全面教程

Python是一种功能强大且易于学习的编程语言&#xff0c;它还提供了丰富的可视化库&#xff0c;如Matplotlib、Seaborn、Plotly和Bokeh。这些库使得数据可视化变得简单而直观。在本教程中&#xff0c;我们将介绍如何使用Python进行数据可视化&#xff0c;从基础知识到高级技巧。…

crack 基于golang的多并发爆破工具

一款轻巧的内网弱口令枚举工具&#xff0c;项目地址&#xff1a;GitHub - oksbsb/crack: 支持 ftp ssh smb mysql mssql postgres 安装 ​ git clone https://github.com/yanweijin/crack go build main.go基于用法 ➜ crack git:(master) ✗ go run main.go --help …