> ## Documentation Index
> Fetch the complete documentation index at: https://docs.molesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 洞察与调查

> 查看和上一时段、上周同时段相比有变化的指标、附近的变更，以及可以省下时间的地方；把发现交给 Mole Agent 调查，查看事件的影响范围，并对 APM 指标设置异常检测告警。

APM 概览和服务概览上的**洞察**卡片列出时间范围内值得注意的地方：和上一时段、上周同时段相比有变化的指标，比上一个版本差的版本，以及可以省下时间的地方。每条发现会列出它开始时附近的变更，点击**调查** 可以交给 Mole Agent。

## 基线对比

发现列表上方有两行，把当前视图里的服务和两段同样长的时间相比：

* **与上一时段相比**：紧挨在时间范围之前的一段；
* **与上周同时段相比**：把时间范围往前移七天。

每行写明吞吐和错误率的变化，错误率按百分点计。没有请求的那段时间不显示对应的行。

分钟聚合保留 24 小时。更早开始的时间段从覆盖它的小时聚合读取，请求数按这段时间本身的长度折算。

## 洞察的种类

| 洞察 | 级别 | 条件 |
| - | - | - |
| **突变** | 服务在时间范围内为严重时是**严重**，否则是**警告** | 错误率、P95 或吞吐和每个请求数足够的基线时间段相比都有突变，并且至少有一个基线时间段的请求数足够。 |
| **版本变差** | **警告** | 时间范围内首次出现的版本比上一个版本差，以[部署](https://docs.molesignal.com/zh-Hans/apm/deployments.md)页的结论为准。 |
| **瓶颈** | **建议**；服务不健康时为**警告** | 某个依赖至少占服务请求 40% 的时间，且至少有 20 次调用。 |
| **N+1** | **建议** | 同一个调用（发往消息队列的除外）每个请求平均至少 10 次，总数至少 200 次：疑似循环调用，可以合并为一次调用。 |
| **慢 SQL** | **建议** | 某条数据库语句至少 20 次调用，P95 至少 100 毫秒。每个服务列出总耗时最多的两条。 |
| **热点端点** | **建议** | 服务有两个以上端点处理过请求，其中一个至少占服务 40% 的耗时，且至少有 50 个请求。 |

每项指标单独判断是否突变：

| 指标 | 突变条件 |
| - | - |
| 错误率 | 至少上升 2 个百分点，且至少是原来的两倍。 |
| P95 | 至少是原来的 1.5 倍，且至少慢了 100 毫秒。 |
| 吞吐 | 降到一半以下，或升到两倍以上，且请求较多的那段时间至少有 100 个请求。 |

一段时间至少有 20 个请求，它的错误率和 P95 才参与判断。发现会写明现在的值，以及每个基线时间段的值。

发现按严重、警告、建议排序，最多 30 条。建议只说明时间花在哪里，不代表服务不健康。

### 突变从何时开始

以基线和现在的值之间的中线为界，时间范围内第一个越过中线的时间桶就是突变开始的时间，前提是下一个时间桶也越过中线，并且之后至少一半的时间桶都越过中线。单个异常的时间桶不算突变开始。卡片在发现旁边显示突变开始的时间，鼠标停留时显示精确时间。

## 发现附近的变更

突变和版本变差的发现会列出开始前 30 分钟到开始后 10 分钟内的变更，离开始时间最近的在前，最多五条：

* 流水线为该服务或它调用的服务上报的发布、配置变更和功能开关；
* 这段时间里服务的 Span 首次带上、但没有流水线上报的版本，标注为从 Span 观测到。

带环境上报的变更只在该环境中计入。配置变更和功能开关以带 `kind` 的发布事件上报，见[上报配置变更与功能开关](https://docs.molesignal.com/zh-Hans/apm/deployments.md#上报配置变更与功能开关)。

## 洞察显示在哪里

| 页面 | 卡片内容 |
| - | - |
| **概览** | 视图内所有服务的发现，每条都带服务名。不显示**版本变差**：最近部署卡片已经标出了变差的版本。 |
| 服务的**概览** | 该服务的发现。不显示**瓶颈**和**热点端点**：同一页的下游耗时和主要端点卡片已经给出。 |

没有值得注意的地方时，卡片会写明。页面的环境和版本筛选同样生效。

## 让 Mole Agent 调查

点击**调查**会打开 Mole Agent，就当前看到的内容新建一个会话：

| 位置 | 问题里写明 |
| - | - |
| 服务页标题栏 | 服务、环境和时间范围。 |
| 端点抽屉 | 端点、所属服务和环境，以及时间范围。 |
| 错误抽屉 | 错误、指纹、所属服务和环境。 |
| **洞察**卡片上的发现 | 卡片上的这条发现、所属服务和环境，以及时间范围。 |

会话会附上该服务，问题填在输入框里，读过、改好之后再发送。拥有 `agent.use` 的用户才能看到这个按钮。发起会话需要 `streams.query`，或 `_sys` 范围内的 `sys.telemetry.read`，并会为该服务建一条调查记录，见[调查](https://docs.molesignal.com/zh-Hans/agent#调查)。

附上的服务会把以下内容告诉模型，时间为会话的时间范围，没有设置时为最近一小时：

* 每个环境的健康状态和原因、请求数、错误率、P50、P95、P99、Apdex 和版本；
* 上一时段和上周同时段的数据；
* **洞察**卡片上最多八条发现，以及它们附近的变更；
* 最多六个调用它的服务，以及最多六个它调用的对象，带健康状态。

没有 APM 数据的服务，改为提供服务图在过去一天里配对到的服务间调用。

Mole Agent 还可以用 `get_apm_insights` 读取洞察，用 `get_apm_blast_radius` 读取服务的影响范围。内置的事件排查技能会用到这两个工具，延迟回归技能会先读取该服务的洞察。

## 事件的影响范围

事件关联到某个服务时，事件详情里有**影响范围**一节。服务取自标签 `service.name`、`service_name`、`service` 或 `svc`，都没有时取事件的受影响服务。环境取自标签 `deployment.environment` 或 `environment`。这一节读取从事件开始前 30 分钟到事件解决时（未解决时到现在）的 APM 服务地图：

| 列表 | 内容 |
| - | - |
| **调用它的服务：会受它影响** | 调用该服务的服务，以及调用这些服务的服务，最多相隔三层调用。 |
| **它调用的：问题可能来自这里** | 该服务调用或发布到的服务、数据库、缓存、外部端点和 Topic，以及这些服务再调用的对象，最多相隔两层调用。 |

每个列表把不健康的放在前面，最多六个。每项写明相隔几层、健康状态，以及它和上一层节点之间的调用次数和失败比例。Topic 和外部端点不再往下展开；经过 Topic 的调用也不会影响到生产者，因为生产者不等待消费者。和上一时段相比已经消失的调用不计入。

**在服务地图中查看**会打开该环境的 [APM 服务地图](https://docs.molesignal.com/zh-Hans/apm/service-map.md#apm-服务地图)，并选中该服务。能读取 APM 数据的用户才能看到这一节，读到地图之后才显示。这段时间的服务地图上没有该服务时，这一节会写明。

## 对 APM 指标设置异常检测告警

异常检测规则可以监控 APM 指标，而不是查询结果。规则窗口内的指标值明显偏离过去几天同一时刻的窗口时触发告警。

**1. 打开异常检测规则编辑器**

在服务页或端点抽屉中打开**新建告警**，选择**异常检测告警**。编辑器以 **APM 指标**数据源打开，并预填服务、环境和端点。在**告警**中新建异常检测规则时，也可以选择这个数据源。

**2. 选择指标和基线**

选择指标，再设置 1 到 30 天的回看天数、算法和灵敏度。开启**周季节性**后，只比较相同星期几的历史。

**3. 保存**

填写规则名称并创建规则。创建规则需要 `alerts.manage`。

异常检测规则可以使用除**新错误组**和 **SLO 燃烧率**以外的所有 APM 指标。早于 24 小时的历史窗口从覆盖它的小时聚合读取，请求数和错误数按窗口本身的长度折算。规则带有的标签和同一指标的阈值规则相同，见[按 APM 指标告警](https://docs.molesignal.com/zh-Hans/apm#按-apm-指标告警)。算法及其参数见[告警](https://docs.molesignal.com/zh-Hans/alerting)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.