> For the complete documentation index, see [llms.txt](https://meetbill.gitbook.io/butterfly-project-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://meetbill.gitbook.io/butterfly-project-doc/project-handlers/cloud_native/log_trace.md).

# 可观测性

"可观测性"源于控制论，上世纪 60 年代由匈牙利裔工程师鲁道夫·卡尔曼提出的概念；是指系统可以由其外部输出推断内部状态的程度。这个外部输出在 IT 系统中，通常是由各种应用服务产生，也就是我们常见的Trace、Metric、Log，这也是我们常说的可观测性的三大支柱。

\*\*业界将“可观测性”能力划分为5个层级，其中告警（Alerting）与应用概览（Overview）属于传统监控的概念范畴。\*\*由于触发告警的往往是明显的症状与表象，但随着架构与应用部署方式的转变，不告警并非意味着一切正常，因此，**获取系统内部的信息就显得尤为重要，而这些信息则须借助“可观测性”能力的另一大组成部分——主动发现（Preactive）**。

```
从上往下逐层递进的是现象和原因
(1) Alerting 告警
(2) Overview 概况
(3) Debugging 排错：即运用数据和信息去诊断故障出现的原因
(4) Profilling 剖析：即运用数据和信息进行性能分析
(5) Dependency 依赖分析：即运用数据信息理清系统之前的模块，并进行关联分析

1-2 是告警
1-5 是可观测性
```

在云原生中，可观测性的实现**依赖于监控指标 / 监控度量（Metrics）、事件日志（Logs）和链路追踪（Traces）三种数据**。这三种数据各有侧重，但又不是完全独立，它们天然就有重合或者可以结合之处。

* **监控指标**（Metrics）：度量是指对系统中某一类信息的统计聚合，存储空间很小，可以观察系统的状态和趋势。度量的主要目的是监控（Monitoring）和预警（Alert），监控主要是底层基础资源运行状态的数据，通过多维度聚合、分析和可视化展示，帮助快速理解系统资源的运行状态。预警则值得是某些度量指标达到风险阈值时触发事件，进行告警通知提醒管理员介入。
* **事件日志**（Logging）：日志的职责是记录离散事件，应用运行过程会持续输出日志数据，这些日志数据是业务系统运行状态的各种事件及业务处理逻辑时输出的，通过这些记录事后分析出程序的行为，基本上可以还原业务流程处理的全过程。事件日志可以详细解释系统的运行状态，但是存储和查询需要消耗大量的资源。
* **链路追踪**（Tracing）：链路追踪大都是依据谷歌 Dapper 理论来实现的，调用链记录的是串联单个事务内全过程的日志数据，通过对请求打标、透传、串联，最终可以还原出一次完整的请求，可以帮助工程师轻松分析出请求中异常点。但是链路追踪和事件日志一样有着相同的问题就是资源消耗较大，通常也需要通过采样的方式减少数据量。

## 传送门

{% embed url="<https://github.com/TencentBlueKing/bk-log>" %}

{% embed url="<https://help.aliyun.com/document_detail/151840.html>" %}
