1。简介当应用程序在生产环境中运行时,有必要监控其健康状况。通过实时了解应用程序的运行状况,您可以在问题出现之前收到警告,并且可以在客户注意到问题之前解决问题。在本文中,我们将借助SpringActuator、Micrometer、Prometheus和Grafana创建一个SpringBoot应用程序来监控系统。其中SpringActuator和Micrometer是SpringBootApp的一部分。简单解释一下不同组件的用途:SpringActuator:在应用程序中提供很多Web接口,通过这些接口可以了解应用程序运行时的内部情况。有关详细信息,请参阅SpringBoot2.0中的SpringBootActuator。Micrometer:提供Java平台上性能数据采集的通用API。它提供了多种指标类型(Timers、Guauges、Counters等),支持接入不同的监控系统,如Influxdb、Graphite、Prometheus等。SpringBootActuator对此提供了支持。Prometheus:用于收集指标的时间序列数据库。Grafana:用于显示指标的仪表板。下面,我们分别描述每个组件。本文中使用的代码存档在GitHub上。2.创建一个示例应用程序首先要做的是创建一个可以被监控的应用程序。使用SpringInitializr,并添加SpringBootActuator、Prometheus和SpringWeb依赖项,我们创建了一个SpringMVC应用程序,如下所示。@RestControllerpublicclassMetricsController{@GetMapping("/endPoint1")publicStringendPoint1(){return"MetricsforendPoint1";}@GetMapping("/endPoint2")publicStringendPoint2(){return"MetricsforendPoint2";}}启动应用程序:$mvnspring-boot:run验证接口是否正常工作:$curlhttp://localhost:8080/endPoint1MetricsforendPoint1$curlhttp://localhost:8080/endPoint2MetricsforendPoint2验证弹簧执行器界面。为了让响应信息方便易读,我们通过python-mjson.tool对信息进行格式化。$curlhttp://localhost:8080/actuator|python-mjson.tool...{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":false}}}默认显示以上信息。除此之外,SpringActuator可以提供更多信息,但您需要启用它。为了启用Prometheus,您需要将以下信息添加到您的application.properties文件中。management.endpoints.web.exposure.include=health,info,prometheus重启应用,访问http://localhost:8080/actuato...从Prometheus拉取数据,返回大量可用指标信息。我们在这里只显示一小部分输出,因为它是一个很长的列表。$curlhttp://localhost:8080/actuator/prometheus#HELPjvm_gc_pause_secondsGC暂停花费的时间#TYPEjvm_gc_pause_secondssummaryjvm_gc_pause_seconds_count{action="minorGC结束",cause="G1EvacuationPause",}2.0jvm_gc_pas="{seconds"endofminorGC",cause="G1EvacuationPause",}0.009...如前所述,还需要一个Micrometer。Micrometer为最流行的监控系统提供了一个简单的仪表板,允许对JVM应用程序进行检测,无论是哪个vendor提供了metrics,它的功能和SLF4J类似,只是它关注的不是Logging(日志记录),而是applicationmetrics(应用指标),简单来说就是应用监控界的SLF4JSpringBootActuator提供了Micrometer的自动配置,SpringBoot2在spring-boot-actuator中引入了micrometer,重构了1.x的metrics,另外支持对接的监控系统也更加丰富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront)。更新后的application.properties文件如下所示:management.endpoints.web.exposure.include=health,info,metrics,prometheus重新启动应用程序并从http://localhost:8080/actuator/metrics检索数据。$curlhttp://localhost:8080/actuator/metrics|python-mjson.tool...{"names":["http.server.requests","jvm.buffer.count","jvm.buffer.memory.used",...可以直接通过指标名称。例如,如果您查询http.server.requests指标,您可以按如下方式检索它:$curlhttp://localhost:8080/actuator/metrics/http.server.requests|python-mjson.tool...{"name":"http.server.requests","description":null,"baseUnit":"seconds","measurements":[{"statistic":"COUNT","价值”:3.0},{“统计”:“TOTAL_TIME”,“价值”:0.08918682},...3。添加PrometheusPrometheus是云原生计算基金会开源的监控系统。由于我们的应用程序中有一个/actuator/Prometheus端点供Prometheus从中抓取数据,您现在可以配置Prometheus来监控您的SpringBoot应用程序。有多种安装Prometheus的方法,在本文中我们将在Docker容器中运行Prometheus。您需要创建一个prometheus.yml文件以添加到Docker容器中。global:scrape_interval:15sscrape_configs:-job_name:'myspringmetricsplanet'metrics_path:'/actuator/prometheus'static_configs:-targets:['HOST:8080']scrape_interval:Prometheus轮询应用程序指标的频率job_name:轮询任务名称metrics_path:路径指标的URL目标:主机名和端口号。使用时,将HOST替换为主机的IP地址如果在Linux上查找IP地址有困难,可以使用如下命令:$ip-finet-oaddrshowdocker0|awk'{print$4}'|cut-d'/'-f1启动Docker容器,将本地的prometheus.yml文件映射到Docker容器中的文件中。$dockerrun\-p9090:9090\-v/path/to/prometheus.yml:/etc/prometheus/prometheus.yml\prom/prometheus成功启动Docker容器后,首先验证Prometheus能否通过http://localhost:9090/targets收集数据。如上图所示,我们遇到了contextdeadlineexceeded错误,这导致Prometheus无法访问主机上运行的SpringBoot应用程序。如何解决?可以通过将Docker容器添加到主机网络来解决此错误,这将使Prometheus能够访问SpringBoot应用程序。$dockerrun\--nameprometheus\--networkhost\-v/path/to/prometheus.yml:/etc/prometheus/prometheus.yml\-d\prom/prometheus再次验证,状态指示为UP。现在可以显示Prometheus指标。通过访问http://localhost:9090/graph,在搜索框中输入http_server_requests_seconds_max并单击“执行”按钮,将为您提供请求期间的最大执行时间。4.添加Grafana最后添加的组件是Grafana。Prometheus可以显示指标,而Grafana可以帮助您在更精美的仪表板中显示指标。Grafana也支持多种安装方式,在本文中,我们也将其运行在Docker容器中。$dockerrun--namegrafana-d-p3000:3000grafana/grafana点击http://localhost:3000/访问Grafana。默认的用户名/密码是admin/admin。单击“登录”按钮后,您需要更改默认密码。接下来要做的是添加数据源。单击左侧边栏中的配置图标并选择数据源。单击添加数据源按钮。Prometheus在列表的顶部,选择Prometheus。填写可以访问Prometheus的URL,设置HTTP访问为Browser,点击页面下方的Save&Test按钮。一旦一切顺利,将出现一个绿色的通知横幅,表明数据源正在工作。现在是创建仪表板的时候了。您可以自定义一个,但也可以使用开源仪表板。用于显示SpringBoot指标的一种常见仪表板是JVM仪表板。在左侧边栏中,单击+号并选择导入。输入JVMDashboard的URLhttps://grafana.com/grafana/d...然后点击“Load”按钮。为仪表板输入一个有意义的名称(例如MySpringMonitoringPlanet),选择Prometheus作为数据源,然后单击“导入”按钮。到目前为止,您已经拥有了一个很酷的Grafana仪表板供您使用。也可以将自定义面板添加到仪表板。在仪表板的顶部,单击添加面板图标。单击添加新面板。在Metrics字段中,输入http_server_requests_seconds_max,在右侧列的Paneltitle字段中,您可以输入面板的名称。最后,单击右上角的“应用”按钮,您的面板将添加到仪表板。不要忘记保存仪表板。为应用程序设置一些负载并查看仪表板上的http_server_requests_seconds_max指标发生了什么。$watch-n5curlhttp://localhost:8080/endPoint1$watch-n10curlhttp://localhost:8080/endPoint25.结论在本文中,我们学习了如何向SpringBoot应用程序添加一些基本监控.这非常简单,只需组合SpringActuator、Micrometer、Prometheus和Grafana。当然,这只是一个起点,但您可以从这里为您的SpringBoot应用程序扩展和配置越来越多的具体指标。原文:https://mydeveloperplanet.com...翻译:https://www.kubernetes.org.cn...推荐近期文章:1.1,000+Java面试题及答案(2021最新版)2.Don别再满脑子if/else了,试试策略模式,真香!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.5发布,深色模式太炸了!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
