aufzurufen. Ich benutze ELK mit logstash-logback-encoder um Logs in den Logstash zu schieben. Jetzt möchte ich den gleichen Stack verwenden, d. H. ELK mit logstash-logback-encoder für analytics.Logstash: Gibt es eine Möglichkeit, Grok-Templates auf Basis des Feldnamens
Fluss:
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, überträgt die Daten an Logstash, wodurch die Daten an ES gesendet werden.
Mein logstash.conf ist wie folgt:
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 }
}
Mein Problem ist, dass, wenn ich Logstash für Analysen verwendet werden soll, dann muss ich das json mit grok analysieren. Mit der Menge an Tabellen und Feldern, die ich habe, wird die logstash.conf wirklich riesig.
Gibt es eine Möglichkeit, wie ich Grow-Templates in der logstash.conf anwenden kann, die ich anhand des Indexnamens aufrufen kann. Like:
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.
}
}