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中一样被推送。我想知道我可以用哪个过滤器对数据进行分组。你可以用这个过滤器。