【Falco】输出面:sink 白名单与 gRPC 删除门

💡 原文中文,约5400字,阅读约需13分钟。
📝

内容提要

Falco 0.44.1仅支持stdout、syslog、file、http、program五种输出方式,gRPC输出已移除。排障时需区分输出背压与驱动丢事件,先用stdout验证引擎命中,再检查下游通道。

🔎

延伸解读

升级后gRPC静默断流:别误判为规则失效

Falco 0.44.0起彻底移除gRPC输出,若升级前忽略0.43的弃用警告,升级后旧客户端将永久空窗。此时引擎可能仍在命中(如stdout可见),但下游无告警,易被误认为“Falco没检测到”。修复应改接线至HTTP或Falcosidekick,而非调整规则条件。升级检查单应显式grep配置中的grpc字段,清除文档债务。

输出背压与驱动丢事件:两类问题勿混淆

排障时需区分输出侧背压(如outputs_queue满、buffered_outputs延迟)与驱动侧丢事件(内核缓冲不足)。若stdout有命中而SIEM无,问题在输出通道;若所有sink均无且drop指标上涨,则需检查捕获层。监控应同时跟踪引擎命中计数与各sink成败,避免在错误层调整buf preset或http URL。

有界队列的静默丢告警风险

outputs_queue设为有界时,队列满会丢弃事件并继续循环,导致静默丢告警;无界则可能内存耗尽被OOM kill。生产环境需显式选择并权衡,且应将“丢告警”纳入事故定义,避免只关注内核drop而忽视用户态队列丢弃。

Q&A

Falco 0.44.1 支持哪些输出方式?

Falco 0.44.1 支持五种输出方式:stdout、syslog、file、http 和 program。这些通道在 falco.yaml 中标记为 Stable,可以同时启用多个。

Falco 的 gRPC 输出在哪个版本被移除?

Falco 的 gRPC 输出和服务器支持在 0.44.0 版本中被移除(PR #3798)。0.43 版本弃用并给出警告,0.44.0 及以后版本(包括 0.44.1)中配置键无效,代码路径不存在。

Falco 0.44.1 中 gRPC 输出被移除后,官方推荐的迁移方案是什么?

官方推荐迁移到 HTTP 输出或使用 Falcosidekick 等转发器,而不是继续寻找 gRPC 开关。

Falco 输出背压和驱动丢事件有什么区别?

输出背压发生在引擎命中之后,是输出队列或通道失败导致的,例如 outputs_queue 满或 http 错误;驱动丢事件发生在内核到用户态的捕获阶段,是消费跟不上导致的,表现为 drop 指标上升。区分方法:如果 stdout 有输出而下游无,问题在输出轴;如果所有 sink 都无输出且 drop 在涨,问题在捕获轴。

Falco 的 outputs_queue 有界和无界分别有什么风险?

无界队列的风险是内存耗尽导致进程被 OOM kill;有界队列的风险是队列满时静默丢弃告警。

Falco 的 buffered_outputs 参数有什么作用?

buffered_outputs 作用于支持缓冲的通道(如 file_output、program_output、stdout_output)。关闭时每条告警刷缓冲,CPU 更高;开启时 tail 日志可能看到长时间延迟。官方提示可用 --unbuffered 或 -U 参数。

Falco 0.44.1 中 program_output 的 keep_alive 参数有什么作用?

keep_alive 决定是每条告警 fork 一次还是使用长管道写入。长管道场景下缓冲与信号处理更敏感,官方文档对 SIGTERM 与缓冲关闭有专门提醒。

Falco 0.44.1 中 file_output 是否支持日志轮转?

file_output 不内置轮转,但可以通过 SIGUSR1 信号关闭再打开文件,实现外部轮转。

🏷️

标签

➡️

继续阅读