elasticsearch 在Logstash中过滤jdbc数据,elasticsearch,jdbc,filter,logstash,elasticsearch,Jdbc,Filter,Logstash" /> elasticsearch 在Logstash中过滤jdbc数据,elasticsearch,jdbc,filter,logstash,elasticsearch,Jdbc,Filter,Logstash" />

elasticsearch 在Logstash中过滤jdbc数据

elasticsearch 在Logstash中过滤jdbc数据,elasticsearch,jdbc,filter,logstash,elasticsearch,Jdbc,Filter,Logstash,在我的数据库中,我有以下格式的数据: 但是在ElasticSearch中,我想推送与项目类型相关的数据。因此,ElasticSearch中的每条记录将列出所有项目名称及其每种项目类型的值 像这样: { "_index": "daily_needs", "_type": "id", "_id": "10", "_source": { "item_type: "10", "fruits": "20", "veggies": "32", "butter

在我的数据库中,我有以下格式的数据:

但是在
ElasticSearch
中,我想推送与项目类型相关的数据。因此,ElasticSearch中的每条记录将列出所有项目名称及其每种项目类型的值

像这样:

{
  "_index": "daily_needs",
  "_type": "id",
  "_id": "10",
  "_source": {
    "item_type: "10",
    "fruits": "20",
    "veggies": "32",
    "butter": "11",
  }
}

{
  "_index": "daily_needs",
  "_type": "id",
  "_id": "11",
  "_source": {
    "item_type: "11",
    "hair gel": "50",
    "shampoo": "35",
  }
}

{
  "_index": "daily_needs",
  "_type": "id",
  "_id": "12",
  "_source": {
    "item_type: "12",
    "tape": "9",
    "10mm screw": "7",
    "blinker fluid": "78",
  }
}
我可以在
Logstash
中实现这一点吗

我对Logstash是新手,但据我所知,这可以在
过滤器中完成。但我不确定要使用哪个过滤器,或者我必须为此创建自定义过滤器

当前配置示例:

input {
  jdbc {
    jdbc_driver_library => "ojdbc6.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "myjdbc-configs"
    jdbc_user => "dbuser"
    jdbc_password => "dbpasswd"
    schedule => "* * * * *"
    statement => "SELECT * from item_table"
  }
}
filter {
    ## WHAT TO WRITE HERE??
}
output {
    elasticsearch {
        hosts => [ "http://myeshost/" ]
        index => "myindex"
    }
}

请建议。谢谢。

您可以通过使用来实现这一点。下面我没有测试过,但应该给你一个想法

 filter {     
      aggregate {
        task_id => "%{item_type}" #
        code => "
          map['Item_type'] = event.get('Item_type')
          map[event.get('Item_Name')] = map[event.get('Item_Value')]
        "
        push_previous_map_as_event => true
        timeout => 3600
        timeout_tags => ['_aggregatetimeout']
      }
      if "aggregated" not in [tags] {
        drop {}
      }
    }
使用聚合过滤器的重要注意事项

  • sql查询必须按项类型对结果排序,这样事件就不会无序
  • sql查询中的列名应与筛选器中的列名匹配
    map[]
  • 您应该只使用一个工作线程进行聚合,否则事件可能会被无序处理,并且会出现意外结果

请共享目标索引的当前映射。@apt-get\u install\u skill,很抱歉,我没有收到您的问题。到目前为止,我没有使用任何过滤器。表的每一行都会像在ES中一样被推送。我想知道我可以用哪个过滤器对数据进行分组。你可以用这个过滤器。