Wazuh Inventory Sync API 参考:模块接口、FlatBuffer 协议与索引状态数据的完整解析

发布时间:2026/9/14 6:18:42

Wazuh Inventory Sync API 参考:模块接口、FlatBuffer 协议与索引状态数据的完整解析 Wazuh Inventory Sync API 参考模块接口、FlatBuffer 协议与索引状态数据的完整解析【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuhInventory Sync 是 Wazuh Manager 侧的 Agent 状态同步服务负责接收 Agent 经 Router 主题inventory-states发送的 FlatBuffer 消息、将会话数据暂存到 RocksDB并最终把状态文档写入 Wazuh Indexer 的wazuh-states-*索引族。本文基于 api-reference.md 展开完整覆盖该模块的两类 API 表面模块 start/stop 接口与索引状态数据面、FlatBuffer 运行时协议、全部支持的状态索引、Indexer 查询方式以及索引文档的真实结构并结合仓库源码说明每个接口背后的实现细节帮助你在部署、调试或二次开发 Inventory Sync 时快速定位其行为边界。一、Inventory Sync 暴露的两类 API 表面按照 api-reference.md 的定义Inventory Sync 对外暴露两个 API 表面模块 start/stop 接口由 Wazuh 模块加载器Manager 进程中的模块框架调用用于启动和停止整个同步服务索引状态数据面Indexed state data surface通过 Wazuh Indexer 暴露即同步完成后落入wazuh-states-*索引族的文档可通过 OpenSearch 风格的搜索 API 查询。需要强调的是Inventory Sync 只运行在Manager 端。Agent 是同步消息的生产者Manager 拥有会话状态、RocksDB 持久化、Indexer 操作与响应分发的全部职责。协议围绕Start开会话、数据消息DataValue/DataBatch等、End关会话三个阶段组织支持全量、增量、完整性校验、元数据与分组对账等模式详见 architecture.md。二、模块接口C 入口点与 C 门面2.1 C 入口点共享库导出两个符号声明位于 inventory_sync.hEXPORTED void inventory_sync_start(full_log_fnc_t callbackLog, const cJSON* configuration); EXPORTED void inventory_sync_stop();inventory_sync_start接收一个日志回调callbackLog类型为full_log_fnc_t签名定义为(int, const char*, const char*, int, const char*, const char*, va_list)和一份 cJSON 配置inventory_sync_stop无参数负责停止模块。在 GNU 编译器GCC 4 及以上下EXPORTED宏展开为__attribute__((visibility(default)))保证这两个符号在动态库中可见见 inventory_sync.h#L15-L21。头文件还定义了inventory_sync_start_func/inventory_sync_stop_func两个函数指针类型供 C 侧包装器以“类型化指针”方式持有动态解析出的符号。Manager 侧的包装器 wm_inventory_sync.c 在模块启动时通过so_get_module_handle(inventory_sync)动态加载共享库再用so_get_function_sym分别解析出inventory_sync_start与inventory_sync_stopwm_inventory_sync.c#L57-L60并在模块start与stop生命周期钩子中调用它们。如果解析失败模块仅打印Unable to start/stop inventory_sync module警告并退出。2.2 C 门面FacadeC 入口最终转入 C 单例门面 InventorySync其公开接口为class InventorySync final : public SingletonInventorySync { public: void start(const std::functionvoid(...) logFunction, const nlohmann::json configuration) const; void stop() const; };从 inventorySync.cpp 的实现可以看到完整的 C → C 桥接链路inventory_sync_start将 cJSON 配置序列化为字符串再解析为nlohmann::json把原生日志回调callbackLog包装为std::function形式的日志函数调用InventorySync::instance().start(...)其内部再委托给InventorySyncFacade::instance().start(...)inventorySync.cpp#L22-L34。即真实的编排逻辑RocksDB 会话存储、Router 订阅、消息校验分发、索引执行等落在InventorySyncFacade中InventorySync单例只是对外稳定的 C 入口stop()同理委托给 Facade。2.3 模块启动时注入的配置从 wm_inventory_sync.c#L54-L106 可以确认模块框架在调用inventory_sync_start前会构造如下 JSON 配置配置键及其取值来源配置键来源默认值/取值范围indexer全局indexer_config为空时传空对象—clusterNameget_cluster_name()5.x 起集群默认启用—clusterNodeNameget_node_name()—maxSessions内部选项wazuh_modules.max_sessions默认 1000范围 1–100000queueSize内部选项wazuh_modules.inventory_sync_queue_size默认 1000范围 100–1000000dataValueQuota内部选项wazuh_modules.inventory_sync_data_value_quota默认 250000范围 1–1000000000indexerBulkSize内部选项wazuh_modules.inventory_sync_indexer_bulk_size_bytes默认 10 MB范围 4 KB–100 MBindexerFlushInterval内部选项wazuh_modules.inventory_sync_indexer_flush_interval秒默认 20范围 1–3600这些参数正是后续会话上限控制、输入队列长度、DataValue 配额以及批量索引大小/刷新节奏的调节旋钮可结合 configuration.md 一并参考。三、运行时协议面FlatBuffer 消息类型Inventory Sync 接受的 FlatBuffer 协议消息来自 flatbuffers.md对应线上模式文件 inventorySync.fbs包括消息方向作用StartAgent → Manager开会话携带模块名、模式、目标索引、Agent 身份与集群字段DataValueAgent → Manager主要的可索引负载单条 upsert/delete 文档DataBatchAgent → Manager一条消息内携带多个DataValueManager 内部拆包为独立会话记录DataContextAgent → Manager辅助上下文数据存 RocksDB_context后缀参与断点跟踪但不直接索引DataCleanAgent → Manager请求对指定 Agent 与索引执行deleteByQueryChecksumModuleAgent → ManagerModuleCheck模式下携带 Agent 侧校验和EndAgent → Manager关闭会话的上传侧Manager 确认收到End且所有序列消息齐备后才完成会话ReqRet双向重传请求携带缺失的序列区间Pair{begin, end}列表Manager 侧产生的响应包括StartAckStart成功后返回分配的 64 位会话 ID 与StatusEndAck返回会话的最终处理结果ReqRet当GapSet检测到缺失序列区间时Manager 主动请求 Agent 重传。所有消息都封装在Message根表中通过MessageType联合类型union区分具体负载table Message { content: MessageType; } union MessageType { DataValue, DataClean, ChecksumModule, Start, StartAck, End, EndAck, ReqRet, DataContext, DataBatch }关键的枚举定义也值得在排查问题时对照ModeModuleFull、ModuleDelta、ModuleCheck、MetadataDelta、MetadataCheck、GroupDelta、GroupCheckOperationUpsert/DeleteStatusOk、Error、Offline、ChecksumMismatch、ProcessingOptionSync、VDFirst、VDSync后两者用于在会话持久化后触发 Vulnerability Scanner 扫描。实用细节引自 flatbuffers.md 的 “Practical notes”对MetadataDelta、MetadataCheck、GroupDelta、GroupCheck和ModuleCheck会话Start.size可以为 0这类会话没有需要序列跟踪的数据消息DataContext属于活协议的一部分即使不会被回放进 Indexer生成或校验 Inventory Sync 流量的工具仍应支持它DataBatch同样属于活协议工具链必须支持。四、索引状态数据面wazuh-states-*索引族Inventory Sync 针对wazuh-states-*索引族工作。当前支持的库存inventory族包括4.1 Syscollector 索引13 个wazuh-states-inventory-systemwazuh-states-inventory-hardwarewazuh-states-inventory-hotfixeswazuh-states-inventory-packageswazuh-states-inventory-processeswazuh-states-inventory-portswazuh-states-inventory-interfaceswazuh-states-inventory-protocolswazuh-states-inventory-networkswazuh-states-inventory-userswazuh-states-inventory-groupswazuh-states-inventory-serviceswazuh-states-inventory-browser-extensions4.2 FIM 索引3 个wazuh-states-fim-fileswazuh-states-fim-registry-keyswazuh-states-fim-registry-values4.3 SCA 索引1 个wazuh-states-sca4.4 相关的下游索引wazuh-states-vulnerabilities需要特别注意wazuh-states-vulnerabilities不是Inventory Sync 直接写入的但它属于当前 Manager 侧流程的一部分因为 Inventory Sync 可以在同一个同步会话中当Start的option为VDFirst或VDSync时触发漏洞扫描最终文档由 Vulnerability Scanner 产出。五、查询同步后的状态数据状态数据通过 Wazuh Indexer 的搜索 API 查询。以下示例与 api-reference.md 保持一致5.1 搜索全部状态索引GET /wazuh-states-*/_search5.2 跨所有状态索引搜索某一个 AgentGET /wazuh-states-*/_search { query: { term: { wazuh.agent.id: 001 } } }5.3 搜索某一个 Agent 的 SCA 文档GET /wazuh-states-sca/_search { query: { term: { wazuh.agent.id: 001 } } }5.4 搜索某一个 Agent 的库存软件包组合过滤GET /wazuh-states-inventory-packages/_search { query: { bool: { filter: [ { term: { wazuh.agent.id: 001 } }, { exists: { field: package.name } } ] } } }从 architecture.md 的组件说明可以推断wazuh.agent.id这一字段正是 Manager 在 End 阶段富化文档时注入的元数据之一因此按 Agent 维度查询是排查单个 Agent 同步状态最常用的入口而exists过滤可用于排除字段缺失的半成品文档。六、索引文档的真实结构Document ShapeInventory Sync 在向 Indexer 发送文档前会先注入 Manager 侧元数据。实际 upsert 的文档至少包含以下字段wazuh.agent.idwazuh.agent.namewazuh.agent.versionwazuh.agent.groupswazuh.agent.host.architecturewazuh.agent.host.hostnamewazuh.agent.host.os.*wazuh.cluster.nameAgent 侧的领域负载随后附加在这些元数据之后。以一个软件包文档为例{ wazuh: { agent: { id: 001, name: ubuntu22, version: v5.0.0, groups: [default], host: { architecture: x86_64, hostname: ubuntu22, os: { name: Ubuntu, platform: ubuntu, type: linux, version: 22.04.5 LTS } } }, cluster: { name: cluster } }, package: { name: openssl, version: 3.0.2, type: deb }, checksum: { hash: { sha1: ... } }, state: { modified_at: 2026-04-20T10:00:00.000Z } }这一结构解释了两个设计事实其一wazuh.cluster.name来自模块启动时由 wm_inventory_sync.c 注入的clusterName配置随会话上下文传播其二state.modified_at与checksum字段为ModuleCheck校验和和状态对账提供了比对基础。七、小结与延伸阅读接口层inventory_sync_start/inventory_sync_stop两个 C 符号由 wm_inventory_sync.c 动态加载经 InventorySync 单例 委托给InventorySyncFacade完成真正的编排协议层以Message根表 MessageTypeunion 为核心的 FlatBuffer 会话协议支持批量、断点重传、校验和对DataContext旁路存储数据层13 个 Syscollector 索引 3 个 FIM 索引 SCA 索引 下游wazuh-states-vulnerabilities文档统一携带wazuh.agent.*与wazuh.cluster.name元数据可通过 Indexer 搜索 API 按 Agent 维度查询。如需继续深入可参考同一文档目录下的 架构说明、FlatBuffer 模式细节、配置参考 与 测试工具以及线上协议模式源文件 inventorySync.fbs。【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/9/14 6:18:42

基于uniapp+Vue的微信小程序校友房屋合租平台开发实践

我前后做了快两个月的“微信小程序uniappvue的校友房屋合租平台”,从需求梳理到上线踩坑,一路走过来有不少东西想说。这个项目不是我临时拍脑袋想的,而是学校周边真实存在的一个痛点:校友之间换房、找合租、转租的需求一直都有&am…

2026/9/14 6:18:42

WeChatMsg:4步本地导出微信聊天记录并生成年度报告的完整指南

WeChatMsg:4步本地导出微信聊天记录并生成年度报告的完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/w…

2026/9/14 6:18:42

霞鹜文楷:免费商用开源中文字体三步装好,怎么选怎么用

霞鹜文楷:免费商用开源中文字体三步装好,怎么选怎么用 【免费下载链接】LxgwWenKai An open-source Chinese font derived from Fontworks Klee One. 一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 项目地址: https://gitcod…

2026/9/14 7:08:44

AI编程工具选型指南:TRAE、Cursor、Windsurf与通义灵码深度对比

1. 这不是“Copilot替代品”清单,而是一份开发者真实选型决策手记最近三个月,我帮团队重构了三套中大型后端服务,从Java Spring Boot到Python FastAPI再到TypeScript NestJS,全程没开过GitHub Copilot的订阅。不是因为我不认可它的…

2026/9/14 7:08:43

C#异步编程:async/await状态机机制与优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 7:08:43

国产麒麟系统等保整改实战:身份鉴别与安全审计配置指南

先问一句:你是不是也接到过这种活儿——单位里一台装了国产麒麟系统的服务器,领导说“要做等保”,然后把配置任务丢给你,留下一句“下周测评机构来”。等保到底查什么、麒麟系统该改哪些配置、哪些坑必须避开,很多人第…

2026/9/14 7:08:43

Cursor接入统一API网关:从多Key混乱到模型路由实践

我最初是在一个团队内部被问到“你们到底给 Cursor 配了多少个 API Key”这种问题,才开始正视 AI 编程工具已经严重碎片化的现实。桌面端有 Cursor、Continue 和一堆 VS Code 插件,终端里有各种 Agent CLI,每个工具都要求填一个模型服务的 Ke…

2026/9/14 7:03:43

2026年7款AI写小说工具架构与性能全面评测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码