falco规则修改后不生效是因为默认不自动重载,需手动sighup或systemctl kill -s sighup;macro中不能用list:字段,须在rules顶部或lists.yaml中定义小写无下划线的list并显式include;driver加载失败会导致启动卡住,应优先检查日志中的“loaded rules from”和“rules engine is ready”。

falco rules 文件修改后为什么没生效
默认情况下,falco 不会自动重载规则文件——改完 rules.yaml 或新增 rule,必须手动触发重载或重启进程,否则所有改动静默失效。
常见错误现象:falco 日志里完全不出现新 rule 的匹配记录,甚至用 curl -X POST http://localhost:8765/healthz 检查都正常,让人误以为规则已加载。
- 最稳妥的做法是发送 SIGHUP:
kill -SIGHUP $(pidof falco)(注意不是kill -9) - 如果用 systemd 管理,执行:
sudo systemctl kill -s SIGHUP falco - 确认是否成功:查看
falco启动日志末尾是否有Loaded rules from和对应文件路径,以及Rules engine is ready - 避免用
systemctl restart falco,它会导致监控空窗期,且可能因配置语法错误直接启动失败
macro 中引用 list 时总报 unknown field 错误
在 macro 定义里写 list: my_list_name 是错的;list 不是合法字段名,正确写法是用 append 或直接内联条件,但更常见的是把 list 名作为 condition 的一部分来引用。
典型错误信息:error: unknown field "list" in ...
- macro 内不能直接声明
list:,只能通过condition引用已定义的 list,例如:condition: (proc.name in my_proc_list) - list 必须在 rules 文件顶部或独立
lists.yaml中定义,且名字要全小写、无下划线(如my_proc_list可,MY_PROC_LIST或my-proc-list不行) - list 条目值如果是字符串,需加引号;如果是数字或布尔值,不加引号(
- "sshd"✅,- sshd❌,会被解析成变量名) - macro condition 中若含多个 list 引用,建议用括号明确优先级,比如:
(proc.name in shell_procs) or (proc.name in service_procs)
自定义 list 放在哪、怎么被 falco 扫到
falco 默认只加载 /etc/falco/falco_rules.yaml 和 /etc/falco/falco_rules.local.yaml,其他文件(包括 lists.yaml)不会自动识别——必须显式 include。
使用场景:想把 proc 名、路径、用户列表等拆出来单独维护,避免主 rules 文件臃肿。
- 把 list 定义写进
/etc/falco/lists.yaml,然后在falco_rules.local.yaml开头加上:include: lists.yaml - include 路径是相对于
falco配置中rules_file所在目录的,不是绝对路径也不是工作目录 - 同一个 list 名不能在多个文件里重复定义,否则加载失败并报
duplicate key - list 内容支持
- value形式,也支持- macro: some_macro这种嵌套引用(只要 macro 已定义)
sysdig driver 加载失败导致 falco 启动卡住
如果 falco 启动日志停在 Loading sysdig driver... 就不动了,大概率是 kernel module 没装好或版本不匹配,和 rules 热加载无关,但常被误判为配置问题。
性能与兼容性影响:driver 缺失时 falco 会 fallback 到 eBPF,但部分事件(如 file open with flags)不可见,且 eBPF 模式对内核版本敏感(5.2+ 较稳)。
- 先运行:
sudo modprobe sysdig_probe,看是否报Module not found - 若未安装 driver,用
sudo /usr/bin/falco-driver-loader bpf强制走 eBPF(适合容器或 CI 环境) - 若坚持用 kernel module,检查
dkms status是否有sysdig条目,没有就重装:sudo apt-get install linux-headers-$(uname -r) && sudo /usr/bin/falco-driver-loader kernel - 注意:某些云厂商定制内核(如 AWS AL2、Azure AKS)禁用 module 加载,此时唯一可靠路径是 eBPF +
--bpf-probe /root/.falco/bpf/probe.o
falco 的 rules 加载机制本身简单,但 macro/list 的作用域、include 路径解析、driver 依赖这三块容易串在一起出问题。改完规则后第一反应不该是调 condition,而是先看日志里有没有 “Loaded rules from” 和 “Rules engine is ready”。










