InfraGuard

告警

构建告警组(策略),将系统、Web、数据库和安全条件打包在一起;一旦违规,即自动通过短信和邮件通知接收人。

概述 — 本页面的作用

基础设施 ▸ 告警(/infra/alert)是 告警组(策略)控制台。运维人员将 四个领域(系统 / Web / 数据库 / 安全) 的条件添加到同一条策略(infr_alert_policy)中,在界面上调整每个阈值 系数(factor);一旦发生违规,该组的 接收人(infr_alert_recipient)会自动收到短信/邮件通知。

它取代了旧的“容量与告警”页面(/infra/capacity),该地址现在会重定向到此处。

主要特点:

本页面只管理 策略、告警和投递历史。单台服务器的图表请见 服务器;Web 可用性请见 服务 ▸ Web;数据库负载请见 服务 ▸ 数据库。阈值默认值在 运维策略 中定义。

何时使用

界面布局

策略卡片网格

每条策略渲染为一张卡片,概括其 启用开关、严重级别徽章、已启用的领域和接收人数量,并提供以下操作:

操作 说明 权限
启用/暂停开关 is_active — 计划任务是否评估该策略 级别≥2
编辑 领域、条件、通道、接收人的模态框 级别≥2
立即检查 立刻评估并派发本策略(run) 级别≥2
测试 立即向接收人发送测试邮件/短信(test) 级别≥2
删除 删除策略及其接收人 级别≥2
拖拽排序 显示/评估顺序(seq, reorder) 级别≥2

编辑模态框(领域、条件、通道、接收人)

最近告警信息流

按 last_seen 倒序显示 infr_alert,最多 60 行(30 秒轮询)。每行显示观测值、阈值、聚合的 count 以及发送成功数/总数(来自 infr_alert_delivery),并提供 [确认] 和 [关闭] 状态流转。

使用方法

1) 创建策略

  1. [新建告警组] → 输入名称、严重级别、冷却时间。
  2. 启用希望监视的 领域。
  3. 为每个领域启用 条件 并调整阈值系数。默认值由 运维策略 的 alertDefaults() 预填。
  4. 选择 通道(短信/邮件)并添加 接收人。
  5. 保存。

2) 条件目录

系统(server_status,seq 窗口)

条件 开关 系数 默认值 产生的指标
平均负载超过 sys_load_on sys_load_max 20 load_avg(>20,按服务器)
磁盘剩余低于 sys_disk_on sys_disk_free_mb 500 disk_free(<500MB)

Web(实时 HTTP 探测 · infr_web_cert)

条件 开关 系数 默认值 产生的指标
服务不可用(状态码 ≠ 预期) web_code_on web_expect_code 200 http_status
延迟超过 web_latency_on web_latency_ms 5000 latency
证书即将到期 web_cert_on web_cert_hours 48 cert_expiry

只要启用“证书即将到期”,就会监视所有站点的证书。它不是按站点生效的 — 而是覆盖全部域名的全局扫描。

数据库(infr_db_metric 最新样本)

条件 开关 系数 默认值 产生的指标
等待队列上升 db_waiting_on db_waiting_max 5 db_waiting(>=5)
每小时慢查询 db_slow_on db_slow_per_hour 60 db_slow(slow_qps×3600 >= 60)

安全(legacy_glory 检测表 · 复合)

评估窗口为 sec_window_min(默认 10 分钟)。任意一个信号超过其阈值即触发违规。

条件 开关 系数 默认值 数据源
IDS 严重级别 + 数量 sec_ids_on sec_ids_severity, sec_ids_count 2, 20 suricata_alert_ct(严重级别≥S,窗口内数量≥N)
AI 异常封禁激增 sec_kitsune_on sec_kitsune_count 5 kitsune_detail_log(is_blocked=1,数量≥N)
新增封禁 IP 激增 sec_blacklist_on sec_blacklist_count 10 blacklist_info(窗口内新的 created_at,数量≥N)

相关:威胁 · 检测 · 封禁列表。

3) 立即检查/测试

4) 自动评估(计划任务)

启用的策略每分钟自动评估并派发。

Schedule::command('infr:eval-alerts --quiet-if-ok')
    ->everyMinute()
    ->withoutOverlapping(2)
    ->onOneServer()
    ->when($is_leader);

手动运行:

# 评估所有启用的策略(单次执行,执行完即退出 — 不是守护进程)
php artisan infr:eval-alerts

# 只评估某一条策略
php artisan infr:eval-alerts --policy=12

# 无违规时不输出(计划任务默认)
php artisan infr:eval-alerts --quiet-if-ok

infr:eval-alerts 是一条 执行完即退出的单次命令(遍历策略后返回)。绝不要把它改成无限循环的守护进程 — 从计划任务中启动永不退出的守护进程会耗尽共享数据库连接(参见 pulse:check 连接泄漏的教训)。计划任务每分钟安全地启动一个新实例。

数据来源

写入表(新增 infr_)

表 迁移 作用
infr_alert_policy 000700 告警组(策略)。scopes/targets/conditions/channels JSON + 严重级别、cooldown_min、seq
infr_alert_recipient 000701 每条策略的接收人(内联)。email/phone + via_mail/via_sms/is_active/seq
infr_alert 000702 告警实例(触发日志/处置队列)。去重键 (policy_id, metric, entity_key, status='open'),notified_at 冷却
infr_alert_delivery 000703 投递历史。channel/address/ok/provider_code/message_id/error/latency_ms

读取来源(遗留 + 新增,只读)

去重/冷却/自动关闭流程

  1. AlertEvaluator::evaluate($policy) → 按每个启用领域返回违规候选数组。各领域的异常相互隔离(一个领域失败不会阻塞其余领域)。
  2. AlertDispatcher::handle($policy, $breaches):
    • 每条违规按 (policy_id, metric, entity_key, status=open) 查找 → 找到则更新并 count++;否则插入新记录(first_seen、count=1、notified_at=null)。
    • 可通知 = 新记录 或 notified_at 为 null 或 notified_at <= now - cooldown_min。
    • 自动关闭:本策略中未出现在本轮违规里的未关闭告警 → status='closed'。
    • 批量发送:可通知的告警会按接收人、按通道合并为 一条消息(正文最多 8 行,超出部分显示“+N more”;短信截断至 140 字符)。发送后,将各目标的 notified_at=now。
    • 每个(接收人,通道)组合写入一行 infr_alert_delivery。

访问权限

操作 最低级别 审计
查看控制台/列表/信息流(index/list/feed) 1(读) —
保存/删除/排序策略(save/delete/reorder) 2(写) alert_policy.create / .update / .delete
告警确认/关闭 2 alert.ack / alert.closed
立即检查(run) 2 发送时记录 alert.fire
测试发送(test) 2 alert.test
计划任务自动发送 (系统) alert.fire

级别刻度:demo=1 · staff=5 · admin=10。读取需要级别≥1;写入与派发需要级别≥2。所有破坏性/派发操作都会记录到 infr_audit_log(参见 审计日志)。投递通道的服务商由管理员配置(级别≥10)。

故障排查与常见问题

Q. 我启用了条件,但收不到告警。

  1. 确认策略处于 启用 状态,并且计划任务(schedule:work /生产环境的进程守护)正在运行。
  2. 没有通道服务商 — 查看卡片上的警告,在 邮件适配器/短信适配器 中配置默认服务商。
  3. 确认接收人的 via_mail/via_sms 与策略通道的 交集 非空,并且邮箱/电话已填写。
  4. 在 冷却期 内会抑制重复发送(cooldown_min,默认 30 分钟)。可以用 [立即检查] 立刻验证,但已通知过的告警只有在冷却期过后才会再次发送。

Q. 我的数据库/系统条件一直不触发。

Q. 证书到期只监视某个特定站点吗?

Q. 同一个违规会不断堆积吗?

Q. Web 探测会拖慢评估吗?

相关内容

경보 — 정책 카드와 최근 경보 피드
경보 — 정책 카드와 최근 경보 피드