可观测性:如何设计实现一个好用的分布式监控体系?

162 阅读2分钟

可观测性分为指标(Metrics)、日志(Logs)、跟踪(Traces)三个方面。

消息队列有哪些关键指标?

所有的消息队列有通用的核心指标,主要有五类:集群(Cluster)、节点(Node/Broker)、主题(Topic)、分区 / 队列(Partiton/Queue)、消费分组 / 订阅(Group/Subscription)。

集群指标主要是集群资源数量相关的,比如主题数量、分区数量、节点数量等集群维度的信息,这类信息的影响在于数量。

节点指标一般包含节点的生产消费的吞吐量、耗时、消息数,接口的请求数、错误码、耗时,JVM FullGC、YongGC 的次数,节点的 TCP 连接数等等。

主题指标一般是主题维度的吞吐量、消息条数、生产和消费耗时数据。当业务反馈只有某些主题异常时,这些指标可以用来定位问题。分区维度的指标是一样的,只是可以细化到定位分区和队列维度的异常。

消费分组 / 订阅的指标一般是消费速度、未消费的消息数量(堆积数)。

业界有多种指标的记录方式,比较常见的有以下五种:

  1. Java Metrics
  2. Prometheus Metrics
  3. Kafka 基于 Metrics 实现的自定义 KafkaMetrics
  4. Golang 的指标库 go-metrics(一般各个语言也会有对应的 Metrics 库)
  5. 可观测性标准 OpenTelemetry 中的 Metrics

如何暴露指标?

当前业界主要的指标暴露方案,大致可以分为四种:

  1. 自定义 TCP/HTTP 接口:这种方式需要先设计私有协议,然后 Client SDK 封装接口来拉取数据。缺点是私有协议访问,不方便被集成,并且添加定义指标需要修改访问协议,工作量很大。
  2. JMX Service Server:JMX(Java Management Extensions)是 Java 提供的一套标准的代理和服务,通过基于 TCP 层的 JMX 协议远程获取数据。早期在 Java 里面用得比较多,近几年用的人相对较少。主要缺点是只能在 Java 里面用,而且只能通过 JMX 私有协议访问。
  3. Prometheus 标准接口:Prometheus 是在服务内部启动一个 HTTP 服务,然后暴露 /Metrics 接口,供客户端拉取数据。
  4. OpenTelemetry 上报:OpenTelemetry 它定义了一个接收器 Collector,即指标上报方根据 OpenTelemetry 的规范将数据上报到 Collector 中。

怎样打印日志?

OpenTelemetry Logs 推荐的标准规范内容:

image.png

可以多用 Trace、Debug 级别的日志,比如接收请求的时间和内容、请求返回的时间和内容可以定义为 Trace。


此文章为11月Day21学习笔记,内容来源于极客时间《深入拆解消息队列 47 讲》