devops
您是否曾经遇到过要完成项目的情况,并且打算将其交付给Ops团队。 您很高兴,因为这一次您涵盖了所有基础:文档包含应用程序将使用的JNDI数据源名称,所有与环境有关的参数都已在属性文件中外部化并记录在案,甚至确保日志记录具有已在代码中的关键点实现。 不幸的是,Ops拒绝您的交货,因为他们不知道如何监视新应用程序。 而且您错过了这一点...肯定可以破解一些东西来满足此要求,但是该项目已经超预算了。 在某些(大多数?)公司中,这意味着必须责怪某人,并且开发商有可能承担所有负担。 时间一些不眠之夜。
Spring Boot是Spring的产品,为表带来了许多现成的功能。 约定优于配置,内存默认数据源和嵌入式Tomcat是大多数已知功能的一部分。 但是,我认为有一个隐藏的宝石应该被更多地宣传。 执行器模块实际上提供了现成的度量标准和运行状况检查,以及一种添加您自己的简便方法。 在本文中,我们将看到如何从HTTP访问那些度量并将其发送到JMX和Graphite。
作为示例应用程序,让我们使用由Boot创建的Spring Pet Clinic的更新 -感谢Arnaldo Piccinelli的工作。 起始点是提交790e5d0 。 现在,让我们立即添加一些指标。
第一步是在Maven POM中添加执行器模块启动器,然后让Boot发挥作用:
org.springframework.boot spring-boot-starter-actuator
此时,我们可以使用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注册表:
io.dropwizard.metrics metrics-core4.0.0-SNAPSHOT
使用提供的注册表,除了HTTP端点外,还可以将指标发送到JMX。 我们只需要一个简单的配置类以及一些API调用:
@Configuration publicclassMonitoringConfig{ @Autowired privateMetricRegistryregistry; @Bean publicJmxReporterjmxReporter(){ JmxReporterreporter=JmxReporter.forRegistry(registry).build(); reporter.start(); returnreporter; } }
启动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/
devops
1.《devops》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《devops》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/2371957.html