For the complete documentation index, see llms.txt. This page is also available as Markdown.

如何开发原生Input插件

工作模式

同一输入类型的多个插件实例通常由**管理类(Runner)**在共享线程或任务模型下驱动;实例侧保存配置并参与注册/反注册。

接口定义(C++)

原生 Input 声明见 core/collection_pipeline/plugin/interface/Input.h(派生自 Plugin):

class Input : public Plugin {
public:
    virtual bool Init(const Json::Value& config, Json::Value& optionalGoPipeline) = 0;
    virtual bool Start() = 0;
    virtual bool Stop(bool isPipelineRemoving) = 0;
    virtual QueueType GetProcessQueueType() const = 0;
    // ...
};

与早期文档相比,请注意 Init 增加 optionalGoPipeline 参数,且必须实现 GetProcessQueueType

开发步骤

  1. core/plugin/input 下新增 InputXxx.h / InputXxx.cpp,派生 Input 实现具体插件。

  2. 在头文件中定义插件类:可配置字段一般为 public,其余成员 private

  3. Init 中解析配置;非法参数按影响程度选择跳过、默认值或拒绝加载。

  4. 在独立目录中实现管理类 / Runner(负责线程、调度与多实例注册),管理类应继承 core/runner/InputRunner.h 中的 InputRunner

InputRunner 的构造函数会向 CollectionPipelineManager 自动注册自身(见 InputRunner.cpp)。若自定义 Runner 不继承 InputRunner,需在合适时机调用 CollectionPipelineManager::GetInstance()->RegisterInputRunner(...)

管理类基本流程:

  • 遍历已注册的各实例配置并采集数据;

  • 将数据转为 PipelineEvent / PipelineEventGroup

  • 投递到处理队列,例如:

其中:

  • queueKey:处理队列键,可由采集配置上下文(如 CollectionPipelineContext::GetProcessQueueKey())取得。

  • inputIndex:该 Input 在当前采集配置 inputs 列表中的下标(从 0 开始),与 Input::SetInputIndex 一致。

  • group:待发送的 PipelineEventGroup

注册/注销应尽量独立于采集主循环,避免单实例变更阻塞全体线程。

  1. InputXxx.cpp 中实现 Start / StopStart 中启动或挂靠管理类并注册本实例;Stop 中从管理类注销。

  2. PluginRegistry 中注册插件:

  3. 其余与采集配置生命周期、队列、检查点交互的细节,请对标现有原生 Input(如 InputFileInputPrometheus)的阅读路径按需补齐。

Last updated