在Spring Boot 2.0中进行监控,使用Micrometer
这个月初(2018/3/1),Spring Boot 2.0发布了!
https://spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga
这次我将继续上次和上上次的话题,谈谈关于应用程序监控的内容,具体是关于在Spring Boot 2.0中的监控是如何处理的。
发布说明
关于监控部分,它在Spring Boot 2.0版本的发布说明的Micrometer章节中提及。
从Spring Boot 2.0开始,采用Micrometer作为度量的基础组件。
现在,让我们先了解一下Micrometer是什么。
微米计
我坦率地说,对于Micrometer这个词,我第一次听说。
当我查看首页的说明文时,
Micrometer为最流行的监控系统的仪器客户端提供了一个简单的外观,让您能够在JVM基础的应用程序代码中进行仪器化,而无需与特定供应商绑定。类似于SLF4J,但用于度量。
据说。
由于存在各种不同的监控工具,因此我理解Micrometer提供了一个无需关注这些监控工具而能够使用的通用接口。
目前我们支持的监控工具如下,看起来已经支持了一些主流的工具。
这些工具似乎可以通过统一的界面和简单的设置来开始监控。
-
- Atlas
-
- Datadog
-
- Ganglia
-
- Graphite
-
- Influx
-
- JMX
-
- New Relic
-
- Prometheus
-
- SignalFx
-
- StatsD
- Wavefront
实施监控
好的,接下来我们将实际进行监控的实施。
由于从Spring Boot 2.0版本开始,默认添加了Micrometer,因此实施本身应该很容易。
在进行各种确认的同时,这次我们将使用Prometheus来实施监控。下面是我们的步骤参考。
-
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-metrics
- https://micrometer.io/docs/registry/prometheus
首先,我们需要将Spring Boot Actuator添加为依赖项。
这是因为从Spring Boot 2.0开始,添加了Micrometer作为指标的基础部分,它是通过spring-boot-actuator-starter实现的。
确实,这里增加了微米测定仪。
此外,还需将所需的监控工具(本例中为micrometer-registry-prometheus)的依赖添加到pom.xml中。
(考虑到是Web应用程序,也添加了spring-boot-starter-web。)
<dependencies>
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
版本信息应该由spring-boot-starter-parent进行管理,因此不应该再进行额外的指定。
↓
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-dependencies/pom.xml#L123
由于添加了依赖项,将自动配置为用于Prometheus的Auto-configurated。
这是由于PrometheusMetricsExportAutoConfiguration类上的@ConditionalOnClass({PrometheusMeterRegistry.class})条件被满足。
@Configuration
@AutoConfigureBefore({CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class})
@AutoConfigureAfter({MetricsAutoConfiguration.class})
@ConditionalOnBean({Clock.class})
@ConditionalOnClass({PrometheusMeterRegistry.class})
@ConditionalOnProperty(
prefix = "management.metrics.export.prometheus",
name = {"enabled"},
havingValue = "true",
matchIfMissing = true
)
@EnableConfigurationProperties({PrometheusProperties.class})
public class PrometheusMetricsExportAutoConfiguration {
...
@ManagementContextConfiguration
public static class PrometheusScrapeEndpointConfiguration {
...
}
}
由于Prometheus是Pull模式,所以需要添加端点/actuator/prometheus。
端点的添加是由PrometheusMetricsExportAutoConfiguration的内部类PrometheusScrapeEndpointConfiguration进行设置。
出于安全考虑,默认情况下,仅部分Actuator相关的端点是公开的,所以我们需要在属性文件中添加配置以公开端点。
management.endpoints.web.exposure.include=prometheus
只需这样一步,Prometheus的监控设置就完成了。
运行Spring Boot应用程序,访问http://localhost:8080/prometheus,即可显示监控信息。
在Prometheus中进行可视化
用Docker来运行Prometheus时,需要准备以下prometheus.yml文件,并执行docker run命令。
# A scrape configuration containing exactly one endpoint to scrape:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'spring-boot-2.0'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
# List of labeled statically configured targets for this job.
static_configs:
- targets: ['your_ip:8080'] # 1
# The HTTP resource path on which to fetch metrics from targets.
metrics_path: /actuator/prometheus # 2
$ docker run -p 9090:9090 -v path_prometheus_yml:/etc/prometheus/prometheus.yml prom/prometheus
我稍作补充说明。
-
- 为了访问 Docker 中的主机 Spring Boot 应用程序,需要通过指定 IP 地址而不是 localhost 进行访问。
- 正在指定指标的端点。
只需要一种选择:
使用http://localhost:9090/访问,即可启动Prometheus。
只需在GUI上指定想要获取的指标即可。这是以指定jvm_classes_loaded为例。
填補
请参考以下内容,介绍了在不依赖于监控工具的情况下,如何实现特定应用程序的指标(例如,计算店内客流量的计数器指标)。
如果您尚未升级到2.0版本,请参考Spring Boot 1.5中有关与Mircrometer的兼容方法的说明。
GitHub – 代码托管平台
请参考我在GitHub上上传的样例,就像往常一样。
最后
Spring Boot 2.0发布了,我真的很高兴,迫不及待地想要了解并使用它的全部功能。
在应用程序监控方面,以前实现起来有点困难,每个应用程序都需要做一些特别的处理(比如,之前的两个版本)。
但是,随着Micrometer成为Spring Boot监控的事实标准,我们将能够轻松使用它,这真是太棒了。