logstash 设计将数据从Snowflake拉入ElasticSearch云的接收管道的最佳方法是什么

yyyllmsg  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(152)

我最近订阅了弹性白金许可证,以使用弹性云服务。我想设计摄取管道,这将把数据从雪花数据仓库拉到ElasticSearch服务。我已经探索并发现了以下方法,请建议设计管道的最佳方法。还请告诉我任何可用的文档。
1.建立一个logstash服务器,在其中安装logstash服务。定义一个管道,使用jdbc snowflake插件将数据从snowflake拉入弹性服务。
1.在弹性云中使用logstash管道。在摄取时通过一个rest API触发管道。这个云管道设置似乎没有太多关于如何实现的文档。
1.通过rest apis摄取。我认为这种方法不是最好的,因为配置管道不是很灵活。
1.任何其他方法,如“节拍”。

lf5gs5x2

lf5gs5x21#

我会选择第一条:
您可以使用Logstash通过JDBC驱动程序从Snowflake中提取数据,然后将数据发送到Elastic Cloud:
一些参考链接:
雪花JDBC驱动程序https://docs.snowflake.com/en/user-guide/jdbc.html
使用cloud_id将日志存储到弹性云:https://www.elastic.co/guide/en/logstash/current/connecting-to-cloud.html
Logstash配置文件示例

input {
    jdbc {
        jdbc_driver_library => "/etc/logstash/pipeline/snowflake/dependency/snowflake-jdbc-3.9.2.jar"
        jdbc_driver_class => "com.snowflake.client.jdbc.SnowflakeDriver"
        jdbc_connection_string => "jdbc:snowflake://url.eu-west-1.snowflakecomputing.com/?db=dbname&warehouse=House"
        jdbc_user => "user"
        jdbc_password => "password"
        schedule => "15 * * * *"
        statement => "
            SELECT TOP 100000 * FROM dbname.CORE.table WHERE timestamp >= '2038-10-02 00:00:00' AND timestamp < '2038-10-02 23:59:59'
        "
        jdbc_fetch_size => 1000
    }
}

output {
    elasticsearch {
        cloud_id => "<cloud id>" 
        api_key => "<api key>"
    }

}

要使两个数据库保持同步,可以使用sql_last_value参数,更多信息:
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#_state

相关问题