logstash 구성에 문제가 있습니다. 아래에서 내 logstash 구성을 찾을 수 있습니다.로그 검색을 통해 탄성 검색. 점이있는 키
루비 필터는 모든 점을 제거합니다. 내 분야에서. 모든 것이 잘 작동하는 것으로 보입니다 - 데이터 필터링의 결과는 정확하지만 elasticsearch는 마술로 "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [/ConsumerAdminWebService/getConsumerTransactions.call] cannot contain '.'"}
으로 응답합니다. 여기서 getConsumerTransactions.call
은 내 필드 키 중 하나입니다.
input {
http_poller {
urls => {
uatBackend1 => {
method => get
url => "http://some-url/"
headers => {
Accept => "application/json"
}
}
}
request_timeout => 60
# Run every 30 seconds
schedule => { cron => "* * * * * UTC"}
codec => "json"
metadata_target => "http_poller_metadata"
}
}
filter {
ruby {
init => "
def remove_dots hash
new = Hash.new
hash.each { |k,v|
if v.is_a? Hash
v = remove_dots(v)
end
new[ k.gsub('.','_') ] = v
if v.is_a? Array
v.each { |elem|
if elem.is_a? Hash
elem = remove_dots(elem)
end
new[ k.gsub('.','_') ] = elem
} unless v.nil?
end
} unless hash.nil?
return new
end
"
code => "
event.instance_variable_set(:@data,remove_dots(event.to_hash))
"
}
}
output {
elasticsearch {
hosts => localhost
}
}
나는 코드 줄이 정확하지 않은 것을 두려워 : event.instance_variable_set(:@data,remove_dots(event.to_hash))
- 결과 데이터는 어떻게 든 이벤트에 고정되어 있지만 원본 데이터는 변경되지 않고 지속 및 API를 Elasticsearch에 전달된다.
- 내가 사용하는 ES 버전> 2.0 그래서 점
- 루비 필터는 "_"로 점을 교체해야합니다 수 없습니다 그것은 잘 작동 - 결과 데이터가 완전히이다 정확한 그러나 ES는 언급 한 오류로 답장합니다. 나는 필터가 이벤트 데이터를 대체하지는 않지만 단순히 Event 객체에 새로운 필드를 추가한다고 의심한다. ES는 여전히 업데이트 된 것이 아닌 원시 데이터를 읽습니다.
루비 나에게 마법 :
사용중인 ES 버전은 무엇입니까? – Kulasangar
예외를 확인하는 것이 좋습니다 : event.instance_variable_set (: @ data, remove_dots (event.to_hash)) 구출 예외 => e 이벤트 [ 'logstash_ruby_exception'] = '필드 도트 정리 :'+ e. 메시지 끝 –
@ Kulasangar 나는 ES 버전 2.3.1을 사용합니다. – adgon92