拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Wazuh DB(wazuh-db)配置完全指南:自动备份、内部选项与性能调优

Wazuh DBwazuh-db配置完全指南自动备份、内部选项与性能调优【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh本篇技术指南以 Wazuh 仓库中 Wazuh DB 模块的配置参考文档为主体系统讲解 wazuh-db 守护进程的两类配置入口wazuh-manager.conf中控制 global.db 自动备份与保留策略的wdbXML 配置块以及wazuh-manager-internal-options.conf中控制线程池、事务提交、文件句柄与数据库碎片化治理的wazuh_db.*内部选项。读完本文你将能够完整继承并落地文档中的所有配置示例理解每个参数的默认值、取值范围及其在源码中的实际解析与生效位置并掌握手动备份、恢复、完整性校验与常见故障的排查方法。Wazuh DB 是什么配置的对象与背景Wazuh DBwazuh-db是 Wazuh Manager 的中央数据库服务负责存储 Agent 注册信息、漏洞数据、文件完整性监控FIM状态以及其他模块的运行状态并提供统一的查询接口与自动备份能力。它与模块概览、架构及数据库表结构的对应关系可参考 Wazuh DB 模块文档。从该模块文档可以确认其运行架构守护进程内部由四类线程协作——Dealer 线程接收 Unix socket 连接并将对端加入队列Worker 线程池默认 8 个负责出队、执行查询并回发响应Garbage collector 线程关闭过期数据库句柄Backup 线程周期性创建global.db备份。这正是本文两个配置入口分别控制的部分XML 配置块控制 Backup 线程内部选项控制 Worker 线程池、事务提交与碎片化治理行为。数据库文件的物理位置文档明确给出全局数据库/var/wazuh-manager/queue/db/global.dbAgent 数据库/var/wazuh-manager/queue/db/agents/agent-id.db备份目录/var/wazuh-manager/backup/db/入口一wazuh-manager.conf 中的wdb备份配置配置文件/var/wazuh-manager/etc/wazuh-manager.confXML 节点wdb作用控制数据库自动备份与保留策略。backup 块结构与子选项backup是wdb下的备份配置块必须通过database属性指定目标数据库当前仅支持global其下包含三个子选项enabled、interval、max_files。子选项说明默认值取值范围enabled是否启用所选数据库的自动备份yesyes/nointerval备份创建间隔1d86400 秒正时间值可带s秒、m分、h时、d天后缀max_files保留的备份文件数量上限超出后自动删除最旧备份3正整数文档建议 1–999这些默认值可以在配置解析源码中得到逐一印证。在 wazuh_db-config.c 的wdb_init_conf()中初始化时即写入默认值void wdb_init_conf() { os_calloc(WDB_LAST_BACKUP, sizeof(wdb_backup_settings_node*), wconfig.wdb_backup_settings); for (int i 0; i WDB_LAST_BACKUP; i) { os_calloc(1, sizeof(wdb_backup_settings_node), wconfig.wdb_backup_settings[i]); wconfig.wdb_backup_settings[i]-enabled true; // 默认 yes wconfig.wdb_backup_settings[i]-interval 86400; // 默认 1 天 wconfig.wdb_backup_settings[i]-max_files 3; // 默认 3 份 } }同文件的Read_WazuhDB()还展示了严格的 XML 校验逻辑wdb的直接子节点必须是backupdatabase属性必须且只能取global否则会报XML_INVELEM/XML_INVATTR/XML_VALUEERR错误enabled的值由eval_bool()解析仅接受yes或nointerval由w_parse_time()解析为秒数必须为正max_files必须是纯数字且大于 0。任何一个子节点取值非法整个配置块都会被拒绝——这意味着部署前务必用wazuh-control check-config之类的配置校验手段或观察 Manager 日志确认 XML 无误。配置示例完整继承原文档四种典型场景默认配置标准备份策略wdb backup databaseglobal enabledyes/enabled interval1d/interval max_files3/max_files /backup /wdb备份文件写入/var/wazuh-manager/backup/db/。高频备份关键业务环境wdb backup databaseglobal enabledyes/enabled interval6h/interval max_files8/max_files /backup /wdb延长保留期保留更多备份历史wdb backup databaseglobal enabledyes/enabled interval1d/interval max_files30/max_files /backup /wdb禁用备份测试或存储受限环境wdb backup databaseglobal enabledno/enabled /backup /wdb注意禁用后不会再生成自动备份但手动备份下一节始终可用。自动备份的底层实现VACUUM INTO 加 Gzip 压缩文档在“性能考量”一节指出备份使用 SQLite 的备份 API 创建快照对性能影响极小仅在快照创建瞬间对数据库产生短暂锁。从源码看实际实现位于 wdb_global.c 的wdb_global_create_backup()中其流程比“调用备份 API”更具体以当前时间戳生成备份文件名global-timestamp格式写入WDB_BACKUP_FOLDER指定的备份目录先提交未决事务wdb_commit2并清空全部预编译语句缓存wdb_finalize_all_statements为执行VACUUM INTO做准备执行SQLITE的VACUUM INTO语句生成一个压缩整理后的完整数据库副本将该副本用 gzip 压缩为global-timestamp.db.gz并删除未压缩的中间文件调用wdb_global_remove_old_backups()按max_files清理超出保留上限的旧备份。也就是说最终落盘的备份是gzip 压缩过的 SQLite 全量副本这也解释了为什么文档估算的磁盘占用小部署约 50–200 MB、中型部署 200 MB–2 GB、大型部署 2 GB 以上是“数据库大小 × max_files”量级——每个备份都是全量拷贝。备份线程的调度逻辑位于 main.c 的run_backup()它读取最近一次备份时间wdb_global_get_most_recent_backup之后每隔interval秒判断是否到达备份时刻到达则调用wdb_global_create_backup()。该线程仅在配置enabledyes时才会被创建与 XML 中enabledno/enabled的行为完全对应。入口二wazuh-manager-internal-options.conf 中的 wazuh_db.* 内部选项配置文件/var/wazuh-manager/etc/wazuh-manager-internal-options.conf文档明确提示应使用wazuh-manager-internal-options.conf而非直接修改默认的internal_options.conf以便在升级时保留自定义设置。这一点与仓库中 wazuh-manager-internal-options.conf 的注释一致该文件用于运行时覆盖 Manager 内部选项默认值编译在二进制中仅在需要覆盖时添加条目格式为module.optionvalue且升级过程不会覆盖此文件。完整选项清单如下注释中的取值范围与默认值均已与 main.c 中getDefine_Int_default()的调用逐一核对# Wazuh DB debug level (0-2) wazuh_db.debug0 # Worker thread pool size (1-32, default: 8) wazuh_db.worker_pool_size8 # Minimum commit interval for transactions (seconds, 1-3600, default: 10) wazuh_db.commit_time_min10 # Maximum commit interval for transactions (seconds, 1-3600, default: 60) wazuh_db.commit_time_max60 # Maximum number of open database connections (1-4096, default: 64) wazuh_db.open_db_limit64 # Maximum file descriptors (1024-1048576, default: 458752) wazuh_db.rlimit_nofile458752 # Database fragmentation threshold percentage (0-100, default: 75) wazuh_db.fragmentation_threshold75 # Fragmentation delta for triggering vacuum (0-100, default: 5) wazuh_db.fragmentation_delta5 # Free pages percentage to maintain (0-99, default: 0) wazuh_db.free_pages_percentage0 # Maximum allowed fragmentation percentage (0-100, default: 90) wazuh_db.max_fragmentation90 # Interval to check database fragmentation in seconds (1-30758400, default: 7200 2 hours) wazuh_db.check_fragmentation_interval7200各选项在源码中的读取位置main.c 启动阶段wconfig.worker_pool_size getDefine_Int_default(wazuh_db, worker_pool_size, 1, 32, 8); wconfig.commit_time_min getDefine_Int_default(wazuh_db, commit_time_min, 1, 3600, 10); wconfig.commit_time_max getDefine_Int_default(wazuh_db, commit_time_max, 1, 3600, 60); wconfig.open_db_limit getDefine_Int_default(wazuh_db, open_db_limit, 1, 4096, 64); nofile getDefine_Int_default(wazuh_db, rlimit_nofile, 1024, 1048576, 458752); wconfig.fragmentation_threshold getDefine_Int_default(wazuh_db, fragmentation_threshold, 0, 100, 75); wconfig.fragmentation_delta getDefine_Int_default(wazuh_db, fragmentation_delta, 0, 100, 5); wconfig.free_pages_percentage getDefine_Int_default(wazuh_db, free_pages_percentage, 0, 99, 0); wconfig.max_fragmentation getDefine_Int_default(wazuh_db, max_fragmentation, 0, 100, 90); wconfig.check_fragmentation_interval getDefine_Int_default(wazuh_db, check_fragmentation_interval, 1, 30758400, 7200);逐项解读wazuh_db.debug0–2默认 0调试日志级别。源码中通过循环调用nowDebug()逐级提升调试输出排查 wazuh-db 行为问题时可临时调高。wazuh_db.worker_pool_size1–32默认 8Worker 线程池大小直接决定同时处理 socket 查询的线程数。文档的故障排查建议指出当 wazuh-db CPU 占用偏高时可增大该值。wazuh_db.commit_time_min/wazuh_db.commit_time_max1–3600 秒默认 10 / 60控制 SQLite 事务的批量提交时机。从 wdb.c 的提交条件可以确认其精确语义当距离上一次查询已超过commit_time_min秒或者距离事务开始已超过commit_time_max秒时触发提交。这是一种“高频写入不拖延、长事务有上限”的折中策略既通过批量提交降低 commit 开销又保证任何事务最长运行不超过commit_time_max。文档建议出现数据库锁错误时检查长查询并增大 commit 时间参数。wazuh_db.open_db_limit1–4096默认 64同时打开的数据库连接数上限。wdb.c中的池回收逻辑会在连接数超过该值时关闭多余句柄与 Garbage collector 线程配合防止 Agent 数量增长导致句柄泄漏。wazuh_db.rlimit_nofile1024–1048576默认 458752进程可打开的最大文件描述符数。默认值很高是为了容纳大规模部署下众多 SQLite 连接与日志文件的并发打开。碎片化治理四参数fragmentation_threshold/fragmentation_delta/free_pages_percentage/max_fragmentation加检查间隔check_fragmentation_interval1–30758400 秒默认 7200即 2 小时这组参数控制 wazuh-db 的自动 VACUUM 决策。从 wdb.c 的碎片化检查逻辑看只有同时满足“空闲页比例不低于free_pages_percentage”且命中下列任一条件时才会触发 VACUUM碎片率超过max_fragmentation强制线默认 90%碎片率超过fragmentation_threshold默认 75%且此前从未执行过 VACUUM碎片率超过fragmentation_threshold且比上次 VACUUM 时的碎片率还高出fragmentation_delta默认 5 个百分点。换言之这组参数让 wazuh-db 在“数据库文件无限膨胀”和“频繁 VACUUM 消耗 IO”之间取得平衡正常情况下只在碎片较上次明显恶化时才整理碎片率达到 90% 则无条件整理。通过 socket 查询当前生效配置这些内部选项并非不可观测。wdb.c中处理getconfig命令时会将commit_time_max、commit_time_min、open_db_limit、worker_pool_size及各碎片化参数打包进wazuh_db节点返回给调用方因此可以通过 wazuh-db socket 查询当前实际生效的内部选项值作为验证配置是否被正确加载的手段。手动备份与恢复手动备份创建 global 数据库的手动备份确保一致性的做法是先停服务# 停止 wazuh-manager 以确保一致性 systemctl stop wazuh-manager # 如不存在则创建备份目录 mkdir -p /var/wazuh-manager/backup/db/manual # 复制 global 数据库 cp /var/wazuh-manager/queue/db/global.db \ /var/wazuh-manager/backup/db/manual/global-$(date %Y%m%d-%H%M%S).db # 重新启动 wazuh-manager systemctl start wazuh-manager从备份恢复# 停止 wazuh-manager systemctl stop wazuh-manager # 恢复备份将 TIMESTAMP 替换为实际备份文件名 cp /var/wazuh-manager/backup/db/global-TIMESTAMP.db \ /var/wazuh-manager/queue/db/global.db # 恢复属主与权限 chown wazuh:wazuh /var/wazuh-manager/queue/db/global.db chmod 660 /var/wazuh-manager/queue/db/global.db # 启动 wazuh-manager systemctl start wazuh-manager查看备份文件ls -lh /var/wazuh-manager/backup/db/注意自动备份由 wazuh-db 生成时为.db.gz压缩格式且带时间戳手动备份为普通.db副本恢复前请先用gunzip解开压缩备份并确认文件属主与权限。性能考量与大型部署调优备份影响快照式备份源码确认为VACUUM INTO gzip期间对数据库产生短暂锁整体性能影响极小存储需求每个备份都是全量副本可用以下命令监控磁盘占用du -sh /var/wazuh-manager/backup/db/ du -sh /var/wazuh-manager/queue/db/文档给出的典型体积参考100 个 Agent 约 50–200 MB100–1000 个 Agent 约 200 MB–2 GB1000 个 Agent 通常 2 GB 以上。大型部署调优建议降低备份频率、减少保留份数以控制磁盘增量wdb backup databaseglobal enabledyes/enabled interval12h/interval !-- 更低频 -- max_files5/max_files !-- 保留更少备份 -- /backup /wdb故障排查手册检查 wazuh-db 状态# 确认 wazuh-db 是否运行 systemctl status wazuh-manager | grep wazuh-db # 检查 wazuh-db socket ls -l /var/wazuh-manager/queue/db/wdb # 测试数据库连接 echo agent 000 sql SELECT name FROM sqlite_master | \ /var/wazuh-manager/bin/wazuh-db查看 wazuh-db 日志tail -f /var/wazuh-manager/logs/wazuh-manager.log | grep wazuh-db数据库完整性校验sqlite3 /var/wazuh-manager/queue/db/global.db PRAGMA integrity_check;预期输出ok。常见问题速查问题排查与解决备份文件未生成检查磁盘空间确认enabledyes/enabled查看日志中的报错wazuh-db CPU 占用偏高降低其他模块的查询频率在内部选项中增大wazuh_db.worker_pool_size数据库锁错误排查长查询适当增大内部选项中的wazuh_db.commit_time_min/wazuh_db.commit_time_max延伸阅读Wazuh DB 模块文档 —— 模块概览、线程架构、socket 协议与数据库表结构Manager 配置参考 —— Manager 全部配置项Vulnerability Scanner 配置 —— 使用 wazuh-db 存储漏洞数据的模块Task Manager 配置 —— 使用 wazuh-db 存储任务状态的模块【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门