Cześć.
Zbieramy dane w elasticu i wizualizujemy je, ale czasem wyniki są przekłamane. Sprawdziliśmy i wychodzi na to, że to przez logstasha. Okazjonalnie zaczyta dane powtórnie z jakiegoś powodu. Jest jakiś sposób na to?
Hej.
Ok, więc jak sam zauważyłeś/aś logstash wysyła dokumenty i czasem (przez restart, konfigurację lub nawet same źródło) duplikaty mogą pojawić się w systemie. Dobrym sposobem, żeby sobie z tym poradzić jest uzupełnienie konfiguracji logstasha o fingerprint.
Logstash buduje unikalny fingerprint dla dokumentu, na bazie jakichś pól i wtedy zastępujemy nim id dokumentu. Konfiruacja może wyglądać jak poniżej:
Code:
Input {
if "foo" in [tags] {
fingerprint {
source => [ "[host]", "[file][fullname]", "[file][content]" ]
target => "generated_id"
method => "SHA1"
key => "xyz"
concatenate_sources => "true"
}
}
}
Output {
if "foo" in [type] {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "boo"
document_id => "%{generated_id}"
}
}
else {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "moo"
}
}
}
Ok, fajnie. A nie a jakiegoś sposobu, żeby to ogarnąć bez zmiany konfiguracji logstasha? Na przykład w kibanie? Poza tym zduplikowany dokument będzie mieć inny @timestamp i też będzie przekłamywał wyniki.
Tak, @timestamp może być inny od oryginalnego, jeśli tego pola też nie obsłużymy w konfiguracji logstasha.
Z drugiej strony pole @timestamp nie jest niczym unikalnym ani tym bardziej wymaganym w kibanie. Te pole jest dodawane przez logstash w momencie, w którym odebrał dokument, ale to wszystko.
Jeśli wasze wyliczenia bazują na aspekcie czasu, to wówczas proponuję pobierać datę z innego miejsca, np. czas utworzenia wpisu przez źródło. Mając takie pole, utworzyć nowy index pattern w kibanie, który będzie tworzył oś czasu nie na bazie @timestamp, a właśnie na bazie tego nowego pola.
Jeśli chodzi o inne opcje:
Generalnie obsługa tego w logstashu jest zdecydowanie najlepszym rozwiązaniem. Jeśli chcemy obsłużyć to w kibanie to jest to trochę zamiatanie pod dywan, a nie rozwiązywanie problemu duplikacji dokumentów.
Niemniej jednak - w wizualizacjach w kibanie mamy dostępna metryke Unique Count, którą można wykorzystać do tego, by daną wartość zliczała jedynie raz i wtedy wyliczenia nie będą brały pod uwagę duplikatów.
Ostatecznie można pobawić się jeszcze ze scripted fields, ale to wymaga skryptowania i nie jest rekomendowane do użycia w produkcyjnych środowiskach. Jeśli już zabieramy się do kodu, to niech to będzie kod konfiguracji logstasha.
W porządku, ale teraz jest kolejny problem - jeśli mam utworzyć nowy index pattern to stare wizualizacje nie będą na nim działać! Wszystkie wizualizacje mam robić od 0 w związku z nowym patternem?
(04-15-2021, 11:47 AM)WhiteHatPirate Wrote: [ -> ]kolejny problem - jeśli mam utworzyć nowy index pattern to stare wizualizacje nie będą na nim działać!
Nie zapominajmy, że prawdziwym problemem jest duplikacja dokumentów
W każdym razie przepięcie wizualizacji to nowy pattern nie jest szczególnie skomplikowana. Każdy pattern ma swoje id. Jedyne co trzeba zrobić to edytować kod wizualizacji i podmienić id starego patternu na te z nowego i wszystko będzie śmigać.
Kod wizualizacji można zobaczyć poprzez przejście do management -> saved objects -> nazwa_wizualizacji.