当前位置: 首页 > 知识库问答 >
问题:

Logstash/Elasticsearch JDBCdocument_idvsdocument_type?

斜成济
2023-03-14

因此,当使用logstash中的JDBC导入器并导出到elasticsearch时,我试图对文档类型与文档id进行思考。

我终于把我的头缠在索引上了。但让我们假设我正在从传感器数据表(如温度/湿度等)中提取数据有传感器id的。。。温度/湿度(与天气相关的数据),并记录时间。(所以这是一张大桌子)

而且我希望每隔X频繁地轮询数据库。

在这个例子中,document_type和document_id是什么,它将被存储(或者你想叫它什么)在一个索引中。

document_type vs document_id让我感到困惑,尤其是在JDBC导入器方面。

如果我将document_id设置为主键,那么每次都会被重写吗?那么我每次只需要一个数据文档?(这似乎毫无意义)

共有1个答案

司寇旺
2023-03-14

jdbc插件将创建一个JSON文档,每个列有一个字段。因此,为了与您的示例保持一致,如果您有该数据,它将作为如下所示的文档导入:

{
    "sensor_id": 567,
    "temp": 90,
    "humidity": 6,
    "timestamp": "{time}",
    "@timestamp": "{time}" // auto-created field, the time Logstash received the document
}

当你说如果你将document_id设置为主键,它将被覆盖时,你是对的。您可以忽略document_id,除非您想更新Elasticsearch中的现有文档,我不认为您会想要使用这种类型的数据。让Elasticsearch为您生成文档ID。

现在让我们谈谈文档类型。如果要设置文档类型,需要将Logstash中的type字段设置为某个值(这将传播到Elasticsearch)。因此,Elasticsearch中的type字段用于对类似文档进行分组。如果使用jdbc插件导入的表中的所有文档都属于同一类型(应该是!),您可以像这样在jdbc输入中设置type。。。

input {
  jdbc {
    jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
    jdbc_user => "mysql"
    parameters => { "favorite_artist" => "Beethoven" }
    schedule => "* * * * *"
    statement => "SELECT * from songs where artist = :favorite_artist"
    ...
    type => "weather"
  }
}

现在,在Elasticsearch中,您可以通过为该类型设置映射来利用type字段。例如,您可能需要:

PUT my_index 
{
  "mappings": {
    "weather": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "sensor_id":      { "type": "integer"  }, 
        "temp":           { "type": "integer"  }, 
        "humidity":       { "type": "integer" },
        "timestamp":      { "type": "date" }  
      }
    }
  }
}

希望这有帮助!:)

 类似资料:
  • Logstash is a tool for managing events and logs. You can use it to collect logs, parse them, and store them for later use (like, for searching). — http://logstash.net Logstash 项目诞生于 2009 年 8 月 2 日。其作者

  • 1.Centralized Logging 在Cluster环境下,集中化的管理日志是一个很普遍的需求,有两篇日志对各种架构和选型做了很好的总结: Centralized Logging Centralized Logging Architecture 在日志的收集、转换、传输部分,LogStash与Fluentd堪称一生之敌。基于各种原因,个人目前喜欢Logstash多一点,日后也可能变化。 2

  • Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。 Logstash 现在是 ElasticSearch 家族成员之一。

  • Redis 已经帮我们解决了很多的问题,而且也很轻量,为什么我们还需要 logstash-forwarder 呢? Redis provides simple authentication but no transport-layer encryption or authorization. This is perfectly fine in trusted environments. Howev

  • php-logstash php实现的轻量级日志文件监控转储脚本 说明 通过这个轻巧的脚本可以很容易的将日志送到 elasticsearch 中,并且本地测试处理能力基本保持在接近1w/s的速度。 脚本主要实现两个功能,输入和输出。 输入 php agent.php --listen=case.log 用来监听访问日志的变更 或者使用命令 tail -F case.log | php agent.

  • 我读到elasticsearch Rivers/River插件不推荐使用。所以我们不能直接进行elasticsearch-kafka积分。如果我们想这样做,那么我们需要在两者之间有一个java(或任何语言)层,使用它的API将数据从kafka放到弹性搜索。 另一方面,如果我们有kafka-logstash-elasticsearch,那么我们可以去掉上面的中间层,并通过logstash来实现,只需