首页
/ CrowdSec数据库自动清理机制导致活跃Agent被误删问题分析

CrowdSec数据库自动清理机制导致活跃Agent被误删问题分析

2025-05-23 04:41:23作者:宣海椒Queenly

问题背景

在使用CrowdSec安全防护系统时,管理员发现当配置了PostgreSQL数据库的自动清理功能后,系统中所有正在运行的Agent节点都出现了异常。这些Agent节点进入崩溃循环状态,并报告"无法找到机器"的错误。经过排查发现,数据库中的所有机器记录都被意外删除了,包括那些活跃的Agent节点。

问题现象

在Kubernetes环境中部署的CrowdSec系统,通过Helm Chart管理,使用PostgreSQL作为后端数据库。Agent节点通过自动注册令牌与中央API服务(LAPI)进行注册。当管理员启用数据库自动清理配置后:

db_config:
  flush:
    agents_autodelete:
      login_password: 30m

配置的本意是希望系统自动清理超过30分钟没有心跳的非活跃Agent节点。然而实际运行中,所有Agent节点(包括活跃节点)都被错误地从数据库中删除,导致系统无法正常运行。

技术分析

预期行为

按照设计预期,自动清理机制应该:

  1. 定期检查数据库中记录的Agent节点
  2. 只删除那些最后一次心跳时间早于当前时间减去配置阈值(本例中为30分钟)的节点
  3. 保持活跃节点的记录不变

实际行为

通过分析PostgreSQL数据库日志,发现系统会定期执行一个更新操作,该操作会将Agent节点的last_heartbeat字段更新为该节点首次出现的时间戳(从指标数据中获取)。如果在执行清理操作时,恰好遇到Agent节点的心跳更新周期之间,系统会误判这些活跃节点为不活跃状态并将其删除。

根本原因

问题出在MachineUpdateBaseMetrics函数的实现逻辑上。该函数在更新Agent节点的基础指标时,错误地覆盖了last_heartbeat字段的值,将其设置为节点的首次出现时间而非当前时间。这种实现导致了:

  1. 活跃节点的最新心跳时间被错误地回滚到较早的时间
  2. 自动清理机制无法正确识别活跃节点
  3. 最终导致所有节点都被误判为不活跃而被删除

解决方案

该问题已在CrowdSec 1.6.5版本中修复。修复方案主要包括:

  1. 修改MachineUpdateBaseMetrics函数的逻辑,不再更新last_heartbeat字段
  2. 确保自动清理机制只基于真实的心跳时间进行判断

对于正在使用1.6.4版本的用户,可以采取以下临时解决方案:

  1. 暂时禁用自动清理功能
  2. 使用cscli machines prune命令手动清理不活跃节点
  3. 或者切换到开发版本镜像(:dev标签)获取修复

最佳实践建议

  1. 在生产环境启用自动清理功能前,建议先在测试环境验证
  2. 对于关键系统,考虑使用手动清理方式替代自动清理
  3. 定期检查Agent节点的状态和数据库记录
  4. 保持系统更新到最新稳定版本

总结

数据库自动清理功能是维护系统健康的重要机制,但实现不当可能导致严重后果。CrowdSec团队迅速响应并修复了这一问题,体现了开源社区的高效协作。用户应当理解系统各功能的实现原理,并在变更配置时保持谨慎,确保系统稳定运行。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K