跳到正文

config.yaml ​

beacon serve 启动时读一个 YAML 文件,默认 /etc/beacon/config.yaml;-config 指定别的。文件只在启动时读一次,改了要重启。它指名的目录、目标和模块文件(catalog_dir、gateway.targets_dir、gateway.modules_file)是另一回事:服务在首次启动时把它们导入数据库,之后在 SIGHUP 时再导入(配置)。仓库里的示例文件 config.example.yaml 带注释列出了每一个键。

两条规则贯穿整个文件:

  • 不接受未知键。 下面的表里没有的键会让启动失败,写错不会静默放过。beacon check-config -config FILE 不启动就校验文件、它指名的文件和数据库(命令行)。
  • 密钥是文件,不是值。 每个凭据都是一个 *_file 路径:rules.token_file、feishu.app_id_file、hook 的 secret_file。Beacon 启动时读一次文件,去掉首尾空白,从不记录内容;空文件会让启动失败。这些文件怎么填是部署自己的事:Beacon 不依赖任何密钥管理器。rules.token_file 和 webhook hook 的 secret_file 至少 24 个字符。

时长按 Go 的写法:30s、5m、4h、720h。

服务 ​

键类型默认值含义
listen地址:17001控制台、API 与 MCP 在 TLS 代理后面应答的地址
data_dir路径/var/lib/beaconbbolt 状态(告警组、令牌、成员、配置),会话录像在它旁边。CLI 用的管理套接字也在这里;BEACON_DATA_DIR 只为 CLI 指定别的目录
catalog_dir路径/etc/beacon/catalog目录文件(检测点、心跳、到期资源、状态页),首次启动和 SIGHUP 时导入数据库
public_urlURL—Beacon 自己的地址,在代理后面:它发出去的链接(控制台、一次性链接)和 MCP 客户端登录用的 issuer。Agent 的 hook 也需要它
trusted_proxies地址或 CIDR 段列表—前面的反向代理(服务眼中的地址),让 API 看到真实客户端地址
languagezh 或 enzh卡片和聊天消息的语言
timezone时区Asia/Shanghai卡片上的时间;状态页历史的每一天从这里的午夜开始

规则与路由 ​

键类型默认值含义
rules.token_file路径必填规则引擎(vmalert 或 Prometheus)向网关的 /api/v2/alerts 发告警时所用 bearer 令牌,与发给 Alertmanager 的相同。至少 24 个字符

路由做的是 Alertmanager 的 route 和 inhibit_rules 的事。match、source 和 target 里的标签值是匹配整个值的正则表达式。

键类型默认值含义
routing.group_by标签名列表[alertname, service]告警组共享的标签
routing.group_wait时长30s一组的第一条告警之后,先等更多告警再发卡片
routing.group_interval时长2m之后至多按这个频率更新卡片
routing.resolve_timeout时长5m规则引擎不再发送的告警在这之后转为恢复
routing.routes.match标签到正则的映射—路由匹配什么;第一个匹配的路由改变分组
routing.routes.group_by标签名列表—该路由自己的分组,多个服务合一张卡
routing.inhibit.source标签到正则的映射—源告警触发期间
routing.inhibit.target标签到正则的映射—equal 标签取值相同的目标告警被静默
routing.inhibit.equal标签名列表—必须取值相同的标签

网关 ​

机器的门:检测点和主机用 beacon enroll 发的令牌写入并拉取检测任务,任务推心跳,规则引擎和 Flux 发告警,metrics:read 令牌读取(REST API)。

键类型默认值含义
gateway.listen地址:17006机器接入的地址。留空关闭网关
gateway.targets_dir路径/etc/beacon/targets检测目标文件(all-*.yaml、<location>-*.yaml),首次启动和 SIGHUP 时导入数据库
gateway.modules_file路径gateway.targets_dir 下的 modules.yml检测模块,同样导入
victoriametrics.urlURL开网关即必填检测结果所在处:网关写入,卡片从这里取每个检测点的结果

SSH 通道 ​

设置了 ssh.ca_key_file 通道才开启(给 Agent 一台机器)。两把钥匙都是 OpenSSH 私钥:ssh-keygen -t ed25519。

键类型默认值含义
ssh.listen地址:17002Agent 连接通道的地址
ssh.public_addresshost:port—外部到达的地址,用于 Beacon 发给 Agent 的 ssh 配置
ssh.host_key_file路径开通道即必填通道自己的 host key,不是机器的
ssh.ca_key_file路径—为每次连机器签短期证书的钥匙;设置它即开启通道。必须与 host key 是不同的钥匙
ssh.source_addressesCIDR 段列表—设置后,证书只从这些地址可用
ssh.keep时长4320h(180 天)会话及其录像保留多久。至少 24h
键类型默认值含义
links.grafana_serviceURL 模板—告警卡片链到的仪表盘;填入 {service},告警自己的注解优先
links.runbookURL 模板—操作手册;填入 {alertname},告警自己的注解优先
pages.link_ttl时长720h(30 天)指向控制台页面(告警时间线、会话回放)的签名链接有效期。介于 1h 与 366 天之间
branding.title字符串Beacon没有状态页时 / 上那页对部署的称呼。一行,至多 80 个字符
branding.powered_by布尔truefalse 则公共页脚不写 "Powered by Beacon, open source"
oauth.client_id_documents布尔true按 client_id 所指名的元数据文档接纳 MCP 客户端(Claude Code 和 Codex 都是),Beacon 需从互联网取它。Beacon 上不了网时设 false:客户端改为自行注册

飞书 ​

自建应用(卡片、按钮回调、加急)和群机器人(配置飞书应用)。

键类型默认值含义
feishu.app_id_file路径—应用的 App ID;与 feishu.app_secret_file、feishu.chat_id 同进同出
feishu.app_secret_file路径—应用的 App Secret
feishu.domainfeishu 或 larkfeishuopen.feishu.cn 或 open.larksuite.com
feishu.callbackwebsocket 或 httpwebsocket按钮回调怎么到达:飞书长连接,或 POST 到 /hooks/feishu
feishu.verification_token_file路径—Verification Token,仅 http 回调
feishu.encrypt_key_file路径—Encrypt Key,仅开启加密的 http 回调
feishu.chat_id字符串配了应用即必填告警卡片发到的群
feishu.on_call列表配了应用即必填只有他们能在卡片上操作,加急也是加给他们
feishu.on_call.open_id字符串—某个人的 ou_… id
feishu.on_call.name字符串—姓名,显示在卡片上
feishu.monthly_budget整数10000应用每月的 API 调用数,飞书免费版的额度。至少 100
feishu.webhook_url_file路径—群机器人:纯文本消息,不占 API 配额。info 级告警、超额提醒和回显走它
feishu.webhook_secret_file路径—机器人对请求签名时用
feishu.webhook_keyword字符串Beacon机器人的安全设置是关键词时填

Pushover、Bark 与 healthchecks.io ​

键类型默认值含义
pushover.user_key_file路径—紧急推送发给谁;与 pushover.token_file 同进同出
pushover.token_file路径—Pushover 应用的 token
pushover.retry时长60s紧急告警在确认前按这个频率重复。至少 30s
pushover.expire时长3h重复多久后放弃。至多 3h
pushover.apiURLhttps://api.pushover.netPushover 的 API,供代理或测试用
bark.url_file路径—带响铃紧急级别的 iOS 推送:https://api.day.app/<key>,或自建服务
healthchecks.bridge_url_file路径—桥能送出告警时每分钟 ping 一次,不能时 ping /fail:基础设施之外的死人开关(healthchecks.io)

升级与确认 ​

各级告警怎么到达人。时长为零即关闭该步。整个 escalation 段缺省时,Beacon 按已配置的通道择优:配了飞书应用就用应用,只配了群机器人就用机器人,都没有则 none(告警只记录,API 和 MCP 照样可看);critical 配了应用 10 分钟后加急、配了 Pushover 15 分钟后推手机;info 级在应用之外还有机器人时走机器人。

键默认值含义
escalation.critical.channel已配置的最优通道app(飞书卡片)、webhook(群机器人)或 none(只记录)
escalation.critical.buzz配了应用 10m,否则关这段时间后在飞书上加急值班的人
escalation.critical.pushover配了 Pushover 15m,否则关这段时间后向手机发紧急推送
escalation.critical.bark关这段时间后发 Bark 推送
escalation.warning.channel已配置的最优通道同 escalation.critical.channel
escalation.warning.buzz关同 escalation.critical.buzz
escalation.warning.pushover关同 escalation.critical.pushover
escalation.warning.bark关同 escalation.critical.bark
escalation.info.channel应用;应用与机器人都有时走机器人低级别告警不必占应用配额
escalation.info.buzz关同 escalation.critical.buzz
escalation.info.pushover关同 escalation.critical.pushover
escalation.info.bark关同 escalation.critical.bark
ack_ttl4h确认经过这段时间后失效,升级重新开始。至少 10m

Agent hook ​

新的告警组首次通知时唤醒 Agent 的 hook,告诉它证据在哪(被 webhook 唤醒的 Agent)。Beacon 不调用任何模型:怎么处理是 Agent 的事。列表里的每项是 kind: webhook(签名的 JSON POST)或 kind: github(触发 workflow)。

键种类含义
agents.name两者hook 的名字:小写字母、数字、点、连字符和下划线
agents.kind两者webhook 或 github
agents.severities两者哪些级别会唤醒它。默认 [critical]
agents.service两者匹配整个 service 标签的正则;留空匹配任何服务
agents.resolved两者组恢复时也调用
agents.resolved_after两者恢复调用等待多久,让 Agent 上一次运行先收尾留言。默认 1m,至多 5m;0 立即发送
agents.urlwebhookJSON 负载 POST 到的地址
agents.secret_filewebhookHMAC-SHA256 签名密钥,以 X-Beacon-Signature 发送;至少 24 个字符。secret_file 或 headers_file 必须有其一,Agent 才能分辨 Beacon 的调用和伪造
agents.headers_filewebhook每次调用都带的 Name: value 行,供校验自己那套密钥的接收方;有了它 secret_file 可省
agents.repositorygithub仓库,owner/name
agents.workflowgithubworkflow 的文件名(如 oncall.yml)或 id
agents.refgithub默认 main
agents.token_filegithub能触发该 workflow 的令牌(仓库的 Actions 读写权限)
agents.apigithub默认 https://api.github.com;GitHub Enterprise 填自己的

变更事件 ​

键类型默认值含义
changes.keep时长720h(30 天)发送方发到网关的变更事件(部署、 Flux 调和)保留多久。至少 24h