通过Spring Boot成为DevOps

您是否曾经遇到过要完成一个项目的情况,并且打算将其交付给Ops团队。 您很高兴,因为这一次,您涵盖了所有基础:文档包含应用程序将使用的JNDI数据源名称,所有与环境有关的参数都已在属性文件中外部化并进行了记录,甚至确保日志记录具有已在代码中的关键点实现。 不幸的是,Ops拒绝您的交付,因为他们不知道如何监视新应用程序。 而且您错过了...肯定可以破解一些东西来满足此要求,但是该项目已经超预算了。 在某些(大多数?)公司中,这意味着必须责怪某人,并且开发商有可能承担所有负担。 时间一些不眠之夜。

Spring Boot是Spring的产品,为表带来了许多现成的功能。 约定优于配置,内存中默认数据源和嵌入式Tomcat是大多数已知功能的一部分。 但是,我认为有一个隐藏的宝石应该被更多地宣传。 执行器模块实际上提供了现成的指标和运行状况检查,以及一种添加自己的简便方法。 在本文中,我们将看到如何从HTTP访问那些度量并将其发送到JMX和Graphite。

作为示例应用程序,让我们使用由Boot创建的Spring Pet Clinic更新 -感谢Arnaldo Piccinelli的工作。 起始点是提交790e5d0 。 现在,让我们立即添加一些指标。

第一步是在Maven POM中添加执行器模块启动器,然后让Boot发挥作用:

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

此时,我们可以使用mvn spring-boot:run Spring Pet Clinic,并导航至http:// localhost:8090 / metrics (请注意,该路径受Spring Security保护,凭据为user / password )以查看内容如下所示:

{
  "mem" : 562688,
  "mem.free" : 328492,
  "processors" : 8,
  "uptime" : 26897,
  "instance.uptime" : 18974,
  "heap.committed" : 562688,
  "heap.init" : 131072,
  "heap.used" : 234195,
  "heap" : 1864192,
  "threads.peak" : 20,
  "threads.daemon" : 17,
  "threads" : 19,
  "classes" : 9440,
  "classes.loaded" : 9443,
  "classes.unloaded" : 3,
  "gc.ps_scavenge.count" : 16,
  "gc.ps_scavenge.time" : 104,
  "gc.ps_marksweep.count" : 2,
  "gc.ps_marksweep.time" : 152
}

可以看出,Boot无需进一步配置即可提供与硬件和Java相关的指标。 更好的是,如果浏览应用程序(例如反复刷新根目录),则会出现新的指标:

{
  "counter.status.200.metrics" : 1,
  "counter.status.200.root" : 2,
  "counter.status.304.star-star" : 4,
  "counter.status.304.webjars.star-star" : 1,
  "gauge.response.metrics" : 72.0,
  "gauge.response.root" : 16.0,
  "gauge.response.star-star" : 8.0,
  "gauge.response.webjars.star-star" : 11.0,
  ...
}

这些指标实际上更具功能性,它们分为两个单独的组:

  • 量规是最简单的指标,并返回一个数字值, 例如 gauge.response.root/metrics路径上次响应的时间(以毫秒为单位)
  • 计数器是可以递增/递减的指标, 例如 counter.status.200.metrics/metrics路径返回HTTP 200代码的次数

此时,您的Ops团队可能会抓取返回的JSON并从中获取内容。 他们有责任定期轮询URL并以他们想要的方式使用数字。 但是,只需稍加努力,我们就可以通过将这些指标放入JMX来简化心爱的Ops团队的生活。

Spring Boot可以轻松地与Dropwizard指标集成。 通过将以下依赖项添加到POM,Boot可以为所有度量标准提供MetricRegistry ,Dropwizard注册表:

<dependency>
    <groupId> io.dropwizard.metrics </groupId>
    <artifactId> metrics-core </artifactId>
    <version> 4.0.0-SNAPSHOT </version>
</dependency>

使用提供的注册表,除了HTTP端点外,还可以将指标发送到JMX。 我们只需要一个简单的配置类以及一些API调用:

@Configuration
publicclassMonitoringConfig{

    @Autowired
    privateMetricRegistryregistry;

    @Bean
    publicJmxReporterjmxReporter(){
        JmxReporterreporter=JmxReporter.forRegistry(registry).build();
        reporter.start();
        returnreporter;
    }
}

启动jconsole让我们检查它是否正常:

JConsole屏幕截图

现在,Ops团队只需从JMX获取指标,并将其推入其首选的图形显示工具(如Graphite)中 。 实现此目标的一种方法是通过jmx-trans 。 但是,也可以仅通过几个不同的API调用将指标直接发送到Graphite服务器:

@Configuration
publicclassMonitoringConfig{

    @Autowired
    privateMetricRegistryregistry;

    @Bean
    publicGraphiteReportergraphiteReporter(){
        Graphitegraphite=newGraphite(newInetSocketAddress("localhost",2003));
        GraphiteReporterreporter=GraphiteReporter.forRegistry(registry)
                                                    .prefixedWith("boot").build(graphite);
        reporter.start(500,TimeUnit.MILLISECONDS);
        returnreporter;
    }
}

鉴于几行代码,结果非常有趣:

石墨截图

请注意,使用JMX路由转到Graphite会使事情变得更容易,因为在开发环境中不需要专用的Graphite服务器。

翻译自: https://blog.frankel.ch/become-a-devops-with-spring-boot/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值