24 Prometheus 之微服务监控
微服务架构是一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制(通常是基于 HTTP 的 RESTful API 或 RPC)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境中,各个微服务之间是松耦合的。
微服务监控与传统应用的监控相比,最明显的变化是视角的改变,即把监控从机器视角转换成以服务为中心的视角。与传统监控相比,微服务监控面临着更多难点,包括:
监控对象动态可变,无法进行预先配置。·监控范围非常繁杂,各类监控难以互相融合。·微服务实例间的调用关系非常复杂,故障排查会很困难。·微服务架构仍在快速发展,难以抽象出稳定的通用监控模型。
在实际生产中,微服务监控也面临着不少考验,例如:·在微服务架构里,软件系统通常会被拆分为数十甚至数百个微服务,这种拆分会使监控数据爆炸增长,监控系统必须具备处理和展示这些数据的能力。·监控系统必须保证可靠性,即保证不会因为单点故障而全局失效,监控数据有备份机制,系统各服务的实例均可通过备份数据得到恢复。·监控系统必须支持云上部署及快速水平扩容,这既是云原生的基本要求,也符合企业系统微服务演进的实际情况。在微服务的视角下,监控可以分为指标监控、链路监控和日志监控。在开源社区,这些监控都有对应的解决方案,比如指标监控有 Prometheus、Influxdb,链路监控有 zipkin、pinpoint,日志监控则有 ELK。
微服务监控的关键指标:
基于 Prometheus 搭建 Spring Boot 监控的架构。
因为在 Spring Boot 内部使用 MeterRegistryPostProcessor 对 Metrics 内部持有全局的 CompositeMeterRegistry 进行合成操作,也就是所有 MeterRegistry 类型的 Bean 都会添加到 Metrics 内部持有的静态 globalRegistry 中,这样就可以使用 Metrics 的静态方法直接进行数据统计。
Micrometer 中有两个最核心的概念,分别是计量器(Meter)和计量器注册表(MeterRegistry)。计量器表示的是需要收集的性能指标数据,而计量器注册表负责创建和维护计量器。每个监控系统有自己独有的计量器注册表实现。模块 micrometercore 中提供的类 SimpleMeterRegistry 是一个基于内存的计量器注册表实现。SimpleMeterRegistry 不支持导出数据到监控系统,主要用来进行本地开发和测试。Micrometer 通过计量器注册表实现类 CompositeMeterRegistry 可以把多个计量器注册表组合起来,从而允许同时发布数据到多个监控系统。
运营指标体系一定是结构化的,而不是零散的,结构化的好处主要有两个方面:一是当指标发生异常时,能够通过结构化的指标体系来定位问题;二是当我们要达到某个 KPI 指标时,可以通过指标体系来分解指标,让我们知道可以从哪些方面着手。结构化的指标体系需要有一个好的指标体系框架,现实工作中,各种指标浩如烟海,而且各个业务还具有不同的特性。对运营商和互联网企业来说,各个业务的指标体系大体可分为三类:收入类指标(Revenue)、用户类指标(User)、业务量类指标(Number),简称“RUN 指标体系”。
评论