本文转载自微信公众号“小姐姐的味道”,作者小姐姐养的狗。转载本文请联系味觉小姐公众号。不用说,监视的重要性是不必要的。不要花时间在会议上讨论它的必要性。当你在线上遇到问题时,你不会再怀疑监控是在浪费开发成本。监控让人们告别靠“猜”维持的消防现状。可以留下证据来支持我们后面的分析。作为监控的首要目标,服务的生存能力,即它的健康成为重中之重。SpringBoot可以通过简单的参数开启健康检查,可以与主流监控系统集成。1.启用监控。在Spring中,执行器组件用于执行监控和其他相关操作。您可以将以下starter添加到pom:dependencies{compile("org.springframework.boot:spring-boot-starter-actuator")}访问/actuator/health获取项目的健康状态。{"status":"UP"}在application.yml文件中添加如下内容:management:endpoint:health:show-details:always再次访问该界面,会输出详细内容。包括DB状态,磁盘状态等。可见最外层的状态其实是内部组件状态的集合。{"status":"UP","components":{"db":{"status":"UP","details":{"database":"H2","validationQuery":"isValid()"}},"diskSpace":{"status":"UP","details":{"total":250685575168,"free":31373905920,"threshold":10485760,"exists":true}},"ping":{"status":"UP"}}}2.自定义指标这些功能由指标(HealthIndicator)实现。例如:DataSourceHealthIndicatorDiskSpaceHealthIndicatorCouchbaseHealthIndicatorMongoHealthIndicatorRedisHealthIndicatorCassandraHealthIndicator如果您使用组件提供的启动器,这些指标将聚合在/health接口上。如果不想监控某个组件,可以在配置中将其关闭。management:health:mongo:enabled:false理解这个原则。在制作一些组件时,可以使用该方法提供组件自带的健康检查:只需要实现HealthIndicator接口即可。代码示例如下:@Component@Slf4jpublicclassXimplementsHealthIndicator{@OverridepublicHealthhealth(){try{//查看组件状态异常信息}catch(Exceptione){log.warn("Failedtoconnectto:{}",URL);returnHealth.down().withDetail("error",e.getMessage()).build();}returnHealth.up().build();}}3.更多接入监控系统的信息,我们希望通过业务监控数据对专业监控组件进行采集。这可以在SpringBoot中使用千分尺来实现。以目前最流行的prometheus为例,在pom.xml中添加如下内容:io.micrometermicrometer-registry-prometheus当然我们还需要在yaml中配置一些内容。现在看起来是这样的:management:endpoints:web:exposure:include:health,info,prometheusendpoint:health:show-details:always这时候访问/actuator/prometheus可以得到prometheus格式的监控数据。类似于以下内容:jvm_memory_used_bytes{area="heap",id="PSSurvivorSpace",}0.0jvm_memory_used_bytes{area="heap",id="PSOldGen",}2.9444904E7jvm_memory_used_bytes{area="heap",id="PSEdenSpace",}6.829E7jvm_memory_used_bytes{area="nonheap",id="Metaspace",}5.917196E7jvm_memory_used_bytes{area="nonheap",id="CodeCache",}1.0929088E7jvm_memory_used_bytes{area="nonheap",Class="Spaceed"}8420512.0在prometheus的targetpage上,可以看到如下信息:最后,在Grafana中,篇幅比较骚。那么它能监控什么呢?我们来看一下:基本服务节点信息,包括内存CPU网络IO等JVM栈信息JVMGC信息,STW信息默认为HikariCP连接池信息HTTP请求接口信息(最大耗时,QPS最高)Tomcat容器监控logback日志打印监控(每级条目数)...其他的可以看看,只需要暴露这样一个接口,就可以对项目中的组件有更全面的控制。4、与容器的配合最后一点,因为有SpringBoot服务,所以经常发布到一些容器,比如docker。这时候就需要用到probes配置(kube也是同一个概念)。Probes是检测的意思,用来区分Liveness和Readiness两种状态。最终配置如下:management:health:probes:enabled:trueendpoints:web:exposure:include:health,info,prometheusendpoint:health:show-details:always这时候我们会在浏览器,显示如下:http://localhost:8080/actuator/health/livenesshttp://localhost:8080/actuator/health/readiness这两个链接,前者用来判断容器是否应该重启;后者用于判断服务是否可用,可用则开始接受外部请求。结束对于规模比较小的SpringBoot应用,使用SpringBootAdmin等监控就足够了。但是如果你的企业是集中部署,节点多,变更频繁,统一的监控搭建平台就非常有必要了。除了Prometheus,SpringBoot的Metrics还支持以下组件:AppOpticsAtlasDatadogDynatraceElasticGangliaGraphiteHumioInfluxJMXKairosDBNewRelicPrometheusSignalFxSimple(in-memory)StackdriverStatsDWavefront你熟悉的组件,你有吗?作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。