Hey guys,
im suffering with this Problem:
Using jdbc connected with SQL-Database.
I want to achive this nested type in elasticsearch:
{
"mappings": {
"Units": {
"properties": {
"System": {
"type": "nested",
"properties": {
"serialNumber": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
}
}
but if i try to do so via logstash i get this error:
[2017-06-15T17:42:33,556][WARN ][logstash.outputs.elasticsearch] Failed action.{:status=>400, :action=>["index", {:_id=>nil, :_index=>"my_index", :_type=>"logs", :_routing=>nil}, 2017-06-15T15:42:33.334Z %{host} %{message}], :response=>{"index"=>{"_index"=>"my_index", "_type"=>"logs", "_id"=>"AVysa6BNpCeJ3dzt0jMB", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"object mapping [System] can't be changed from nested to non-nested"}}}}
my configfile for Logstash is:
input
{
jdbc
{
//working fine
}
}
filter{
aggregate {
task_id => "%{iddevice}"
code => "
map['System'] ||={}
map['System']['name'] = event.get('namesystem')
map['System']['serialNumber'] = event.get('serialnumbersystem')
map['System']['description'] = event.get('descriptionsystem')
map['System']['typeid'] = event.get('systemtypeid')
map['System']['SubSystem'] ||={}
map['System']['SubSystem']['name'] = event.get('namesubsystem')
map['System']['SubSystem']['description'] = event.get('descriptionsubsystem')
map['System']['SubSystem']['serialNumber'] = event.get('serialnumbersubsystem')
map['System']['SubSystem']['typeid'] = event.get('subsystemtypeid')
map['System']['SubSystem']['Device']||={}
map['System']['SubSystem']['Device']['name'] = event.get('namedevice')
map['System']['SubSystem']['Device']['nameRaw'] = event.get('namedeviceraw')
map['System']['SubSystem']['Device']['Values'] ||= []
map['System']['SubSystem']['Device']['Values'] << { 'typeid' => event.get('devicetypeid'),
'date' => event.get('datedevice'),
'operatingTime' => event.get('operatingtimedevice')}
"
push_previous_map_as_event => true
timeout_tags => ['aggregated']
}
if "aggregated" not in [tags] {
drop {}
}
}
output
{
stdout {
codec => rubydebug{
metadata => false}
}
elasticsearch {
hosts => ["127.0.0.1"]
index =>"my_index"
}
}
If I dont use mappings for my Index the aggregated data is cleary not advertised as type of "nested".
Thanks for help.