> ## 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.

# 自动发现

> 不用建规则就找到的问题：APM 服务的错误率、延迟和流量突变，变差的新版本，前端新出现和又出现的错误，错误日志的突增和新模式，以及出了状况的主机和容器；需要时用一条自动发现规则把它们变成事件，或交给 Mole Agent 调查。

自动发现每 5 分钟把每个组织找一遍，结果存成 **发现**。打开 **告警 → 自动发现**，查看需要 `alerts.discovery.read`，建规则需要 `alerts.rules.manage`。

## 找什么

| 种类 | 来自 | 什么时候算 |
| - | - | - |
| **服务突变** | [APM 洞察](https://docs.molesignal.com/zh-Hans/apm/insights.md) | 最近半小时里服务的错误率、P95 延迟或流量，与前一段和上周同一段相比都有明显变化，并且请求数够多，看得出来。 |
| **新版本变差** | APM 洞察 | 最近半小时里第一次出现的版本，比它前一个版本差。 |
| **前端新错误** | [RUM 错误](https://docs.molesignal.com/zh-Hans/rum/errors.md) | 应用最近半小时里第一次出现的错误 issue。 |
| **前端错误又出现** | RUM 错误 | 解决过的错误 issue 在更新的版本里又出现。 |
| **错误日志突增** | 日志 | 最近 15 分钟里，一个日志流写了至少 20 条错误日志，并且是前 1 小时平均每 15 分钟的 3 倍以上；流里有服务字段时按服务拆开。 |
| **新的错误日志** | 日志 | 最近 15 分钟里出现至少 3 次、此前一天这个流里没有过的错误消息。消息里的数字和十六进制串不同也算同一条；每个流最多 10 条。 |
| **资源快满** | 指标 | 文件系统用了至少 90%，或内存用了至少 95%。 |
| **CPU 突变** | 指标 | 主机 CPU 至少 60% 忙，并且比 1 小时前高出至少 30 个百分点。 |
| **容器重启** | 指标 | 容器最近 15 分钟里重启过。 |

日志：每个组织看 20 个带级别字段（`level`、`severity`、`severity_text`、`severity_number` 之类）的日志流，最近改过结构的在前。error、fatal、critical 一类的级别算错误，`severity_number` 为 17 及以上也算。指标：只看 OpenTelemetry 的主机和 Kubernetes 接收器、Prometheus 的 node\_exporter 和 kube-state-metrics 里一组常见的资源指标，指标目录里有才查，不扫别的指标。

性能建议（慢依赖、N+1、慢语句、热点接口）不算问题，不进自动发现。忽略和已解决的 issue 也不算。

同一个问题（种类、服务或应用、环境和指标相同）只有一条进行中的发现：再看到就更新现值和最近一次看到的时间；连续三轮没再看到就算结束，结束的发现保留 30 天。一边读不出来（例如 APM 或 RUM 暂时查不了，或某个日志流查失败）时，这一轮不动那一边进行中的发现。有多个 `alert` 节点时，组织按 id 分给各节点。

## 发现列表

在 **进行中** 和 **已结束** 之间切换，可以按种类筛选。每一行用一句话说明发现了什么，例如「checkout 的错误率变为 12.0%（之前 0.40%）」，下面是严重度、种类和环境，后面是开始和最近一次看到（已结束的是结束）的时间。

点击一行打开详情：种类、现在的值、前一段和上周同段的值、版本、错误位置，以及开始和最近一次看到的时间；APM 的发现还列出开始前后的部署和版本变更。**在 APM 里打开**、**在 RUM 里打开**、**看这些日志**、**在指标里打开** 分别打开对应的服务、应用、日志流或查询。

**让 Mole Agent 调查** 关掉详情，就这条发现开一个 [Mole Agent](https://docs.molesignal.com/zh-Hans/agent) 对话：Mole Agent 用 `get_discovery_finding` 读这条发现，看它开始前后的日志、指标、链路和变更，再说下一步该做什么。

## 用规则通知

发现只进列表，不会叫醒任何人：它们是推算出来的，直接通知容易误报。要通知，建一条自动发现规则：

1. 点击 **建自动发现规则**，或在一条发现的详情里点击 **为这类发现建规则**（种类、服务和环境按这条发现填好）。
2. 在 **哪些发现** 中填写 **名称**，选 **种类**（都不勾是全部），填 **服务或应用**（APM 服务名或 RUM 应用 id，逗号分开，空着是全部）、**环境** 和 **最低严重度**。
3. 在 **通知谁** 中选 **升级策略** 和 **紧急度**：默认 **低（默认）**，只通知第一级，免打扰时段不打扰。
4. 点击 **创建规则**。

规则每分钟看一遍进行中的发现：命中的每条发现各开一个事件，严重度就是发现的严重度，事件带标签 `discovery.finding`、`discovery.kind` 和 `discovery.subject`，路由规则和静默可以按它们匹配。发现结束，事件就恢复。规则出现在[规则列表](https://docs.molesignal.com/zh-Hans/alerting/rules.md#自动发现规则)里，来源是 **自动发现**。

## 让 Mole Agent 调查新发现

触发方式为 **新的自动发现** 的[自动化](https://docs.molesignal.com/zh-Hans/automations.md#触发方式)，对保存或启用之后出现、满足 **种类**（都不勾是全部种类）、**至少** 某个严重度和 **服务、主机或容器**（用逗号分开，空着是全部）的每条发现运行一次。同一条发现只调查一次。默认什么发现都不会自动调查，免得推算出来的问题不声不响地用掉 Token 额度。

## API 与 Mole Agent

| 操作 | 端点或工具 |
| - | - |
| 列出发现 | [`GET /api/v1/alerts/discovery/findings`](https://docs.molesignal.com/zh-Hans/api/alerting/discovery) |
| 一条发现 | [`GET /api/v1/alerts/discovery/findings/{id}`](https://docs.molesignal.com/zh-Hans/api/alerting/discovery) |
| 建自动发现规则 | [创建规则](https://docs.molesignal.com/zh-Hans/api/alerting/create-rule.md)，`query.discovery` |
| Mole Agent | `list_discovery_findings` 和 `get_discovery_finding`（只读） |


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