在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 CrowdSec,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 CrowdSec,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 CrowdSec 中配置
以下操作在运行 CrowdSec 本地 API(LAPI)的机器上完成。HTTP 通知插件随 CrowdSec 一起安装,无需另装。
1
配置 HTTP 通知插件
编辑
/etc/crowdsec/notifications/http.yaml(Docker 部署时是容器内的同名路径),保留默认的 format,填入 url 和 method:format 必须保持 {{.|toJson}}:Flashduty 解析的正是 CrowdSec 告警列表的默认 JSON 结构。url 换成 Flashduty 集成的完整推送地址。Flashduty 通过地址中的 integration_key 识别集成,请像保管密钥一样保管该文件。2
在 profile 中启用通知
编辑 只有匹配该 profile 过滤条件的告警才会推送。保存后重载 CrowdSec:
/etc/crowdsec/profiles.yaml,在需要通知的 profile 下加入 notifications:sudo systemctl reload crowdsec(Docker 部署时重启容器)。3
开启超时自动关闭
CrowdSec 告警是一次性事件:封禁到期后 CrowdSec 不会再推送任何通知。请在接收这些告警的协作空间中开启 超时自动关闭,建议超时时长与封禁时长(上例为 4 小时)相同,计时起点选择 故障触发。故障关闭时,关联的告警一并关闭。
4
验证
在 CrowdSec 机器上执行:Flashduty 中会出现一条标题为
test alert、等级为 Info 的告警。它不会自动恢复,请手动关闭,或等待超时自动关闭。也可以用 cscli notifications list 查看插件是否已加载。推送内容
CrowdSec 每次请求推送一个 JSON 数组,每个元素是一条告警;启用
group_wait 或 group_threshold 后,CrowdSec 会攒到下一次推送时机再发出,推送最多比检测晚 group_wait,一个请求可能包含多条。Flashduty 为数组中的每个元素创建一条告警。事件明细(events)和 meta 中的原始日志不会进入 Flashduty。
Alert Key
Flashduty 使用 CrowdSec 为每条告警生成的
uuid 作为 Alert Key。请求重试时会带相同的 uuid,合并到同一条告警;同一个来源 IP 后续再次触发,会是新的 uuid,产生新的告警。
个别没有 uuid 的旧版本,Flashduty 用场景、来源类型、来源值和 start_at 计算 Alert Key。这些字段缺失时请求会被拒绝。
告警等级
CrowdSec 不提供严重程度,所有告警都以 Warning 等级触发,处于模拟模式(
simulated)的告警也是。cscli notifications test 发出的测试告警为 Info,并使用独立的 Alert Key,不会与真实告警合并。
标签
告警标题为
<场景> from <来源值>,描述为 CrowdSec 的 message。
常见问题
推送后 Flashduty 没有告警?
推送后 Flashduty 没有告警?
先执行
cscli notifications test http_default,确认能收到测试告警。收不到时检查 url 是否包含 integration_key,以及 CrowdSec 日志(/var/log/crowdsec.log)中 http 插件的报错。测试告警能收到但真实告警没有,通常是 profile 的过滤条件没有匹配,或 profile 中没有列出 http_default。需要配置签名或认证头吗?
需要配置签名或认证头吗?
不需要。Flashduty 只通过
integration_key 识别集成,不校验额外的请求头。告警为什么一直不关闭?
告警为什么一直不关闭?
CrowdSec 没有恢复事件。请开启协作空间的超时自动关闭,或在 Flashduty 中手动关闭该告警。