您在 Elasticsearch 中的数据库数据

您在 Elasticsearch 中的数据库数据

如果您像我一样喜欢 Elasticsearch 的灵活性和可扩展性。与 Kibana 搭配使用,它成为利用数据的完美工具,即使对于非技术人员也是如此。

我最近需要实时向我的非技术业务合作伙伴展示一些特定的用户数据,以便他们可以 A/B 测试他们的一些营销策略。通过我的典型日志结构,其中一些数据已经在我的 Elasticsearch 实例中。不幸的是,最重要的数据不是。

我有两个选择。

  1. 更改我的所有后端代码,以便在将数据保存到数据库时也将此信息记录到 Elasticsearch。
  2. 轮询我的数据库并将相关信息发送到 Elasticsearch

选项1是可靠的。您拥有您所期望的所有控制权,并且您可以利用您已经在做的任何日志记录。缺点是它需要改变你的后端。就我而言,我需要来自该系统几个非常不同部分的几条数据,这对于我的用例来说似乎太耗时了,尤其是在时间是我最宝贵的资产的创业世界中。

选项 2 似乎非常合适!完成速度很快,不需要我接触系统的任何其他部分。

让我们看看你是怎么做到的!

先决条件

我正在使用关系 SQL 数据库,因此这组步骤将重点关注这一点。

因此,我使用 JDBC 作为连接器。

我正在 Linux 上完成这个过程,特别是 Ubuntu。您可以更改操作系统特定的命令以满足您的需要。

日志存储

Logstash 是您的面包和黄油。它驱动所有数据的轮询和发送,并且非常容易配置。我第一次通过这个过程一直到生产不到 1 小时。

  1. 安装 Logstash — https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

  2. 在 /etc/logstash/conf.d 创建一个配置文件
    您可以随意命名,只需将扩展名设为“.conf”即可。即dbtoelastic.conf
    Logstash 足够聪明,可以在此位置搜索配置文件,因此您无需以任何方式连接它。

  3. 打开那个文件,让我们开始配置吧!

    输入 {
    数据库{
    jdbc_driver_library => "jdbc 连接器的路径"
    jdbc_driver_class => “com.mysql.jdbc.Driver”
    jdbc_connection_string => “jdbc:mysql:// / "
    jdbc_user => “admin” <- 你的数据库用户
    jdbc_password => “pass” <- 你的数据库密码
    jdbc_paging_enabled => 真
    tracking_column => “unix_ts_in_secs”
    use_column_value => true
    tracking_column_type => “数字”
    schedule => “*/5 * * * *” <- 每 5 分钟运行一次
    statement => "SELECT UserInfo.userId, UserInfo.name FROM UserInfo" <- 获取数据的 SQL 语句
    }
    }

jdbc_driver_library 只是服务器上 jdbc 驱动程序的路径。
jdbc_driver_class 是与您的数据库匹配的驱动程序类。
jdbc_connection_string 是您的数据库的路径

这里最重要的部分是 陈述 部分。这是一个提取您关心的数据的 SQL 调用。这可以像您希望的那样简单或复杂。我的生产使用最终是十几个带有一些聚合的表,到目前为止我遇到了 0 个问题。为了这篇文章,我保持 SQL 语句非常简单。

最后,我们想告诉 Logstash 如何处理我们的数据:

 输出 {  
 弹性搜索{  
 索引 => “prodDb_idx”  
 ilm_enabled => 假  
 cloud_id => "弹性搜索云 ID"  
 api_key => "弹性搜索 API 密钥"  
 ssl => 真  
 document_id => "%{userId}"  
 }  
 }

这是指示 Logstash 将我们的数据发送到我们的 Elasticsearch 实例。在这种情况下,我们正在创建并使用一个名为“prodDb_idx”的新索引。

另一件需要注意的重要事情是我手动将文档 ID 指定为我的用户 ID。这样做意味着每次 Logstash 轮询我的数据库时,我不会在 Elasticsearch 中为具有该用户 ID 的相同 SQL 结果行获得重复行。

4. 运行 Logstash!我建议使用已设置的服务,以便您获得服务的所有好处:

 systemctl 启动logstash

Logstash 具有相当可读的控制台输出。您将很快知道您的配置是否出现问题。

弹性搜索

现在我们可以跳到 Elasticsearch 端来确保一切正常。

您可以很容易地完成此操作,但在我们上面指定的索引上运行快速查询(即在开发控制台上)。

 获取 prodDb_idx/_search  
 {  
 “询问”: {  
 “匹配全部”:{}  
 }  
 }

要么它会告诉你索引不存在

Something must be wrong with Logstash config

在这种情况下,您的 Logstash 配置有问题,因此请返回上一步。或者你会看到你查询的数据!

We got data!

从这里您可以完成所有典型的 Elasticsearch 工作!我能够创建保存的搜索并利用这些数据制作一个漂亮的仪表板,这样我的队友就可以看到和连接他们以前无法看到的信息!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38472/42192112

posted @ 2022-09-21 12:42  哈哈哈来了啊啊啊  阅读(24)  评论(0编辑  收藏  举报