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

SpringBoot快速接入Prometheus监控

时间:2023-03-12 02:33:10 科技观察

最近和几个fans聊天说公司最近裁了很多人,不仅裁了大部分人,还裁掉了大部分业务;在公司赚钱之前,什么?做任何产品我都愿意,不管能不能用我都会去尝试。一堆流量不大的系统在网上跑着,可是没有上级的一声令下,谁也不敢停下来。不管资源如何,关键是能活下来。基本上运维人员必须跟系统在一起,这让我们的运维苦不堪言。公司高层顿时雷厉风行,似乎快要坚持不下去了。没有盈利的业务开发者全部砍掉,一个也留不下,相应的系统直接下线;只剩下一部分运维人员,少数内部开发人员活跃。随着时间的推移,这个部门已经更名为DevOps团队,大部分系统都没有了,云上的资源也迅速缩水了一半。日常琐事基本没有了。以前写KPI是为了保证xx系统稳定运行,现在不用写了。基本上是多人保证1个系统的运行。没有什么可以做的。领导说要细化操作。我不知道它是否有用。让我们先生活。但是他们大多是运维的,在语言层面会用python,golang,sql。他们可以在日常生活中使用prometheus语法和其他常见的云原生组件,但有些服务根本不提供指标......。Java应用系统在抽象和封装方面过于完善。真不知道怎么入手,更不知道怎么加监控。问一些开发者,他们大多对Prometheus指标没有特别清晰的概念。如果有太多的入侵,他们就不愿意改变。走吧,看看nginx上的CPU、内存和qps和延迟。如何给应用添加监控导致出现上述情况,主要是因为运维人员不了解一些开发生态。其实常见的Java应用基本上都是基于Spring开发的,而Spring本身就特别擅长封装和继承,好到完全不了解他也可以在他的基础上开发,这就是Crud程序员盛行的原因。Sring监控也是如此,同样很简单。下面以SpringBoot2.x为例,演示对系统中所有接口和中间件的监控。第一步为应用添加jar依赖:io.micrometermicrometer-registry-prometheus添加配置项:management.endpoints.web.exposure.include=prometheusspring.application.name=spring-petclinic-composemanagement.server.port=8091management.metrics.tags.application=${spring.application.name}启动应用,访问:http://127.0.0.1:8091/actuator/prometheus具有所有指标。只要有指标,其他都好谈。只要对指标进行采集、计算和展示,超过阈值就会报警。运行Prometheus,添加爬虫配置:scrape_configs:-job_name:'application'metrics_path:'/actuator/prometheus'static_configs:-targets:['application:8091']Addquery:rate(http_server_requests_seconds_count[5m])居然跑到这里了差不多一样。上次跟群里的网友说了这个,结果反馈说根本不行,服务跑不起来。为了防止类似的问题,我在这里给出了我的源代码演示的链接。只要将Java开发环境配置好并导入到本地后,运行https://github.com/strictnerd/spring-petclinic-compose即可达到目的,运维人员可以到此为止;如果你是开发者,可以继续学习如何自定义指标采集,具体代码也已经上传到github,详情请参考https://github.com/strictnerd/spring-petclinic-compose。自定义指标集成后,大家反馈的第一个问题就是指标太多。目前io.micrometer基本监控常见的http、tomcat、jetty、kafka、cache、redis、JVMCPUMEM、GC、logback等,查看Spring官网介绍https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.metrics如何关闭所有指标并打开所需的指标?management.metrics.enable.all=falsemanagement.metrics.enable.http=falsemanagement.metrics.enable.jvm=true如上配置,我可以关闭所有配置,但只打开jvm指标,如下图:这是基于关于监测指标需要采集和展示。如何添加自己的指标维度?一些服务是隔离的。相同的代码部署在不同的区域。这个底层库保留了扩展节点。例如,我们需要为每个指标添加区域维度。添加以下代码足以支持多个。@BeanMeterRegistryCustomizermetricsCommonTags(){返回注册表->registry.config().commonTags("region","us-east-1");这样,每个指标都会多出一个维度。一些不被监控的接口如何添加切面?io.micrometer虽然覆盖了服务中的大部分场景,但是根据实际业务情况,肯定会有组件覆盖不了的地方。我应该怎么办?然后使用定时自定义处理。定时注解不会被Spring框架扫描,所以需要添加如下代码:@BeanTimedAspecttimedAspect(MeterRegistryregistry){returnnewTimedAspect(registry);}为需要监控的代码片段添加注解:查看指标:总结看了上面的介绍,你会发现简单,简单,还是tmd简单,但是为什么公司系统没有指标等可用性监控.说白了,公司里没有人在推广这种技术;说白了,系统不重要,可有可无,或者即使出了问题,也不会被人知道。