
Wazuh Database Sync 模块配置指南内部选项详解与同步机制原理解析【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh导读本文聚焦 Wazuh 管理端Manager中负责代理Agent数据库同步的 Database Sync 模块完整讲解其全部内部选项wazuh_database.*、三种典型部署配置模板、实时/定时两种同步模式的取舍以及队列容量调优与故障排查方法。本文以 Database Sync 配置参考 为主体并结合仓库内wm_database模块源码wm_database.c与全局库表结构schema_global.sql展开底层原理读者阅读后即可独立完成该模块的配置、调优与问题诊断。1. 模块定位Manager 侧代理数据同步的胶水层Database Sync 模块是wazuh-db守护进程的一个组成部分Manager 专属组件负责在管理器与全局数据库global.db之间同步与代理相关的数据具体包括代理状态同步跟踪并更新代理的连接状态connection_status与同步状态sync_status代理组同步维护代理与组group的归属关系并在组共享配置变更后重新计算组哈希group hash实时更新支持实时inotify 事件驱动与定时interval 轮询两种同步模式事件队列管理通过内部队列缓冲文件系统变更事件实现批量处理。模块概况可参考 Database Sync 模块总览。需要强调的是该模块完全通过内部选项配置在ossec.conf/wazuh-manager.conf中不存在对应的 XML 或 YAML 配置节。2. 配置入口内部选项文件配置文件路径/var/wazuh-manager/etc/wazuh-manager-internal-options.confXML 节无YAML 节无内部选项前缀wazuh_database.*仓库自带的模板文件 wazuh-manager-internal-options.conf 头部注释说明了该文件的语义该文件允许对 Wazuh manager 内部选项进行运行时覆盖默认值已被编译进 manager 二进制文件仅在需要覆盖特定值时添加条目。格式为module.optionvalue且升级时不会覆盖此文件。也就是说所有 Database Sync 参数在源码中都有编译期默认值见下文源码解析该文件只需在需要调优时填写差异项。3. 内部选项完整参考以下四个选项均以wazuh_database.为前缀写入内部选项文件后需要重启wazuh-manager或wazuh-db相关服务生效。3.1wazuh_database.sync_agents启用或禁用代理数据库同步。wazuh_database.sync_agents1默认值1启用允许值0禁用、1启用启用后管理器会将代理的状态、组归属与连接状态同步到全局数据库。从源码看该选项同时是模块的总开关在 wm_database_read() 中如果sync_agents为 0模块直接返回NULL不加载、不运行只有启用时才会分配wm_database结构并注册到模块上下文。此外sync_agents还决定是否对client.keys所在目录和共享组目录SHAREDCFG_DIR注册 inotify 监视见 wm_inotify_setup()。3.2wazuh_database.real_time启用实时同步模式。wazuh_database.real_time1默认值1启用允许值0禁用、1启用启用时代理相关更新被立即同步禁用时更新被批量累积并按照wazuh_database.interval定义的间隔周期性地同步。源码视角的实时模式real_time1时wm_database_main()走 inotify 分支wm_database.c——建立内部事件队列用inotify_add_watch()监视client.keys所在目录IN_CLOSE_WRITE | IN_MOVED_TO与共享组目录额外含IN_MOVED_FROM | IN_CREATE | IN_DELETE一旦文件系统事件到达即触发wm_sync_agents()或wm_sync_file()。注意client.keys变更引起的整表同步只在worker 节点上执行master 上的代理增删由authd负责。3.3wazuh_database.interval同步间隔秒仅在实时模式关闭时生效。wazuh_database.interval60默认值60秒允许值正整数1–86400注意仅当wazuh_database.real_time0时适用源码视角的定时模式real_time0时wm_database_main()走轮询分支wm_database.c先等待一个interval然后循环执行wm_check_agents()通过stat()比对client.keys的 mtime/inode 判断是否变化变化时在 worker 上触发wm_sync_agents()与wdb_update_groups()同步共享组目录与数据库中的组记录。循环末尾会精确补偿休眠时间若上一轮执行超时则记录Time interval exceeded by %lld seconds警告。因此该选项直接决定定时模式下的数据库写入节奏。3.4wazuh_database.max_queued_events队列中允许累积的最大代理事件数达到该上限会强制触发一次同步即使间隔尚未到达。wazuh_database.max_queued_events10000默认值10000个事件允许值正整数100–1000000源码视角的队列机制在实时模式下该值用于初始化内部事件队列。wm_inotify_setup()中queue_init(data-max_queued_events 0 ?>wazuh_database.sync_agents1 wazuh_database.real_time1 wazuh_database.interval60 wazuh_database.max_queued_events100004.2 定时同步降低数据库压力适合大规模部署减少数据库写入频率wazuh_database.sync_agents1 wazuh_database.real_time0 wazuh_database.interval300 wazuh_database.max_queued_events50000该配置的效果关闭实时同步每 5 分钟同步一次允许更大的事件队列减少强制同步触发次数。4.3 高频更新低延迟适合对状态实时性要求极高的环境wazuh_database.sync_agents1 wazuh_database.real_time1 wazuh_database.interval30 wazuh_database.max_queued_events50004.4 禁用同步测试场景wazuh_database.sync_agents0 wazuh_database.real_time0 wazuh_database.interval60 wazuh_database.max_queued_events10000警告禁用同步可能导致代理状态与组信息过期失真stale只建议在测试或特定部署场景下使用。5. 底层同步流程从client.keys到全局库理解上述选项后可以从源码看清完整同步链路。核心函数wm_sync_agents()wm_database.c调用OS_ReadKeys()读取client.keys再交给sync_keys_with_wdb()wm_database.c执行双向校准插入新代理遍历密钥库若某代理 ID 存在于client.keys但不在全局库则通过wdb_insert_agent()写入 agent 表删除失效代理反向遍历全局库中的代理若某代理没有对应密钥则调用wdb_remove_agent()删除记录及其工件diff 文件、计数器、时间戳并通过 router 向inventory-sync发布{command: delete_agent, agent_id: ...}消息通知索引器侧清理数据见 send_agent_delete_to_inventory_sync()。组同步侧wdb_update_groups()与wm_sync_shared_group()wm_database.c负责将共享组目录SHAREDCFG_DIR中的组与全局库对齐目录被删除则移除组记录目录存在但库中无记录则插入。全局库中与同步状态相关的字段定义在 schema_global.sql是理解同步状态语义的直接依据sync_statussynced | syncreq | syncreq_status | syncreq_keepalive默认syncedgroup_sync_statussynced | syncreq默认syncedconnection_statuspending | never_connected | active | disconnected默认never_connected。对应的同步操作封装在 wdb.h 中例如wdb_global_sync_agent_info_get/set按syncreq标记批量获取/回写代理同步状态、wdb_global_sync_agent_groups_get按同步条件获取代理组并可选置为 synced、wdb_global_update_agent_connection_status更新连接状态与同步状态以及wdb_global_recalculate_agent_groups_hash重算组哈希。集群同步场景正是通过读syncreq→ 推送 → 写回synced的标记位机制配合last_id游标分页见wdb_global_sync_agent_info_get的 last_agent_id 参数实现的。6. 性能考量6.1 实时模式 vs 定时模式模式优点缺点适用场景实时模式real_time1状态即时更新代理状态始终最新数据库写入频率高中小规模部署1000 代理定时模式real_time0数据库负载低写入批量聚合状态更新存在延迟大规模部署1000 代理从源码看批量写入在实时模式下主要由 inotify 事件队列与共享组目录扫描实现批量处理定时模式下则由interval控制写入节奏二者对应文档给出的代理规模建议是经验分界实际取舍应结合数据库所在磁盘 IOPS 与代理变更频率。6.2 队列容量规划max_queued_events同时影响内存占用与同步触发频率建议按代理规模设置小规模1000 代理5000–10000 个事件中规模1000–5000 代理10000–25000 个事件大规模5000 代理25000–100000 个事件需要注意的是max_queued_events在源码中同时作用于内核 inotify 队列上限写入/proc/sys/fs/inotify/max_queued_events与模块内部队列不足时回退 16384过小的值在突发大量文件变更时可能触发IN_Q_OVERFLOW模块记录Inotify event queue overflowed或内部队列满的错误。6.3 数据库影响代理同步涉及的数据库操作包括agent 表上的 INSERT/UPDATE代理组哈希重算wdb_global_recalculate_agent_groups_hash连接状态更新SQLite 事务提交。高频同步可能加剧数据库文件碎片化可结合 Wazuh DB 的wazuh_db.fragmentation_threshold相关设置监控与处理见 Wazuh DB 配置参考。7. 监控与验证7.1 查看同步状态通过wazuh-db的 socket 接口直接查询全局库中代理的同步状态连接状态、同步标记echo global sql SELECT id,name,connection_status,sync_status FROM agent | \ /var/wazuh-manager/bin/wazuh-db输出中的sync_status列即对应 schema 中synced/syncreq/...的取值可用于判断是否有代理处于待同步syncreq状态。7.2 查看队列统计在 manager 日志中检索队列相关告警grep queued_events /var/wazuh-manager/logs/wazuh-manager.log实时模式下还会出现Internal queue is full、Inotify event queue overflowed等关键日志它们直接对应队列容量不足。7.3 数据库活动监控持续跟踪 wazuh-db 的写入行为tail -f /var/wazuh-manager/logs/wazuh-manager.log | grep wazuh-db模块自身的运行信息同步耗时、周期完成时间由WM_DATABASE_LOGTAGwazuh-manager:database见 wm_database.h输出例如wm_sync_agents(): %.3f ms与Cycle completed: %.3lf ms可在调试级别日志中观察同步开销。8. 故障排查8.1 代理显示为已断开Disconnected可能原因数据库同步被禁用或同步失败。排查步骤确认wazuh_database.sync_agents1检查 wazuh-db 进程是否运行ps aux | grep wazuh-db查看日志中的数据库错误。8.2 数据库 CPU 占用过高可能原因代理数量多时同步过于频繁。解决步骤切换为定时模式wazuh_database.real_time0增大间隔wazuh_database.interval300增大队列wazuh_database.max_queued_events50000。8.3 代理组不更新可能原因同步队列已满或同步被禁用。解决步骤检查队列大小是否与代理数量匹配确认wazuh_database.sync_agents1检查日志中是否出现max_queued_events exceeded类警告对应内部队列满错误。9. 关联文档导航Database Sync 模块总览 —— 模块功能清单与定位Wazuh DB 配置参考 —— 数据库备份与调优wdb节、wazuh_db.*选项Agent 管理模块 —— 代理生命周期管理Manager 配置参考 —— 管理端全部配置选项索引。配套源码速查本文所有底层结论均可追溯至 wm_database.c模块主循环、inotify 事件处理、密钥库双向同步、wm_database.hwm_database结构体定义、schema_global.sql同步状态字段约束与 wdb.h同步查询/更新接口。建议在调整内部选项前先结合上述源码确认参数语义与默认值边界。【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考