W appce nad którą pracuję chcę zrobić bardzo dobre logowanie, które pozwoli łatwo odkryć przyczynę problemu. Pliki tekstowe odpadają.
Ogólnie log będzie miał format mniej więcej taki:
Chodzi o to bym mógł łatwo przeczytać wszystkie wiadomości dla usera_1 i requestu id =12342143 filtrując po tagach some i bar. Fajnie by było jakby się dało takie zapytania definiować.
Dodatkowo logi będą zbierane z większej ilosci maszyn. Znacie takie narzędzia?
PS. Z radością przywitam wszelkie linki do porad jak zrobić dobre logowanie.
EDIT Pliki tekstowe odpadają, bo łączenie danych z kilku serwerów jest bolesne.
hmn zapis do plików csv? wystarczy później je przez jakiś prosty parser przemaglować i będzie Ci zwracało pożądane wpisy.
EDIT:
alternatywne rozwiązanie (na szybko zrodzone w mojej chorej głowie:) ) to nie mogłoby wiązać się z zapisywaniem do bazy danych i archiwizacji? ostatnio akurat miałem na uczelni co nieco o hurtowniach danych - temat powinien Cię zainteresować
Wiem też, że niektórzy używają http://www.lwes.org/, jest szybki i wysyłasz informacje we wcześniej przygotowanych strukturach, więc możesz zamieścić różnego rodzaju dodatkowe info. tenderlove mówił, że tego u nich w AT&T używają i że sie dobrze sprawuje.
To jeszcze zależy od wielkości tych logów, od tego co dokładnie nazwiemy “hurtowniami danych” i do czego chcesz tego używać. Wydaje mi się, że nawet do niektórych systemów, które są podlinkowane powyżej można by zastosować definicję hurtowni danych. W mojej wypowiedzi bardziej mi chodziło o to, że z reguły systemy, których się używa do hurtowni danych są wielkimi kobyłami, więc imho nie warto w poszukiwaniach się kierować w tą stronę, ale raczej w stronę rozwiązań, które są wykorzystywane konkretnie do zbierania logów (i tutaj czy już je nazwiesz hurtowniami danych czy nie, to jest inna sprawa, w wielu przypadkach może to być zasadne).
%w[ error notice debug info ].each do |m|
define_method(msg) do lwrite(m, msg)
end
end
Po czym Rails.logger= DbLogger
oczywiscie dużo to pseudokod, piany na szybciocha, ale jak postawisz piwo to opakuję to ładnie w gema, szczególnie że uzywam 2 czy 3 różnych wersji tego rozwiązania w różnych projektach.
Indeksujesz oczywiscie po tagach, session_id, request_id itp. Jak uzywasz jak człowiek postgresa to ustawiasz GIN indeks (albo ten drugi nie pamiętam który daje szybszy insertion) na tags i masz piększne indeksowanie tablic.
Logi wyciągasz prościutko poprzez konsole SQL lub używajac railsowego modelu.
Gadałem niedawno na lokalnym user group z jednym kolesiem, który próbował użyć ElasticSearch do czegoś takiego. Przeszukują dużo logów i dotychczas grepowali po production.log, więc postanowili wrzucać to do ElasticSearch. Po paru miesiącach wrócili do grepowania po production.log, bo potrzebowali więcej maszyn z ElasticSearch do zapisu logów niż maszyn na produkcji do ich generowania.
O jakiej ilości danych mówimy? Jaki jest dobowy przyrost nowych danych (ile [mega/giga/tera]bajtów). Za jaki okres czasu masz logi i ile logi będą trzymane w czasie?
Jaka jest charakterystyka zbioru danych:
ile jest user_id
czy request_id jest unikalny globalnie, czy jest unikalny tylko w w zbiorze user_id
Jaki jest wymagany czas dostępu do danych, jaki jest akceptowalny czas, w którym dostaniemy wynik naszego zapytania. Będziemy przeszukiwać coś na żywo, czy raczej będziemy przygotowywać raporty (zapytania mogą trwać po kilka godzin i nas to nie boli).
Rozumiem, że poprzez logi rozumiemy coś co tylko przyrasta (jedyne operacje to wstawianie nowych danych i odczyt). Dane nie będą modyfikowane, ani usuwane (np. usuwamy dane na życzenie klienta).
Jeśli danych będzie mało tj. w przeciągu najbliższego roku nie przewidujesz więcej niż kilkadziesiąt-kilkaset gigabajtów danych to możesz spróbować iść w bazy danych. PostgreSQL, czy też oracle, gdy będzie dobrze skonfigurowany i będzie działał na dobrym sprzęcie to sobie powinien z tym poradzić, chyba że zajedzie go liczbą zapytań.
Jeśli danych masz więcej (u mnie w firmie średni dobowy przyrost logów to kilkaset gigabajtów po spakowaniu z ratio 85-90%) to możesz iść albo po prostu w pliki tekstowe, albo uszyć coś swojego.
Odswieze topic, bo moze sie komus przydac. Otoz obecnie uzywamy splunk’a, ktory agreguje logi z plikow i jest genialny. Nie tylko jest w stanie fajnie wyszukiwac, ma wiele innych mozliwosci takie jak funkcje agregacji itp. Polecam!
Zestawiłem ELK, jest bardzo przyjemne do agregowania logów ustrukturyzowanych, natomiast wydaje się lekką przesadą dla danych, których nie chcę aż tak szczegółowo analizować.