Prometheus采集Java程序指标信息

Posted YOYOFx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus采集Java程序指标信息相关的知识,希望对你有一定的参考价值。

采集Java程序JVM信息

创建 Spring Boot Application 应用程序

进行 https://start.spring.io 使用版本 Spring Boot v2.7.11和JDK 17,并创建一个具有以下依赖项的简单JAVA应用程序。

  • Spring Boot Actuator (Ops)
  • Prometheus (Observability)
  • Spring Web (Optional: only to create a simple REST controller.)

Maven POM 会生成以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <scope>runtime</scope>
</dependency>

接下来,我们需要公开一个执行器端点,Prometheus将通过该端点以Prometheus能够理解的格式收集指标数据。为此,我们需要添加以下属性。

management.endpoints.web.exposure.include=prometheus

接下来,让我们添加一个简单的控制器和一个简单的接口端点。

@RestController
@SpringBootApplication
public class MonitorApplication 

	public static void main(String[] args) 
		SpringApplication.run(MonitorApplication.class, args);
	
	
	@GetMapping("/hello")
	public String hello() 
		return "Hello World!";
	

现在,让我们启动应用程序并打开以下URL。

http://localhost:8080/actuator/prometheus

打开上述端点后,您将发现以下格式的一些指标数据,例如:

jvm_memory_used_bytesarea="heap",id="G1 Survivor Space", 1005592.0

Prometheus 使用 PushGateway 进行数据上报采集

参考技术A Pushgateway是prometheus的一个重要组件,利用该组件可以实现自动以监控指标,从字面意思来看,该部件不是将数据push到prometheus,而是作为一个中间组件收集外部push来的数据指标,prometheus会定时从pushgateway上pull数据。
【注意】如果client一直没有推送新的指标到pushgateway,那么Prometheus获取到的数据是client最后一次push的数据,直到指标消失(默认5分钟)。
Prometheus本身是不会存储指标的,但是为了防止pushgateway意外重启、工作异常等情况的发送,在pushgateway处允许指标暂存,参数--persistence.interval=5m,默认保存5分钟,5分钟后,本地存储的指标会删除。

使用pushgateway的理由:
  1、prometheus默认采用pull模式,由于不在一个网络或者防火墙的问题,导致prometheus 无法拉取各个节点的数据。
  2、监控业务数据时,需要将不同数据汇总,然后由prometheus统一收集

pushgateway的缺陷:
  1、多个节点的数据汇总到pushgateway,当它宕机后影响很大
  2、pushgateway可以持续化推送所有的监控数据,即使监控已经下线,还会获取旧的监控数据。需手动清理不需要的数据
  3、重启后数据丢失

1、docker 启动pushgateway

2、访问9091端口( http://pushgatewayIP:9091 )

3、在prometheus中添加pushgateway节点

打开prometheus的配置文件

作用:如果没有设置instance标签,Prometheus服务器也会附加标签,否则instance标签值会为空   
重启prometheus后,登陆web UI,查看prometheus的targets

4、API 方式 Push 数据到 PushGateway
接下来,我们要 Push 数据到 PushGateway 中,可以通过其提供的 API 标准接口来添加,默认 URL 地址为:http://<ip>:9091/metrics/job/<JOBNAME>/<LABEL_NAME>/<LABEL_VALUE>,其中 <JOBNAME> 是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/<INSTANCE_NAME> 实例名称标签,来方便区分各个指标。

以上是关于Prometheus采集Java程序指标信息的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus监控指标的label注入方法

SpringBoot 使用Prometheus采集自定义指标数据

SpringBoot 使用Prometheus采集自定义指标数据

Prometheus 使用 PushGateway 进行数据上报采集

flask编写prometheus采集指标脚本

番外篇-Prometheus入门