# 开源插件开发引导

## 了解 LoongCollector 插件

LoongCollector 插件的实现原理、整体架构、系统设计等介绍，请参考[插件系统](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/principle/plugin-system)。

## 原生插件开发流程（C++语言）

LoongCollector 原生插件的开发主要有以下步骤：

1. 创建Issue，描述开发插件功能，会有社区同学参与讨论插件开发的可行性，如果社区review 通过，请参考步骤2继续进行。
2. 开发对应插件，可以参考以下文档：
   * [如何开发原生Input插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/yuan-sheng-cha-jian-kai-fa/how-to-write-native-input-plugins)
   * [如何开发原生Flusher插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/yuan-sheng-cha-jian-kai-fa/how-to-write-native-flusher-plugins)
   * [插件配置项基本原则](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/principles-of-plugin-configuration)
3. 进行单元测试或 E2E 测试，请参考 [单元测试](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/ce-shi/unit-test) 与 [E2E测试](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/ce-shi/e2e-test)。
4. 提交Pull Request。

## 扩展插件开发流程（go语言）

LoongCollector 插件的开发主要有以下步骤：

1. 创建Issue，描述开发插件功能，会有社区同学参与讨论插件开发的可行性，如果社区review 通过，请参考步骤2继续进行。
2. 实现相应接口。
3. 通过init函数注册插件。
4. 将插件加入[插件引用配置文件](https://github.com/alibaba/loongcollector/blob/main/plugins.yml)的 `common` 配置节；若仅运行于指定系统，请添加到 `linux` 或 `windows`。构建时会根据该文件生成 `plugins/all/all.go`（含 `all_linux.go` / `all_windows.go`），**请勿手改生成文件**；改完后执行 `make all`（或你常用的构建目标）以重新生成并完成链接。
5. 进行单元测试或 E2E 测试，请参考 [单元测试](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/ce-shi/unit-test) 与 [E2E测试](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/ce-shi/e2e-test)。
6. 使用 *make lint* 检查代码规范。
7. 提交Pull Request。

在开发时，[Logger 接口](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/cha-jian-tiao-shi/logger-api)和[自监控指标接口](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/cha-jian-tiao-shi/plugin-self-monitor-guide)或许能对您有所帮助。此外，可以使用[纯插件模式启动](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/cha-jian-tiao-shi/pure-plugin-start) LoongCollector，用于对插件进行轻量级测试。

Go 侧插件注册表与 `Add*Creator` 定义见仓库 [`pkg/pipeline/plugin.go`](https://github.com/alibaba/loongcollector/blob/main/pkg/pipeline/plugin.go)；各插件类型的 **V1 / V2** 扩展接口见同目录下的 `input.go`、`processor.go`、`aggregator.go`、`flusher.go`（旧文档仅描述 V1 时，请以源码为准）。

更详细的开发细节，请参考：

* [如何开发扩展Input插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-input-plugins)
* [如何开发扩展Processor插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-processor-plugins)
* [如何开发扩展Aggregator插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-aggregator-plugins)
* [如何开发扩展Flusher插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-flusher-plugins)
* [如何开发扩展Extension插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-extension-plugins)
* [插件配置项基本原则](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/principles-of-plugin-configuration)
* [如何开发外部私有插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-write-external-plugins)
* [如何自定义构建产物中默认包含的插件](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/kuo-zhan-cha-jian-kai-fa/how-to-custom-builtin-plugins)

## 文档撰写流程

开发完成后，可以参考[如何生成插件文档](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/cha-jian-wen-dang-kai-fa/how-to-generate-plugin-docs)生成插件的使用文档，也可以手动编写插件文档。

文档的编写主要有如下步骤：

1. 遵循[插件文档规范](https://ilogtail.gitbook.io/ilogtail-docs/pre-release/developer-guide/cha-jian-kai-fa/cha-jian-wen-dang-kai-fa/plugin-doc-templete)，编写插件文档。
2. 在[插件概览](https://github.com/alibaba/loongcollector/blob/main/docs/cn/plugins/overview.md)中添加插件的信息。所有的插件按英文名字典序升序排列，添加的时候请注意插入的位置。
3. 在[文档目录](https://github.com/alibaba/loongcollector/blob/main/docs/cn/SUMMARY.md)中添加插件文档的路径，注意与插件概览中保持顺序一致。
