实现数据关联的密码
12/24/2021
构建一个可观测系统的核心就是将丰富的数据关联在一起,比如我们需要知道一个访问请求的故障对应的日志是什么,同时他所在的 Pod 的一些信息,以及他依赖的 Mysql 是否存在异常等等,以前我们往往需要花大量的时间成本通过人工在不同的监控、日志、管理系统中去调取查看相关的 UI,即便使用一些工具实现统一的数据展示,这个实施过程也非常非常的复杂。

观测云作为提供可观测性平台,是从以下维度解决这个问题的

一致性的关键Tag

数据非常丰富,我们需要构建完整的 Tag(数据标签)体系,而且要保证这一些的 Tag 在整个系统全局是唯一的 Key 且拥有一致性的表达,如: host, pod_name, trace_id, project, cloud_provider, status 等,这样我们在查询不同数据的时候,包括构建相关的仪表盘的时候可以获得完整的统一认知,同时也可以快速方便的构建不同数据直接的关联关系。

统一从数据收集开始

由于我们面对的是海量的实时数据,为了建立数据相互的关联,观测云提供了 DataKit。 Datakit 与开源采集器最大区别是,Datakit 在收集数据的过程中完成了对 Tag 的统一定义,包括 Datakit 在兼容如:Prometheus、各种日志采集器、Opentelemetry 的各种 instrument sdk 时,都会将其本身的 Tag 或字段的定义转换为观测云自身的 Tag,或者增加观测云本身的相关的 Tag,包括用户自定义的。

数据的级联与Tag追加

一个原始数据产生的时候,产生这个数据的对象本身可能只会知道相关的数据,如:一个日志产生的时候,只有时间和消息体,但我们需要根据其输出的路径,一路追加 Tag,如:这个日志在某个容器中产生,就追加 container_name 这个 Tag;属于某个 Pod,就追加 pod_name, 然后是 deployment, namespace, node, project, version, cloudprovider 等,这些标签会在这个数据入库前完成所以路径的 Tag 的追加。

可观测性Pipeline

针对不同来源的数据,可能存在不同的数据结构,甚至是非结构化数据,包括 Tag 原始数据不统一的情况,我们需要将这些数据结构化。由于这些数据都是海量的实时数据,不可能采取像关系型数据那要的方式,进行ETL(抽取转化加载),而是需要像流(Stream)一样处理,类似流(streaming)- 转换 (transforming) - 输出 (Output) 这样一个过程,这就是可观测性 Pipeline。观测云支持多重方式的处理,一般可以通过 Datakit 的 Pipeline 功能,或进一步通过 Func 来实现。

Tag的对象表达与仪表盘映射

最终的 Tag 是需要能够关联起来的,这种关联不仅仅是数据的管理,更重要的是为了方便使用者能够进行观测。我们需要将 Tag 以一种对象的方式表达,如当我们看到任何数据存在 host 这个标签,就能够与一个对应此 Host 值所对应的表达该对象的仪表盘进行关联,这样无论在分析日志数据、安全数据、用户访问数据等,均可以指向对应数据所发生的主机的相关状态仪表盘。

用数字化手段保障系统稳定,从这里开始!

心动不停,立刻开始观测之旅!