【问题标题】:how to automate updation of data from mysql to logstash如何自动将数据从mysql更新到logstash
【发布时间】:2018-11-06 20:48:34
【问题描述】:

目前我正在使用 Mysql 开发 Elastic Stack,一切正常,例如使用 Logstash 在 Elastic-search 上可以使用 mysql 数据库中的数据,但是当在 mysql db 中输入新数据时,我需要重新启动 Logstash,或者可以使用 Schedule 来完成在 Logstash 的配置文件中

input {

  jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    # The user we wish to execute our statement as
    jdbc_user => "root"
    jdbc_password => "ankit"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/ankit/Downloads/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #run logstash at an interval of on minute
    #schedule => "* * * * * *"
    # our query
    statement => "SELECT * FROM ghijkl"
    }
    jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    # The user we wish to execute our statement as
    jdbc_user => "root"
    jdbc_password => "ankit"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/ankit/Downloads/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #run logstash at an interval of on minute
    #schedule => "* * * * * *"
    # our query
    statement => "SELECT * FROM abcdef"
    }
  }

但这不是一个好方法,我正在考虑使用 web-hooks,但没有可用的资源,我从文档页面尝试了 Logstash HTTP 输入插件,但没有任何帮助。

请帮忙。

【问题讨论】:

    标签: mysql elasticsearch logstash webhooks


    【解决方案1】:

    您可以使用特殊查询仅下载最近的数据,比如说每 15 分钟一次:

    SELECT * FROM ghijkl" WHERE EVENT_TIME_OCCURRENCE_FIELD > :sql_last_value
    

    将插入最新记录的时间戳代替:sql_last_value。首次运行查询时,tracking_column 值设置为 01.01.1970

    Logstash 所需配置:

    schedule => "*/15 * * * *"
    use_column_value => true
    tracking_column => 'EVENT_TIME_OCCURRENCE_FIELD'
    

    对于每个输入,您还应该指定last_run_metadata_path 参数以避免将来出现问题,当您有许多输入并且一些输入使用相同的表但不同的架构时,元数据可能会被覆盖并产生意外结果。

    last_run_metadata_path => "PATH_TO_FILE_FOR_META_DATA"
    

    【讨论】:

    • 以及哪些值可以分配给 EVENT_TIME_OCCURRENCE_FIELD
    • 我正在寻找类似的东西,如果一些数据插入到 mysql 数据中,那么 mysql 可以通知 Logstash 并使用上述方法 logstash 检查进一步更新,这是一种昂贵的方法,你明白我的意思吗
    • 只要您正确配置了索引,这是最有效的方法。 WHERE EVENT_TIME_OCCURRENCE_FIELD > :sql_last_value 这种情况对于带索引的数据库来说不是问题。即使您编写自己的脚本使用 http 等连接到 Logstash,它也必须定期检查 DB 是否有类似查询的新记录,所以总的来说这只是不必要的复杂化。
    • 它通常是表中的时间戳,该列描述了何时将记录插入数据库。该列值将由 Logstash 跟踪以推断哪些记录是新的。当您的表中没有任何时间戳时,您还可以使用数字字段,例如 id。
    • 当然有,但您必须编写自己的应用程序来处理它。您真的需要非常快速地从数据库中获取数据吗?只要您不需要比 5-10 秒更频繁的数据并且数据库表不庞大,那么 Logstash 计划作业就不会使您的数据库超载。制作自己的通知器需要一些时间,而且可能只是浪费时间。
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多