logstash jdbc同步mysql多表数据到elasticsearch

本文介绍如何使用Logstash从两个不同的MySQL数据库中同步数据到Elasticsearch。通过配置Logstash的输入插件连接MySQL,筛选更新的数据,并设置输出插件将数据发送到指定的Elasticsearch索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在当今数据驱动的时代,海量的日志、事件和指标数据源源不断地从各类系统、应用和设备中产生。如何高效地采集、解析、存储和分析这些数据,成为企业实现运维监控、业务洞察和安全分析的关键挑战。

Logstash 作为 Elastic Stack(ELK)生态的核心组件之一,扮演着“数据管道”的重要角色。它能够从多样化数据源实时采集信息,并通过灵活的过滤规则进行清洗、转换和丰富,最终将结构化数据高效地输送至目标存储或分析平台(如 Elasticsearch)。无论是日志聚合、实时监控,还是复杂的事件处理,Logstash 都以其强大的扩展性和插件化设计,成为数据处理流程中不可或缺的工具。


一、logstash 是什么?

Logstash 是一个开源的服务器端数据处理管道工具,由 Elastic 公司开发(原属于 Elastic Stack 生态,简称 ELK Stack)。它主要用于收集、解析、转换和传输来自不同来源的日志或事件数据,并将其发送到目标存储或分析系统(如 Elasticsearch)。

二、使用步骤

1.环境准备

  1. elasticsearch5.5.3
  2. logstash5.5.3
  3. mysql5.6.37
  4. mysql表中必须有时间戳字段

2.测试条件

  1. 同步两张表数据到索引
  • 以表名作为es索引名称
  • 以表的注解id作为es的object id

3.logstash配置文件

dbToEs.conf

input {
   jdbc {
    jdbc_driver_library => "mysql-connector-java-5.1.36.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.1.151:3306/mydb"
    jdbc_user => "root"
    jdbc_password => "root@hiekn"
    schedule => "* * * * *"
    statement => "SELECT * from tb_user where lastModifyTime > :sql_last_value"
    add_field => { "[@metadata][type]" => "mydb" } 
  }
  jdbc {
    jdbc_driver_library => "mysql-connector-java-5.1.36.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.1.151:3306/mydb2"
    jdbc_user => "root"
    jdbc_password => "root@hiekn"
    schedule => "* * * * *"
    statement => "SELECT * from tb_user where lastModifyTime > :sql_last_value"
    add_field => { "[@metadata][type]" => "mydb2" } 
  }
}

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
    mutate  {
        remove_field => ["@timestamp","@version"]
    }
}

output {
    if [@metadata][type] == "mydb" {
       elasticsearch {
            hosts => [ "192.168.1.157:9200" ]
            #manage_template => false
            index => "mydb"
            document_id => "%{id}"
            document_type => "mydb_data"
        }
    } else if [@metadata][type] == "mydb2"{
        elasticsearch {
            hosts => [ "192.168.1.157:9200" ]
            index => "mydb2"
            document_id => "%{id}"
            document_type => "mydb2_data"
        }
    }
}

4.运行logstash

  1. 将配置文件放在bin目录下
  2. 执行./logstash -f ./dbToEs.con

5.说明

  1. 第一次执行时间戳是以1970-01-01 00:00:00为起点
  2. logstash每间隔1分钟执行一次sql

三、优势与劣势

优点:

  1. 插件生态丰富(200+ 官方和社区插件)。

  2. 支持复杂的数据转换逻辑。

缺点:

  1. 相对较重(依赖 JVM),可能占用较多内存。

  2. 对简单场景可能过度设计(此时可用 Filebeat + Ingest Node 替代)。


总结

Logstash 是 ELK/Elastic Stack 中负责数据预处理的核心组件,适合需要复杂解析和转换的场景。对于轻量级需求,可结合 Filebeat 或 Fluentd 使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kse_music

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值