在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实现的。

スクリーンショット 2018-03-02 18.08.54.png
スクリーンショット 2018-03-02 18.08.48.png

确实,这里增加了微米测定仪。

此外,还需将所需的监控工具(本例中为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

我稍作补充说明。

    1. 为了访问 Docker 中的主机 Spring Boot 应用程序,需要通过指定 IP 地址而不是 localhost 进行访问。

 

    正在指定指标的端点。

只需要一种选择:
使用http://localhost:9090/访问,即可启动Prometheus。

只需在GUI上指定想要获取的指标即可。这是以指定jvm_classes_loaded为例。

スクリーンショット 2018-03-07 20.39.22.png

填補

请参考以下内容,介绍了在不依赖于监控工具的情况下,如何实现特定应用程序的指标(例如,计算店内客流量的计数器指标)。

如果您尚未升级到2.0版本,请参考Spring Boot 1.5中有关与Mircrometer的兼容方法的说明。

GitHub – 代码托管平台

请参考我在GitHub上上传的样例,就像往常一样。

最后

Spring Boot 2.0发布了,我真的很高兴,迫不及待地想要了解并使用它的全部功能。
在应用程序监控方面,以前实现起来有点困难,每个应用程序都需要做一些特别的处理(比如,之前的两个版本)。
但是,随着Micrometer成为Spring Boot监控的事实标准,我们将能够轻松使用它,这真是太棒了。

广告
将在 10 秒后关闭
bannerAds