目录
本文概览:介绍了Micrometer的作用、与Spring boot比较、与dropwizard-metrics比较以及与Spring boot 集成。
1 Micrometer介绍
1.1 功能
如何理解Micrometer?可以当成dropwizard-metrics来理解,和dropwizar-metrics功能一样,都是做度量指标收集。提供功能,如下:(参考:https://micrometer.io/)
1、提供了Dimentsion维度的数据
提供了记录度量指标类(Timers、Guauges、Counters等)。通过micrometer-core包中实现。
2、系统指标的收集,在micrometer-core中都继承自MeterBinder.class。这些类需要绑定到MeterRegtry上才可以进行手机指标,在micrometer-spring-legacy 中MeterRegistryPostProcessor来绑定这些类。
3、支持向监控系统发送指标
接入不同监控系统,如Influxdb、Graphite等。可以通过“micrometer-registry-xx”包来指定使用哪个监控系统。
4、与spring整合
(1)Spring2.0
在spring boot actuator中使用了Micrometer
(2)Spring1.5x
使用micrometer-spring-legacy来使用Micrometer。
(3)其他(包括spring boot1.x(小于1.5)以及传统spring mvc项目)
待完善
1.2 Micrometer与Spring Boot Actuator比较
在spring2.x之后,Spring boot actuator使用了Micrometer来实现监控。但是在spring 2之前 Spring boot actuator 并没有使用Micrometer,而是类似如自己之前写的统计监控指标的sdk,使用了dropwizard-metrics,所以Spring1.x与Micrometer没有任何关系。
- Spring boot 2使用mircrometer进行统计数据和发布数据到监控系统,例如之前写的统计监控指标的sdk,是使用了dropwizard-metrics
- 为了更好理解Spring boot 1和spring boot2区别,可以理解为spring boot1是通过dropwizard-metrics实现的,spring boot2 通过micrometer来实现
在Spring boot1.5x中还可以通过micrometer-spring-legacy来使用micrometer(此时就不需要引入spring boot actuator包了,因为legacy和acuator都是为了实现监控是功能等同的包),但是之前版本是不支持的。从这个角度讲Spring boot2 acutar相当于实现了micrometer-spring-legacy
Spring Boot Actuator使用 ,参考:
1.3 Micrometer与dropwizard-metrics
二者关系:dropwizard-metrics和micrometer都是度量工具包,但是没有任何关系。
二者不同点:在于Micrometer支持tags,即一组keys联合标识一个唯一键。
参考下 https://juejin.im/post/5aad3351f265da23994e4ce7
1、dropwizard-metrics
1 2 3 4 |
### MetricRegistry #### //String 就是指标名称,如xxx/xx_Count。 private final ConcurrentMap<String, Metric> metrics; |
dropwizard-metrics可以参考:
2、Mircrometer
1 2 3 |
### MetricRegistry #### private volatile PMap<Id, Meter> meterMap = HashTreePMap.empty(); |
其中ID的定义如下,可以看到通过一组tags的值标识一个唯一的key
1 2 3 4 5 6 7 8 |
class Id { private final String name; // Micoremeter支持tags维度的指标 private final List<Tag> tags; private Type type; } |
2 Micrometer与spring boot集成
1、使用Micrometer的方法有两种常用方法:
官网安装:https://micrometer.io/docs/installing
- 方式1:通过maven引入“micrometer-spring-legacy”,在Springboot 1.5x情况下。
- 方式2:通过maven引入 “spring boot 2 actuator” 。
2、micrometer-spring-legacy和micrometer-core、micrometer-registry-influx关系
- micrometer-spring-legacy使用Micrometer-core中指标记录器,如提供通过WebMvcMetricsFilte记录http request的指标,该filter可以加载 micrometer-registry-influx中InfluxMeterRegestry,将指标数据保存到influxdb。
- micrometer-registry-influx,提供了一个InfluxMeterRegestry,继承自microemeter-core中MeterRegtry向influxdb定时发送数据。
2.1 spring boot 1.5.x
使用文档参考:https://micrometer.io/docs/ref/spring/1.5
1、maven库
相比spring boot 2.0需要多引入一个micrometer-spring-legacy。
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-spring-legacy</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> <version>1.0.4</version> </dependency> |
2、配置文件
参考:https://micrometer.io/docs/registry/influx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
management.metrics.export.influx: auto-create-db: true # Whether to create the Influx database if it does not exist before attempting to publish metrics to it. (Default: true) batch-size: 10000 # Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made. (Default: 10000) compressed: true # Whether to enable GZIP compression of metrics batches published to Influx. (Default: true) connect-timeout: 1s # Connection timeout for requests to this backend. (Default: 1s) consistency: one # Write consistency for each point. (Default: one) db: mydb # Tag that will be mapped to "host" when shipping metrics to Influx. (Defaut: mydb) enabled: true # Whether exporting of metrics to this backend is enabled. (Default: true) num-threads: 2 # Number of threads to use with the metrics publishing scheduler. (Default: 2) password: mysecret # Login password of the Influx server. read-timeout: 10s # Read timeout for requests to this backend. (Default: 10s) retention-policy: my_rp # Retention policy to use (Influx writes to the DEFAULT retention policy if one is not specified). step: 1m # Step size (i.e. reporting frequency) to use. (Default: 1m) uri: http://localhost:8086 # URI of the Influx server. (Default: http://localhost:8086) user-name: myusername # Login user of the Influx server. |
按上面的属性都会初始化给InfluxdbConfig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
InfluxConfig config = new InfluxConfig() { @Override public Duration step() { return Duration.ofSeconds(10); } @Override public String db() { return "mydb"; } @Override public String get(String k) { return null; // accept the rest of the defaults } }; MeterRegistry registry = new InfluxMeterRegistry(config, Clock.SYSTEM); |
在使用时,我们只需要修改如下两个配置就可以
1 2 |
management.metrics.export.influx.uri=http://localhost:8086 management.metrics.export.influx.db=myapp-name // 在初始化时,会在influxdb中创建这个名称的数据库 |
2.2 接入 spring boot 2.0
使用文档参考:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-metrics
1、maven库
可以理解为Spring boot2.0 集成了micrometer-spring-legacy 的功能,所以不需要再引入micrometer-spring-legacy。
1 2 3 4 5 6 7 8 9 10 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> <version>1.0.4</version> </dependency> |
2、配置
同上spring boot 1.5x。
2.3 其他项目
在普通spring mvc项目或者spring boot 1.5x版本以下项目中如何使用。(待完善)
3 应用实例
3.1 部署
流程如下
1、环境:
以spring boot1.5x + influx为例为例。
2、搭建spring boot工程
在pom.xml中引入了micrometer-spring-legacy和micrometer-registry-influx就可以了。在配置文件中配置influxdb的地址,默认情况下http://localhost:8086,数据库名称默认为mydb。
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-spring-legacy</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> <version>1.0.4</version> </dependency> |
参考:Sprng boot 实例
3、搭建influxdb
参考:influxDb介绍和部署
4、运行springboot之后,就会有指标灌进去,可以查看指标
在run日志中有
查看influxdb,数据库名称默认为mydb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
> show measurements; name: measurements name ---- # 1、datasource信息 dataSource_connections_active dataSource_connections_max dataSource_connections_min http_server_requests # 2、jvm信息 jvm_buffer_count jvm_buffer_memory_used jvm_buffer_total_capacity jvm_classes_loaded jvm_classes_unloaded jvm_gc_live_data_size jvm_gc_max_data_size jvm_gc_memory_allocated jvm_gc_memory_promoted jvm_gc_pause jvm_memory_committed jvm_memory_max jvm_memory_used jvm_threads_daemon jvm_threads_live jvm_threads_peak logback_events # 3、process信息 process_cpu_usage process_files_max process_files_open process_start_time process_uptime # 4、系统信息 system_cpu_count system_cpu_usage system_load_average_1m # 5、tomcat信息 tomcat_cache_access tomcat_cache_hit tomcat_global_error tomcat_global_received tomcat_global_request tomcat_global_request_max tomcat_global_sent tomcat_servlet_error tomcat_servlet_request tomcat_servlet_request_max tomcat_threads_busy tomcat_threads_config_max tomcat_threads_current |
5、通过Grafana查看指标
3.2 代码入口
在micrometer-spring-legacy 包的WebMvcMetricsFilter。
参考: Micormeter两个包-micrometer-spring-legacy和micrometer-registry-influx
Micrometer两个包-micrometer-spring-legacy和micrometer-registry-influx
参考资料
1、官网文档:https://micrometer.io/docs/concepts
2、官网首页 https://micrometer.io/docs/
3、spring boot 2.0 的官网
https://docs.spring.io/spring-boot/docs/2.0.x/reference/htmlsingle/
4、spring boot1.5x的官网
https://docs.spring.io/spring-boot/docs/1.5.x/reference/htmlsingle/
5、使用 Micrometer 记录 Java 应用性能指标 https://www.ibm.com/developerworks/cn/java/j-using-micrometer-to-record-java-metric/index.html
6、Migrating Spring Applications from DropWizard Metrics to Micrometer https://medium.com/expedia-group-tech/migrating-spring-applications-from-dropwizard-metrics-to-micrometer-5433f481f541