导读:基于上篇文章 Logstash Java Output 插件构建与使用 ,我们可以实现将官方提供的 logstash-output-java_output_example 项目在本地构建、测试和打包使用。本文将基于此 Demo 之上讨论如实现一个输出到 MySQL 的 output插件,本例子只是一个简单的例子,并未达到生产可用。目的是想通过该例子让各位熟悉如何用 Java 编写 Logstash 插件及分享我编写和设计插件的思路供各位参考。
// logstash-outup-java-mysql-plugin 插件 github 地址https://github.com/senlizishi/logstash-outup-java-mysql-plugin
![d562640d45da459c9ba833fcfdff997e.png](https://i-blog.csdnimg.cn/blog_migrate/d7e9d392a8cce302e7bf363815bb5a9e.jpeg)
项目结构及核心文件
1、主要项目结构可划分为三块
- 核心处理逻辑类
- 测试类
- Gradle 依赖管理
![310b775e24550cacafe92545bfd9bc3a.png](https://i-blog.csdnimg.cn/blog_migrate/076c7c21d32880c9221a7318d9764dc8.jpeg)
2、核心文件 JavaOutputExample.class
// 官方文档 How to write a Java output pluginhttps://www.elastic.co/guide/en/logstash/7.x/java-output-plugin.html#_package_and_deploy_4
在官方文档中已详细描述 JavaOutputExample 这个类每一部分的作用和含义,大致为以下几部分
- 构造方法:插件必须提供一个可收 id,、Configuration、Context 的构造方法,初始化参数
- PluginConfigSpec:允许开发人员通过设置名称、数据类型、弃用状态、必需状态和默认值来指定该插件支持的setting设置。
- Output 方法:编写核心输出逻辑,们将在该方法中具体编写输出到 MySQL 的逻辑
- Stop and await Stop
编写和设计的思路
我在编写该插件时参考了 Github 上一个采用 Ruby 语言编写的 logstash-output-jdbc 项目,该项目这个插件允许您使用 JDBC 适配器输出到 SQL 数据库(支持多种数据库)。关于如何使用该插件可以参考Logstash实时读取Nginx日志并存储到MySQL思路 。
// logstash-output-jdbc GitHubhttps://github.com/theangryangel/logstash-output-jdbc
在该项目中其使用了 Hikari 作为数据源,并引入各种数据库对应的 JDBC 驱动。通过安装该插件后我们在 logstash.conf 配置以下代码即可实现输入到 mysql 数据库中。
output { jdbc { driver_jar_path => "/usr/local/logstash/jdbc/mysql-connector-java-8.0.19.jar" driver_class => "com.mysql.jdbc.Driver" #数据库连接 connection_string => "jdbc:mysql://xxxxxxxxx.ads.aliyuncs.com:3306/数据库名?user=xxxxx&password=xxxxxx" #insert语句 statement => [ "insert into v2_ods_media_show_log (`idfa`) value(?)", "idfa"] }}
参考了该项目,我尝试使用 Java 语言