📙
iLogtail用户手册
1.8.4
1.8.4
  • 关于
    • 什么是iLogtail
    • 发展历史
    • 产品优势
    • 开源协议
    • 社区版和企业版的对比说明
  • 安装
    • 快速开始
    • Docker使用
    • Kubernetes使用
    • 守护进程
    • 发布记录
    • 支持的操作系统
    • 源代码
      • 下载
      • 编译
      • Docker镜像
      • 编译依赖
    • 镜像站
  • 概念
    • 关键概念
    • 数据流水线
  • 配置
    • 采集配置
    • 系统参数
    • 日志
  • 数据流水线
    • 概览
    • 插件版本管理
    • 输入
      • 文本日志
      • 脚本执行数据
      • 容器标准输出
      • 文本日志(debug)
      • MetricInput示例插件
      • 主机Meta数据
      • Mock数据-Metric
      • eBPF网络调用数据
      • 主机监控数据
      • MySQL Binlog
      • GO Profile
      • GPU数据
      • HTTP数据
      • ServiceInput示例插件
      • Journal数据
      • Kafka
      • Mock数据-Service
      • SqlServer 查询数据
      • OTLP数据
      • PostgreSQL 查询数据
      • Syslog数据
    • 处理
      • 添加字段
      • 添加云资产信息
      • 原始数据
      • 数据脱敏
      • 丢弃字段
      • 字段加密
      • 条件字段处理
      • 日志过滤
      • Go时间格式解析
      • Grok
      • Json
      • 日志转SLS Metric
      • 正则
      • 重命名字段
      • 分隔符
      • 键值对
      • 多行切分
      • 字符串替换
    • 聚合
      • 基础
      • 上下文
      • 按Key分组
      • 按GroupMetadata分组
    • 输出
      • Kafka(Deprecated)
      • kafkaV2
      • ClickHouse
      • ElasticSearch
      • SLS
      • 标准输出/文件
      • OTLP日志
      • Pulsar
      • HTTP
      • Loki
    • 加速
      • 分隔符加速
      • Json加速
      • 正则加速
  • 工作原理
    • 文件发现
    • 插件系统
  • 可观测性
    • 日志
  • 开发者指南
    • 开发环境
    • 日志协议
      • 协议转换
      • 增加新的日志协议
      • 协议
        • sls协议
        • 单条协议
    • 代码风格
    • 数据模型
    • 插件开发
      • 开源插件开发引导
      • Checkpoint接口
      • Logger接口
      • 如何开发Input插件
      • 如何开发Processor插件
      • 如何开发Aggregator插件
      • 如何开发Flusher插件
      • 如何生成插件文档
      • 插件文档规范
      • 纯插件模式启动
    • 测试
      • 单元测试
      • E2E测试
    • 代码检查
      • 检查代码规范
      • 检查文件许可证
      • 检查依赖包许可证
  • 贡献指南
    • 贡献指南
    • 开发者
    • 成就
  • 性能测试
    • 容器场景iLogtail与Filebeat性能对比测试
  • 管控工具
    • 使用介绍
    • 通信协议
    • 开发指南
  • Awesome iLogtail
    • 走近iLogtail社区版
    • iLogtail社区版使用入门
    • iLogtail社区版开发者指南
    • iLogtail社区版使用案例
Powered by GitBook
On this page
  • MetricInput 接口定义
  • MetricInput 开发
  • ServiceInput 接口定义
  • ServiceInput 开发
  1. 开发者指南
  2. 插件开发

如何开发Input插件

了解如何开发Input插件前你需要先了解Input 插件接口,目前的Input 插件分为2类,分别为MetricInput 与ServiceInput,分别为MetricInput可以由全局控制采集频率,适合Metric指标拉取等情况,ServiceInput 更适合接收外部输入情况,比如接收SkyWalking的Trace 数据推送。

MetricInput 接口定义

  • Init:插件初始化接口,主要供插件做一些参数检查,并为其提供上下文对象 Context。 返回值的第一个参数表示调用周期(毫秒),插件系统会以该值作为数据获取周期。如果返回 0 的话,插件系统会使用全局的数据获取周期。 返回值的第二个参数表示初始化中发生的错误,一旦发生错误该插件实例将被忽略,插件系统不会向获取数据。

  • Description:插件自描述接口。

  • Collect: MetricInput 最关键的接口,插件系统通过此接口从插件实例中获取数据。插件系统会周期性地调用此接口,将数据收集到传入 Collector 中。

// MetricInput ...
type MetricInput interface {
    // Init called for init some system resources, like socket, mutex...
    // return call interval(ms) and error flag, if interval is 0, use default interval
    Init(Context) (int, error)

    // Description returns a one-sentence description on the Input
    Description() string

    // Collect takes in an accumulator and adds the metrics that the Input
    // gathers. This is called every "interval"
    Collect(Collector) error
}

MetricInput 开发

MetricInput 的开发分为以下步骤:

  1. 创建Issue,描述开发插件功能,会有社区同学参与讨论插件开发的可行性,如果社区review 通过,请参考步骤2继续进行。

  2. 使用 make lint 检查代码规范。

  3. 提交Pull Request。

ServiceInput 接口定义

  • Init/Description:同 MetricInput 接口,但是 Init 的一个返回值对于 ServiceInput 没有意义,因为它不会被周期性调用。

  • Start:由于 ServiceInput 的定位是常驻型输入,所以插件系统为此类型的插件实例都创建了独立的 goroutine,在 goroutine 中调用此接口来开始数据收集。Collector 的作用依旧是充当插件实例和插件系统之间的数据管道。

  • Stop:提供终止插件的能力。插件必须正确地实现此接口,以避免 hang 住插件系统导致 Logtail 也无法正确退出。


// ServiceInput ...
type ServiceInput interface {
    // Init called for init some system resources, like socket, mutex...
    // return interval(ms) and error flag, if interval is 0, use default interval
    Init(Context) (int, error)

    // Description returns a one-sentence description on the Input
    Description() string

    // Start starts the ServiceInput's service, whatever that may be
    Start(Collector) error

    // Stop stops the services and closes any necessary channels and connections
    Stop() error
}

ServiceInput 开发

ServiceInput 的开发分为以下步骤:

  1. 创建Issue,描述开发插件功能,会有社区同学参与讨论插件开发的可行性,如果社区review 通过,请参考步骤2继续进行。

  2. 使用 make lint 检查代码规范。

  3. 提交Pull Request。

PreviousLogger接口Next如何开发Processor插件

Last updated 1 year ago

实现MetricInput 接口,这里我们使用样例模式进行介绍,详细样例请查看,你可以使用 试验此插件功能。

通过init将插件注册到,MetricInputs插件的注册名(即json配置中的plugin_type)必须以"metric_"开头,详细样例请查看。

将插件加入, 如果仅运行于指定系统,请添加到 或 .

进行单测或者E2E测试,请参考 与 .

实现 ServiceInput 接口,这里我们使用样例模式进行介绍,详细样例请查看, 你可以使用 试验此插件功能。

通过init将插件注册到,ServiceInputs插件的注册名(即json配置中的plugin_type)必须以"service_"开头,详细样例请查看。

将插件加入的common配置节, 如果仅运行于指定系统,请添加到linux或windows配置节.

进行单测或者E2E测试,请参考 与 .

input/example/metric
example.json
MetricInputs
input/example/metric
全局插件定义中心
Linux插件定义中心
Windows插件定义中心
如何使用单测
如何使用E2E测试
input/example/service
example.json
ServiceInputs
input/example/service
插件引用配置文件
如何使用单测
如何使用E2E测试