logstash-output-rocketmq插件实现——JAVA版

本文详细介绍了如何基于Java开发logstash-output-rocketmq插件,包括从克隆logstash源码、生成.jar文件、配置插件、修改代码、打包发布,到在logstash中安装和运行插件的全过程。
摘要由CSDN通过智能技术生成


前言

编写该插件的时候踩了蛮多坑,这里记录一下。

1. logstash启动

首先使用如下命令从github clone一份logstash的代码,或者直接下载对应的zip压缩包。

git clone --branch 7.9 --single-branch https://github.com/elastic/logstash.git

--branch后面是分支名,我使用的是7.9版本的logstash,分支名就是7.9。

下面用$LS_HOME来表示你本地的logstash根目录。

启动logstash

$LS_HOME下执行如下命令来启动logstash,但此时直接启动应该会报错。

bin/logstash -e 'input { stdin {} } output { stdout {} }'

错误信息如下:
在这里插入图片描述
根据提示,我们首先要bootstrap环境。在$LS_HOME下执行下面的命令:

rake bootstrap

成功后如下:
在这里插入图片描述
这时启动还是会失败,因为还没有安装任何插件,stdinstdout是无法使用的,执行下面的命令来安装默认插件:

rake plugin:install-default

这一步安装可能需要等一段时间。安装成功后如下:
在这里插入图片描述
在执行下面的命令来启动logstash:

bin/logstash -e 'input { stdin {} } output { stdout {} }'

启动成功后如下:
在这里插入图片描述
输入“hello world”,在控制台上可以看到返回的结果。logstash启动成功。用ctrl+c来停止logstash。

2. 生成.jar文件

$LS_HOME下执行下面的命令来编译logstash

./gradlew assemble

在这里插入图片描述
此时应该生成一个$LS_HOME/logstash-core/build/libs/logstash-core-x.y.z.jar,其中x,y,z是版本号。这个.jar文件稍后需要用到。

3. 下载并配置插件demo

logstash官方为我们提供了一个output-plugin的示例代码(JAVA版本),地址在这里:Example,直接下载到本地并解压。在IDEA中打开该项目。

首先,在该项目目录下创建一个文件命名为gradle.properties
在这里插入图片描述

在该文件内写入一行内容:

LOGSTASH_CORE_PATH=<target_folder>/logstash-core

<target_folder>修改为本地的logstash的路径。

此时如果项目有报错,修改build.gradle文件,将文件最后的

tasks.register("gem"){
   
    dependsOn [downloadAndInstallJRuby, removeObsoleteJars, vendor, generateRubySupportFiles]
    doLast {
   
        buildGem(projectDir, buildDir, pluginInfo.pluginFullName() + ".gemspec")
    }
}

修改为

tasks.register("gem"){
   
    dependsOn downloadAndInstallJRuby
    dependsOn removeObsoleteJars
    dependsOn vendor
    dependsOn generateRubySupportFiles
    doLast {
   
        buildGem(projectDir, buildDir, pluginInfo.pluginFullName() + ".gemspec")
    }
}

刷新一下项目即可。

4. demo代码说明

类的声明

@LogstashPlugin(name="java_output_example")
public class JavaOutputExample implements Output {
   

每个插件都必须加上这个@LogstashPlugin注解,其中name属性就是这个插件的名字,比如在这个例子中,插件的名字就叫做"java_output_example",那我们使用的时候就得在logstash的启动配置文件中写上

output {
    java_output_example {
    .... } }

表示输出使用“java_output_example”这个插件。

还有一点非常重要,就是name属性的值(java_output_example)和类的名字(JavaOutputExample)在必须是一样的(忽略大小写和下划线)。

插件设置

public static final PluginConfigSpec<String> PREFIX_CONFIG =
        PluginConfigSpec.stringSetting("prefix", "");

@Override
public Collection<PluginConfigSpec<?>> configSchema() {
   
    return Collections.singletonList(PREFIX_CONFIG);
}

这个就是用来传参的,我们通过配置启动logstash时,通常会在配置文件中指定一些参数,比如

output {
    
		java_output_example {
    
			prefix => "test"
		} 
}

这个prefix就是从配置文件中传进来的,因此代码中有一个PREFIX_CONFIG用来接收这个参数。stringSetting()方法的第一个参数就是指传进来的参数名,如果我们还有其他参数,比如topic,可以创建一个TOPIC_CONFIG,并指定stringSetting()方法的第一个参数为topic

configSchema()方法就是返回这些配置参数的集合。

构造器

这个应该不需要解释了,就是取出配置参数的值。但是,必须有一个构造器的参数为String,ConfigurationContext。就像demo中给的构造器这样

    // all plugins must provide a constructor that accepts id, Configuration, and Context
    public JavaOutputExample(final String id, final Configuration configuration, final Context context) {
   
        this(id, configuration, context, System.out
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值