当前位置: 首页 > 科技观察

SpringBoot服务监控(普罗米修斯)

时间:2023-03-12 09:20:16 科技观察

哲学最近看到一句话:以荣辱之分内外。一位外国作家也说过:我人生最大的突破之一就是我不再担心别人的看法。在那之后,我真的很自由,可以做我认为对我最好的事情,只有在我们不需要外部认可的时候才变得自由。都说的很好。人只想突破自己,就像许三多一样,不在乎别人的看法,做自己认为有意义的事,今天比昨天好,这不就是希望吗。监控和思考了一波哲学后,开始做软件。本文记录监控配置相关知识。为什么需要监控系统:简单地说。随时了解系统的运行情况,确保其运行在您的预期之内。别的不说,直接看两张效果图:1、监控Linux服务器的CPU、内存、磁盘等:2、监控Tomcat和jvm:概念1、什么是Prometheus,一个开源的优秀时序数据库监控软件。收集用于监控系统状态的各种指标。提供强大的PromQL查询语句,满足各种个性化查询需求。2.什么是指标?指标是监控指标。通俗地说,指标是数值测量,时间序列是记录随时间的变化。用户想要测量的内容因应用程序而异。对于Web服务器可能是请求时间,对于数据库可能是活动连接数或活动查询数等。简单理解,就是你要监控的,你不必太深入进去。3.什么是Grafana?简单的说,它就是一个图形展示工具,与Prometheus是绝配。安装配置1、下载prometheus:wgethttps://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-amd64.tar.gztarxvfzprometheus-*.tar.gzcdprometheus-*2。配置prometheus:global:scrape_interval:15s#默认情况下,每15秒抓取一次目标。#在与外部系统(联邦、远程存储、Alertmanager)通信时,将这些标签附加到任何时间序列或警报。external_labels:monitor:'codelab-monitor'#一个仅包含一个要抓取的端点的抓取配置:#这是Prometheus本身.scrape_configs:#作业名称作为标签`job=`添加到从此配置中抓取的任何时间序列。-job_name:'prometheus'#覆盖全局默认值并每5秒从该作业中抓取目标。scrape_interval:5sstatic_configs:#这里是内置的监控,监控preometheus本身-targets:['localhost:9090']以上就完成了prometheus的下载和配置非常简单。访问host:9090可以看到如下界面:这是prometheus的管理页面。不够爽,接下来下载grafana。3.下载grafanasudoyuminstallgrafanasudosystemctlstartgrafana-server就可以了。经验证,默认管理终端运行在3000端口,即http://ip:3000,可以打开如下页面,默认账号密码为admin。我们现在有prometheus和grafana,然后将grafana连接到prometheus。1.添加数据源。2.连接到普罗米修斯。3.测试是否连接成功。就是这样。至此,最基本的prometheus和grafna下载安装操作已经完成。exporter接下来,监控linux的状态。这也是极其简单的。首先下载node_exporter,然后启动wgethttps://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gztarxvfznode_exporter-*.*-amd64.tar.gzcdnode_exporter-*.*-amd64./node_exporter然后去prometheus修改配置文件prometheus.yaml,按照上一个,添加如下配置。然后重启普罗米修斯。-job_name:nodestatic_configs:-targets:['localhost:9100']这个已经有监控linux运行状态的功能了,只是暂时没有展示。接下来添加很酷的页面。官网已经配置好了,你甚至不需要自己配置。地址是:https://grafana.com/grafana/dashboards/。打开如下,搜索node,选择第一个。复制官方模板ID。然后去grafana导入。大功告成,如下图所示。jvm也是类似的操作,大家可以自己测试一下。以上自定义监控指标均为官方提供的exporter。监控机器或者jvm,如果我们要监控自己的业务怎么办?例如,我们要监控多少请求?每个请求的性能如何?或者其他一些自定义监控项?在写代码之前,先了解几个概念:prometheus中的四种度量类型。计数器:计数器类型用于增量值,例如请求计数或错误计数。最重要的是,计数器不应该用于潜在的递减值。只增不减。Gauges(仪表板(我自己翻译的)):Gauge类型可以用于向下和向上的值,比如当前内存使用或者队列中的项数,可以增加或减少。直方图(histogram):这个概念比较难理解。我们暂且认为他只是一个统计分位数树。比如你99%的接口请求耗时,TP99。小结:本文不多说,有兴趣的可以自己去官网看看。这四种类型什么时候使用?计数器:1.你想记录一个只会上升的值。2、希望以后可以查询到该值的增长率(即增长率)。量表:1.想记录一个可升可降的值。2、你不需要查询它的增长率。直方图:分桶计算,分位数计算,TP99的计算等。OK,接着写代码。Java用于监控SpringBoot应用,一般用SpringBoot项目开发。这很容易实现,并且都被打包了。从一个基本项目开始,只需要以下依赖项。请注意,除了web模块外,还添加了两个监控模块。<依赖项><依赖项>org.springframework.bootspring-boot-starter-actuatorio.micrometermicrometer-registry-prometheusorg.springframework.bootspring-boot-starter-web<依赖项>org.springframework.bootspring-boot-starter-testtest然后写一个简单的controller。包com.test.promethusmetrics;导入io.prometheus.client.CollectorRegistry;导入io.prometheus.client.Counter;导入org.springframework.web.bind.annotation.GetMapping;导入org.springframework.web.bind.annotation.RestController;/***测试计数器**@authorfengkai*/@RestControllerpublicclassCounterController{privatefinalCounterrequestCount;publicCounterController(CollectorRegistrycollectorRegistry){requestCount=Counter.build().name("request_count").help("你好请求的数量。").register(collectorRegistry);}@GetMapping(value="/hello")publicStringhello(){requestCount.inc();return"Hi!";}}请注意,这里使用了计数器。这样就完成了计数器计数的代码部分。代码完成后,我们需要让prometheus拉取我们SpringBoot的监控指标,配置和之前很像。添加以下配置并重启prometheus。-job_name:"spring"metrics_path:/actuator/prometheusstatic_configs:-targets:["192.168.181.1:8080"]我们在浏览器上请求了几次。然后我们去grafana配置监控面板,先添加。然后配置指标。效果图如下。以上只是简单的统计,实际用处并不是很大。其实更应该关注增速。这个怎么算?你只需要将速率函数包裹在外层。具体原理后面会讲到,这里先用到。接下来再试试用柱状图,统计下SpringBoot服务请求的耗时情况?代码部分:packagecom.test.promethusmetrics;importio.prometheus.client.CollectorRegistry;importio.prometheus.client.Histogram;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind。annotation.RestController;importstaticjava.lang.Thread.sleep;@RestControllerpublicclassHistogramController{privatefinalHistogramrequestDuration;publicHistogramController(CollectorRegistrycollectorRegistry){requestDuration=Histogram.build().name("test_wait").help("HTTP请求时间。”).register(collectorRegistry);}@GetMapping(value="/wait")publicStringmakeMeWait()throwsInterruptedException{Histogram.Timertimer=requestDuration.startTimer();longsleepDuration=Double.valueOf(Math.floor(Math.random()*10*1000)).longValue();睡眠(睡眠持续时间);timer.observeDuration();返回字符串.format("我让你等了%sms!",sleepDuration);}}多次访问:localhost:8080/wait然后grafana配置,这里是直方图,计算性能QL语法不解释,可以参考官网。效果图如下:总结现在,我们应该对prometheus中可以使用的不同类型的监控指标,什么时候使用,以及如何查询有了一个清晰的认识。您可以使用grafna配置炫酷的监控图标。有了这些知识,就可以更有效地在应用程序中发布监控并确保它始终按预期运行。