跳转到内容

告警

在管理后台的 告警 页面中管理通道与规则。建议先创建通道,再创建规则时关联通道。


一条告警从触发到结束经历以下阶段(适用于轮询类规则):

  1. 等待(Pending):规则条件成立,但尚未达到触发延迟要求。如果条件在此期间恢复,不会产生任何通知。
  2. 触发(Firing):条件持续满足达到触发延迟后,告警激活,系统向关联的通道发送一次 ALERT 通知。
  3. 恢复(Recovered):条件不再成立并持续达到恢复延迟后,告警关闭。如果开启了恢复通知(默认开启),系统会发送一次 RECOVERED 通知。

轮询评估每 10 秒执行一次,因此触发/恢复时间是近似值,会受评估周期影响。

轮询类规则每次事件会产生一次触发通知;恢复通知最多一次(取决于 notifyOnRecovery)。route_change (beta) 属于事件类规则,只发送触发通知,并按主体应用 1 小时冷却。告警在恢复或状态被重置后,条件再次满足才会重新触发。

当主体暂时缺少可评估数据(例如节点数据、探测结果或计费数据不可用)时,系统会静默清除该主体状态,不发送恢复通知。


通道定义了通知的发送目标。创建通道后可发送测试通知来验证配置是否正确。

向指定 URL 发送 JSON 请求。

字段必填默认值说明
urlHTTP(S) 接收地址
methodPOSTPOSTPUT
timeoutMs5000请求超时(500–60,000 ms)
headers自定义 HTTP 请求头(键值对)
secretHMAC-SHA256 签名密钥
messageTemplate自定义消息模板(见消息模板

设置 secret 后,请求会携带签名头:

x-hina-signature: sha256=<hex_digest>

签名基于请求体计算。接收端可用此签名验证请求来源。

未设置 messageTemplate 时,请求体为 AlertMessageV1 JSON 结构:

{
"v": 1,
"kind": "firing",
"severity": "warning",
"rule": {
"id": "rule_abc123",
"name": "CPU High",
"kind": "metric_threshold"
},
"subject": {
"key": "a:agent_xyz",
"agent": {
"id": "agent_xyz",
"name": "us-west-1",
"group": "production"
}
},
"value": {
"metric": "cpu.usage_pct",
"op": ">",
"threshold": 90,
"value": 95.2,
"missing": false
},
"tsMs": 1712916600000
}
字段说明
vPayload 版本,固定为 1
kind"firing""recovered"
severity"info""warning""critical"
rule触发的规则信息(ID、名称、类型)
subject.key告警主体标识(如 a:{agentId}a:{agentId}|t:{taskId}
subject.agentAgent 信息(ID、名称、分组)
subject.task探测任务信息(仅探测类规则存在)
value规则特定的评估值,结构因规则类型而异
tsMs事件时间戳(Unix 毫秒)

设置 messageTemplate 后,payload 会额外增加一个 text 字段,包含模板渲染后的文本。

通过 Telegram Bot API 发送消息。

字段必填默认值说明
botTokenTelegram Bot Token
chatId目标聊天 / 群组 ID
parseModeHTML消息格式:HTMLMarkdownV2
disableNotificationfalse静默发送(不触发提示音)
messageThreadId论坛群组的话题 ID
buttons内联键盘按钮(最多 8 个)
messageTemplate自定义消息模板

parseMode 决定消息的富文本格式:

  • HTML(默认):使用 HTML 标签格式化,如 <b>粗体</b><i>斜体</i><code>代码</code>。自定义模板中的变量会自动进行 HTML 实体转义。使用 {{details.html}} 可插入预格式化的 HTML 详情。
  • MarkdownV2:使用 Telegram MarkdownV2 语法,如 *粗体*_斜体_`代码`。自定义模板中的变量会自动转义 MarkdownV2 特殊字符。使用 {{details.md}} 可插入预格式化的 Markdown 详情。

未设置 messageTemplate 时,系统会根据 parseMode 自动选择对应的内置格式生成消息。

buttons 用于在消息下方添加可点击的内联键盘按钮,显示为一行。通过 API 最多支持 8 个,管理界面最多支持 2 个。每个按钮包含:

  • text:按钮上显示的文字
  • url:点击后打开的链接

两个字段均支持 {{变量}} 模板语法。url 必须是合法的公网 HTTP(S) 地址(不支持 localhost 和内网 IP)。

[
{ "text": "View Dashboard", "url": "{{dashboard.url}}" },
{ "text": "Silence Rule", "url": "https://hina.example.com/admin/alerts" }
]

通过 SMTP 发送邮件。

字段必填默认值说明
hostSMTP 服务器地址
port587SMTP 端口
secure端口 465 时为 true是否使用 TLS/SSL
userSMTP 用户名
passSMTP 密码
from发件人地址
to收件人地址(多个用逗号分隔)
subjectPrefix邮件主题前缀
timeoutMs10000连接超时(500–120,000 ms)
messageTemplate自定义消息模板

通过 Server酱³ 推送通知。

字段必填默认值说明
sendKeySendKey(格式:sctp{uid}t...
tags标签(多个用 | 分隔)
short简短摘要
messageTemplate自定义消息模板

通过 Server酱Turbo 推送通知。

字段必填默认值说明
sendKeySendKey
channel频道名称
messageTemplate自定义消息模板

通过 Bark 推送到 iOS 设备。

字段必填默认值说明
deviceKey设备 Key
serverUrlhttps://api.day.appBark 服务器地址
sound提示音名称
group通知分组
level自动映射优先级:criticaltimeSensitiveactivepassive
icon图标 URL
messageTemplate自定义消息模板

未指定 level 时,系统根据告警严重程度自动映射:criticalcriticalwarningtimeSensitiveinfoactive

创建或编辑通道后,点击 测试 按钮可以发送一条示例通知。测试消息使用模拟数据,用于验证通道配置是否可达。


规则定义了告警的触发条件与通知策略。每条规则包含通用配置和类型特定的参数。

字段必填默认值说明
name规则名称
severity严重程度:infowarningcritical
kind规则类型(见下方各类型说明)
enabledtrue是否启用
forMs0触发延迟(毫秒,0–86,400,000)。管理界面按秒输入,保存时会自动换算为毫秒
recoverMs0恢复延迟(毫秒,0–86,400,000)。管理界面按秒输入,保存时会自动换算为毫秒
notifyOnRecoverytrue恢复时是否发送通知
channelIds[]关联的通道 ID 列表
selector适用范围(见下方说明)
类型说明
全部节点包括后续新增的节点
按分组指定分组内的所有节点
指定节点手动选择的节点列表

节点在心跳超时窗口内未上报数据时触发。无额外参数。

节点上报的指标值超过或低于设定阈值时触发。

参数必填默认值说明
metric指标键(如 cpu.usage_pct
op运算符:><
value阈值
missingignore指标缺失时的处理:ignore 忽略,alert 视为满足条件

关联的探测任务最近一次结果为失败时触发。

参数必填说明
taskIds探测任务 ID 列表(至少一个)

关联的探测任务响应延迟超过阈值时触发。仅在探测成功时评估——探测失败不会触发延迟告警。

参数必填说明
taskIds探测任务 ID 列表(至少一个)
op运算符:><
value延迟阈值(毫秒,≥ 0)

节点流量使用百分比超过阈值时触发。

配额百分比基于节点当前计费周期内的 usedBytes / quotaBytes 计算,只有配置了大于 0 的配额才会参与评估。触发条件是严格大于阈值;例如阈值为 100 时,正好用到 100% 不会触发,超过 100% 才会触发。计费周期、重置日和计费模式详见 计费与定价行为

参数必填说明
percentage百分比阈值(0–100)

节点距到期日不足指定天数时触发。该类型无触发延迟和恢复延迟。

参数必填说明
daysBeforeExpiry到期前天数(1–365)

关联的 Traceroute 探测任务路径发生变化时触发。该类型为事件驱动,无触发延迟和恢复延迟,且不发送恢复通知。同一主体触发后有 1 小时冷却期,冷却期内不会重复触发。该规则仅对 Traceroute 路径变更事件生效。

公开页面中的 Traceroute 结果会做隐私处理。即使开启“公开每跳详情”,公开页面也不会暴露每跳 IP、目标 IP 或源 IP;该选项只允许公开更多非 IP 的 hop 信息。关闭时,公开页面还会隐藏 hop hostname 和 ASN 信息。管理员登录后的管理视图不受此公开匿名化规则影响。

参数必填说明
taskIdsTraceroute 类型的探测任务 ID 列表(至少一个)

规则和通道为多对多关系:一条规则可关联多个通道,一个通道可被多条规则引用。更新规则的关联通道时为全量替换,传入空列表将移除所有关联。

通道类型在创建后不可更改。

以下操作会清除规则的所有告警状态(已触发的告警将消失,需重新满足条件才会再次触发):

  • 修改规则的适用范围
  • 修改规则的条件参数
  • 禁用后重新启用规则

状态说明
Pending等待发送或重试中
Sent发送成功(终态)
Dead发送失败且不再重试(终态)

发送失败的通知会自动重试,最多 5 次。重试间隔采用指数退避策略,从 5 秒起步,上限 15 分钟,每次附加随机抖动。达到重试上限或遇到不可恢复错误后,通知标记为 Dead。

禁用通道后,该通道的 Pending 通知会在后续发送轮询中被标记为 Dead(通常很快生效,最迟到该通知下一次尝试发送时)。

系统每 6 小时清理历史通知记录:

  • Sent 通知保留 7 天
  • Dead 通知保留 30 天

所有通道都支持 messageTemplate 字段,用于自定义通知消息的内容。未设置时使用系统内置的默认格式。

使用 {{变量名}} 占位符引用变量:

{{icon}} [{{severity}}] {{rule.name}}
Agent: {{agent.name}}
Time: {{time}}
{{details}}

变量在渲染时会根据通道类型自动转义(Telegram HTML 通道转义 HTML 特殊字符,MarkdownV2 通道转义 Markdown 特殊字符)。以 .html.md 结尾的变量为预转义变量,不会被二次转义。

以下变量适用于所有规则类型:

变量说明示例值
{{status}}告警状态ALERTRECOVERED
{{icon}}状态图标🔴 或 ✅
{{severity}}严重程度INFOWARNINGCRITICAL
{{rule.name}}规则名称CPU High
{{rule.kind}}规则类型metric_threshold
{{agent.name}}Agent 名称us-west-1
{{agent.id}}Agent IDclx...
{{agent.group}}Agent 分组production(无分组时为空)
{{task.name}}探测任务名称Ping Google(非探测规则时为空)
{{time}}事件时间2026-04-12 15:30:00 CST
{{details}}详情(纯文本)Metric: CPU Usage
Current: 95.2%
Condition: > 90%
{{details.html}}详情(HTML 格式,预转义)
{{details.md}}详情(MarkdownV2 格式,预转义)
{{dashboard.url}}Agent 面板链接(预转义)需在站点设置中配置 Public Base URL(默认可由 HINA_PUBLIC_BASE_URL 初始化),未配置时为空
变量说明示例值
{{offline.duration}}离线时长2m
变量说明示例值
{{metric.key}}指标键cpu.usage_pct
{{metric.name}}指标显示名CPU Usage
{{metric.value}}当前值95.2%
{{metric.threshold}}阈值90%
{{metric.op}}运算符>
变量说明示例值
{{probe.status}}探测状态FailedOK
{{probe.code}}HTTP 状态码502(无则为空)
{{probe.latency}}响应延迟350.2ms(无则为空)
{{probe.error}}错误信息connection refused(无则为空)
变量说明示例值
{{probe.status}}探测状态OK
{{probe.code}}HTTP 状态码200
{{probe.latency}}响应延迟350.2ms
{{probe.error}}错误信息
{{probe.threshold}}阈值条件> 200ms
变量说明示例值
{{quota.usage}}使用百分比80%
{{quota.used}}已使用量745.06 GB
{{quota.total}}配额总量931.32 GB
{{quota.threshold}}阈值> 75%
{{quota.mode}}计费模式RX + TXRX onlyTX onlymax(RX, TX)
{{quota.period}}计费周期2026-03-01 ~ 2026-04-01
变量说明示例值
{{expiry.date}}到期时间2026-04-17 00:00:00 CST
{{expiry.remaining}}剩余天数5 days
{{expiry.cycle}}付费周期monthly
变量说明示例值
{{route.prev}}变更前路径AS4134 → AS174 → AS13335
{{route.current}}变更后路径AS4134 → AS6939 → AS13335

Telegram HTML 通道的自定义模板:

{{icon}} <b>{{rule.name}}</b>
Status: {{status}} | Severity: {{severity}}
Agent: {{agent.name}}
Time: {{time}}
{{details.html}}

Webhook 通道的纯文本模板:

[{{severity}}] {{rule.name}} - {{status}}
Agent: {{agent.name}} ({{agent.group}})
{{details}}