Prometheus(2):SpringBoot 2.X集成Prometheus

1、springboot接入Prometheus

1.1pom.xml引入jar包

	<dependencies>
		<!--micometer获取jvm相关信息,用于展示在Grafana上-->
		<dependency>
			<groupId>io.github.mweirauch</groupId>
			<artifactId>micrometer-jvm-extras</artifactId>
			<version>0.1.4</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!--micrometer核心包,桥接Promethus-->
		<dependency>
			<groupId>io.micrometer</groupId>
			<artifactId>micrometer-registry-prometheus</artifactId>
			<version>1.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>build-info</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
				<version>2.2.6</version>
				<executions>
					<execution>
						<goals>
							<goal>revision</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>

1.2yml文件配置如下

# 将应用名称添加到计量器的 tag 中去
# 以便 Prometheus 根据应用名区分不同服务
spring.application.name=PrometheusApplication
management.metrics.tags.application=${spring.application.name}
# 打开所有 Actuator 服务
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude = env, beans

#可远程关闭服务
management.endpoint.shutdown.enabled=true
management.metrics.export.simple.enabled=false

info.author=cutePanda123
info.mobile=handsome

1.3设置启动程序定时执行

@SpringBootApplication
@EnableScheduling
public class PrometheusApplication {

	public static void main(String[] args) {
		SpringApplication.run(PrometheusApplication.class, args);
	}

}

1.4MeterBinder接口实现bind方法注册到MeterRegistry

package com.imooc.springboot.prometheus.metrics;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class MetricsBinder implements MeterBinder {
    public Counter counter1;
    public Counter counter2;
    public Map<String, Double> map;

    public MetricsBinder() {
        map = new ConcurrentHashMap<>();
    }

    @Override
    public void bindTo(MeterRegistry meterRegistry) {
        this.counter1 = Counter.
                builder("PrometheusApplication.demo.counter").
                tags(new String[] {"name", "counter1"}).
                description("This is the first counter").
                register(meterRegistry);

        this.counter2 = Counter.
                builder("PrometheusApplication.demo.counter").
                tags(new String[] {"name", "counter2"}).
                description("This is the second counter").
                register(meterRegistry);

        Gauge.builder("PrometheusApplication.demo.gauge", map, x->x.get("x"))
                .tags("name", "gauge1")
                .description("This is a gauge")
                .register(meterRegistry);
    }
}

1.5编写业务代码逻辑更新metrics

package com.imooc.springboot.prometheus.metrics;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTask {
    @Autowired
    MetricsBinder metricsBinder;

    private int count1;
    private int count2;


    @Scheduled(fixedRate = 1000)
    public void increment1() {
        count1++;
        metricsBinder.counter1.increment();
        metricsBinder.map.put("x", Double.valueOf(count1));
        System.out.println("increment 1 count: " + count1);
    }

    @Scheduled(fixedRate = 10000)
    public void increment2() {
        count2++;
        metricsBinder.counter2.increment();
        metricsBinder.map.put("x", Double.valueOf(count2));
        System.out.println("increment 2 count: " + count2);
    }
}

执行后结果如下:

扫描二维码关注公众号,回复: 13278153 查看本文章

查看接口,注意metrics是分级访问的结构

2、springboot接入Prometheus

2.1配置Prometheus endpoint

进入Prometheus目录,配置

重启Prometheus后,在http://locahost:9090/graph界面输入up查看是否已经配置成功

2.2使用Grafana模板是4701

https://grafana.com/grafana/dashboards/4701

在Grafana上Import4701即可

访问Grafana:http://localhost:3000/

输入要导入的模板的编号4701,如果是没有网络的情况,可以将模板下载下来,然后通过Upload JSON file来实现。

添加Prometheus数据源,Prometheus数据源指向刚刚配置接受数据Springboot上传的Prometheus;我这里是http://locahost:9090

在做好以上步骤后,就可以在Grafana看到jvm 监控数据了(注意:有时候数据上传比较慢,需要稍作等待)

猜你喜欢

转载自blog.csdn.net/u013938578/article/details/118948060