观测云

https://www.yuque.com/r/dataflux/books?q=

https://github.com/GuanceCloud
image.png
控制台
https://auth.guance.com
image.png
观测云是一个集指标数据、日志数据、APM 、RUM、基础设施、容器、中间件、网络性能等多种数据统一收集管理平台
观测云构建了基础设施,容器,中间件,数据库,消息队列,应用链路,前端访问,日志,系统安全,网络访问性能全链路的可观测性
集成
https://www.yuque.com/dataflux/integrations

数据采集

https://www.datakit.tools
https://github.com/GuanceCloud/datakit

DataKit 是一款开源、一体式的数据集成 Agent,它提供全平台操作系统(Linux/Windows/macOS)支持,拥有全面数据采集能力,涵盖主机、容器、中间件、Tracing、日志以及安全巡检等各种场景

采集器
https://github.com/GuanceCloud/datakit/blob/github-mirror/README.zh_CN.md

社区版
https://www.yuque.com/dataflux/datakit-community

小程序应用接入
https://docs.guance.com/real-user-monitoring/miniapp/app-access

DataKit是由观测云产品官方提供的数据采集器,本身内置多种数据源采集脚本,支持多种数据接入并且支持Windows、Linux、Mac 操作系统,ARM、X86 多系统类型对于日志收集更是做到全平台兼容
DataKit 是观测云的前置 gateway, 把数据打给观测云
Datakit 是运行在用户本地机器上的一种基础数据采集工具,主要用于采集系统运行的各种指标、日志等数据,将它们汇总给 观测云,在观测云中,用户可以查看并分析自己的各种指标、日志等数据。DataKit 是观测云中至关重要的一个数据采集组件,所有观测云中的数据都是来源于 DataKit。

  1. DataKit 主要通过定期采集的方式,采集各种不同的指标,然后定时、定量通过 HTTP(s) 将数据发送给 DataWay。每个 DataKit 都会配置对应的 token,用于标识不同的用户
  2. DataWay 收到数据后,转发给观测云,在发给观测云的数据中,带有 API 签名
  3. 观测云收到合法的数据后,根据不同的数据类型,分别写入不同的存储中

对于采集类的数据业务,一般情况下,允许部分数据丢失(因为本身数据就是间歇采集的,间歇期内的数据,可视为一种数据丢失),目前整个数据传输链路做了如下丢失保护:

  1. DataKit 因为某些网络原因,发送 DataWay 失败,此时 DataKit 会缓存最大一千个点的数据。当缓存的数据超过这个量,这个缓存会被清理掉
  2. DataWay 可能因为某些原因,发送观测云失败,或者因为流量较大,来不及发送给观测云,DataWay 会将这些数据持久化到磁盘。后续待流量降低或网络恢复时,再将这些数据发送给观测云。延迟发送的数据,不影响时效性,时间戳是附着在缓存的数据中的。

在 DataWay 上,为保护磁盘,这个磁盘的最大用量也是可以配置的,以免将所在节点的存储撑爆。对于超过用量的数据,DataWay 也是选择丢弃数据。不过这个容量一般设置得比较大。


可观测 - 图3
DataKit组成
自上往下,DataKit 内部主要分成三层:

  • 顶层:包括程序入口模块以及一些公共模块
    • 配置加载模块:DataKit 除了自己的主配置(即 conf.d/datakit.conf)之外,各个采集器的配置都是分开配置的,如果放一起,这个配置文件可能非常大,不便于编辑
    • 服务管理模块:主要负责整个 DataKit 服务的管理
    • 工具链模块:DataKit 作为一个客户端程序,除了采集数据之外,还提供了很多其它的周边功能,这些都是在工具链模块实现的,如查看文档、重启服务、更新等
    • Pipeline 模块:在日志处理中,通过 Pipeline 脚本(Grok语法),实现对日志的切割,将非结构的日志数据,转换成结构化数据。在其它非日志类数据中,也可以进行对应的数据处理
    • 选举模块:当部署的 DataKit 特别多时,用户可以将所有 DataKit 的配置做成一样,然后通过自动化批量部署将配置下发给各个 DataKit。选举模块的意义在于,在一个集群中,某些数据的采集(如 Kubernets 集群指标),只应有一个 DataKit 实施采集(不然数据重复,且给被采集方造成压力)。在集群中所有 DataKit 配置都一样的情况下,通过选举模块,即可实现任意时间,最多只会有一个 DataKit 实施采集
    • 文档模块:DataKit 的文档随带安装,用户可以访问 http://localhost:9529/man 页面访问文档列表;也可以在命令行浏览文档
  • 传输层:负责几乎所有数据的输入输出
    • HTTP 服务模块:DataKit 支持第三方数据的接入,比如 Telegraf/Prometheus,后续还可以接入更多的数据源。目前这些数据都是通过 HTTP 接入
    • IO 模块:各个数据采集插件,每次采集完成后,都会将数据发送给 IO 模块。IO 模块封装了统一的数据构建、处理和发送接口,便于接入各个采集器插件采集的数据。另外,IO 模块会以一定的节奏(定期、定量),通过 HTTP(s) 将数据发送给 DataWay
  • 采集层:负责各种数据的采集。按照采集的类型,分成两类:
    • 主动采集型:这类采集器按照配置的固定频率来采集,比如 CPU、网卡流量、云拨测等
    • 被动采集型:这类采集器通常是以外部数据输入来实现采集,比如 RUM、Tracing等。它们一般运行在 DataKit 之外,可通过 DataKit 开放的数据上传 API,对数据经过一定的标准化处理,然后再上传到观测云

可观测 - 图4

可观测 - 图5


数据处理

DataFlux Func
https://func.guance.com
DataFlux Func 是一款函数开发、管理、执行平台。简单易用、无需从零搭建Web服务,无需管理服务器等基础设施,只需编写代码并发布,简单配置即可为函数生成HTTP API接口

如何通过 DataFlux Func 上报自定义数据
https://www.guance.com/learning/articles/tutorial_Func_basic01
视频内容

  • DataKit API 介绍
  • DataKit Func 介绍
  • 通过 DataFlux Func 上报自定义对象数据

可观测 - 图6

数据展示

DataV
https://github.com/DataV-Team/Datav
http://datav.jiaminghi.com
实践:
https://func.guance.com/doc/query-data-via-datakit-for-datav

链路数据

OpenTelemetry
https://www.yuque.com/dataflux/bp/ezuo9s
https://github.com/lrwh/observable-demo/tree/main/opentelemetry-collector-to-guance
OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题

https://opentelemetry.io
https://github.com/open-telemetry/opentelemetry-specification
OpenTelemetry 是由两个开源项目合并组成的:

面向 trace 和 metrics 进行数据模型标准化,并提供采集、处理、导出的工具

面向 trace 进行数据模型标准化,并提供采集、处理、导出的工具
2019 年 5 月,两个开源项目合并,官方宣布开源 OpenTelemetry 项目
架构
可观测 - 图7

OpenTelemetry-Collector
https://www.yuque.com/dataflux/bp/opentelemetry

最佳实践
https://www.yuque.com/dataflux/bp

电商订单全流程可观测性最佳实践
https://www.guance.com/learning/articles/e-commerce_orders
海量微服务项目的性能可观测性最佳实践
https://www.guance.com/learning/articles/amounts_of_microservices
数据关联最佳实践:指标、日志、链路
https://www.guance.com/learning/articles/correlated_information

参考文档

https://docs.guance.com