利用logstash-output-jdbc从mysql导入数据到es中,如何构建多级节点的JSON

本文介绍如何使用Logstash的filter配置实现从MySQL导入数据到Elasticsearch,并构建一对一及一对多的多级JSON数据结构。对于一对一关联,通过add_field添加嵌套字段并移除原始字段;对于一对多关联,则采用aggregate插件收集多个子项。

需求场景:

1:  利用logstash-output-jdbc从mysql导入数据到es(elasticsearch版本5.4.1)中,如何构建构建一对一多级节点的JSON.  如产品表,需要关联产品品牌,产品供应商。 

解决方法:

filter {
if [type] == "product"{
mutate {
add_field => {
"[provider][id]" => "%{provider_id}"
"[provider][code]" => "%{provider_code}"
   "[provider][name]" => "%{provider_name}"
}
add_field => {
"[brand][id]" => "%{brand_id}"
"[brand][name]" => "%{brand_name}"
    
}

remove_field => [ "provider_id", "provider_code","provider_name"]
remove_field => [ "brand_id","brand_name"]
}
}
}

2:  构建一对多级节点的JSON.  如产品品牌,对应多个产品。 

解决方法:

filter {
if [type] == "product1"{
aggregate {
task_id => "%{brand_id}"
code => "
map['brandId'] = event.get('brand_id')#品牌ID
map['brandName'] = event.get('brand_name')#品牌名称
map['products'] ||= []
map['products'] << {
'id' => event.get('id'),
'code' => event.get('code'),#产品编码
'name' => event.get('name'),#产品名称
}
event.cancel()
"
push_previous_map_as_event => true
}
}

 }
Logstash 是一个用于管理日志数据的强大工具,支持多种输入、过滤和输出插件。在 Logstash 7.6.2 版本中,其插件生态系统的兼容性是一个关键问题,尤其是在使用第三方插件如 `logstash-output-jdbc` 时。 `logstash-output-jdbc` 插件允许将 Logstash 处理后的数据输出到关系型数据库(如 MySQL、PostgreSQL、Oracle 等),通过 JDBC 驱动程序进行连接。该插件并非由 Elastic 官方维护,而是社区开发的插件之一。因此,在使用过程中需要特别注意版本兼容性。 Logstash 7.6.2 发布于 2020 年初,而 `logstash-output-jdbc` 插件的版本更新通常滞后于 Logstash 的主版本发布。根据社区反馈和插件的 GitHub 页面信息,`logstash-output-jdbc` 在 Logstash 7.x 系列版本中是可用的,但可能存在部分功能限制或需要手动配置的情况[^1]。例如: - 插件需要 Java 8 或更高版本的支持。 - 使用时需手动下载并配置对应的 JDBC 驱动文件,并将其放置在 Logstash 的类路径下。 - 某些字段映射或 SQL 语句构造可能需要根据具体数据库类型进行调整。 为了验证兼容性,建议执行以下步骤: 1. **安装插件**: 进入 Logstash 容器内部并尝试安装插件: ```bash docker exec -it logstash bash bin/logstash-plugin install logstash-output-jdbc ``` 2. **测试配置文件**: 创建一个简单的 `.conf` 文件来测试输出到数据库的功能,示例配置如下: ```ruby input { stdin {} } filter { # 可选的过滤逻辑 } output { jdbc { "jdbc_connection_string" => "jdbc:mysql://localhost:3306/testdb" "jdbc_user" => "root" "jdbc_password" => "password" "statement" => ["INSERT INTO logs (message) VALUES (?)", "message"] } } ``` 3. **运行测试命令**: 执行以下命令以测试配置是否有效: ```bash bin/logstash -f /path/to/your.conf --config.test_and_exit ``` 4. **查看日志输出**: 如果测试通过,则可以尝试实际运行 Logstash 并观察日志输出是否正常,尤其是与数据库交互的部分。 需要注意的是,由于 `logstash-output-jdbc` 不是官方支持的插件,因此在生产环境中使用时应谨慎评估其稳定性和性能表现。如果遇到兼容性问题,可参考插件的 issue 跟踪系统或社区论坛寻求帮助。 此外,Elastic 官方推荐的方式是使用 `logstash-output-elasticsearch` 将数据发送到 Elasticsearch,再结合其他工具(如 Beats 或自定义脚本)实现与数据库的集成。这种方式更为稳定且易于维护。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值