로그를 Logstash에 푸시하기 위해 logstash-logback-encoder와 함께 ELK를 사용하고 있습니다. 이제 분석을 위해 동일한 스택, 즉 ELK와 logstash-logback-encoder를 사용하고 싶습니다.Logstash : 필드 이름을 기준으로 grok 템플릿을 호출하는 방법이 있습니까
흐름 :
API(Create User)----> Commit data to RDBMS ----->
Callback Listener(on post persist and post update) --->
Logger.info("IndexName: {} . DocId: {} .User json: {}", "Customer", user.getID(), user.getJson());
Logger.info(); logstash-logback-encoder는 Logstash로 데이터를 푸시합니다. Logstash는 데이터를 ES로 푸시합니다.
내 logstash.conf은 다음과 같습니다 :
input {
tcp {
port => 5044
codec => multiline {
what => "previous"
}
}
}
filter{
grok {
match => ["message", "(?<index_name>(?<=IndexName:).*?(?=\s))"]
match => ["message", "(?<doc_id>(?<=DocId:).*?(?=\s))"]
break_on_match => false
remove_tag => ["_grokparsefailure","multiline"]
}
mutate {
gsub => ['message', "\t", " "]
gsub => ['message',"\e\[(\d*;)*(\d*)m"," "]
}
}
output {
if [index_name] == "Customer" {
elasticsearch {
hosts => ["localhost:9200"]
index => "analytics-customers"
document_id => "%{doc_id}"
}
}else {
elasticsearch {
hosts => ["localhost:9200"]
}
}
stdout { codec => rubydebug }
}
내 문제는 내가 분석에 대한 Logstash을 사용하려는 경우 다음 내가 grok 수를 사용하여 JSON을 구문 분석해야한다는 것입니다. 테이블과 필드의 양이 많아지면 logstash.conf는 정말 커지게됩니다.
인덱스 이름을 기반으로 호출 할 수있는 logstash.conf에 grok 템플릿을 적용 할 수있는 방법이 있습니까? 처럼 : 당신은 한 줄에 로그를 얻을 관리 할 수있는 경우
grok {
match => ["message", "(?<index_name>(?<=IndexName:).*?(?=\s))"]
if(index_name=="User"){
//Invoke User template which will fetch/create fields from passed json.
}
if(index_name=="Order"){
//Invoke Order template which will fetch/create fields from passed json.
}
}