…w projekcie opensource ;]. Otóż od dłuższego czasu używam collectd do zbierania statystyk z serwerów. Sam soft (napisany w C) generalnie słuzy do zbierania danych (sporo pluginów wbudowanych + api do perla i javy + możliwość wykonywania zewnętrznych pluginów z bardzo łatwym API) i zapisywania ich przez RRDTool, CSV, lub wysyłania ich do innej instacji collectd przez plugin network.

W wersji 4.7 jest też mechanizm filtrowania danych wejściowych oraz generowania alertów (można np. podpiąć pod nagiosa) ale brakowało mi jednej opcji, collectd obsługiwał tylko typy danych COUNTER (dane wejściowe to rosnący licznik np. pakietów) i GAUGE ( dane typu temperatura, prędkość wiatraczka itp.) i tu był mały problem bo np. stawiasz VPN i za każdym reconnectem licznik się resetuje co powoduje “pik” na wykresie (bo rrdtool liczy “counter overflow w taki sposob : wartosc=max-wartosc-poprzednia wartosc).

Napisałem więc patch dodający pozostałe 2 typy danych z RRDtool, DERIVE (licznik ale w przypadku overflow generuje NaN zamiast wartości wg. poprzedniego wzoru) i ABSOLUTE (licznik resetowany przy odczycie, nie widzialem jeszcze zastosowania ale napisalem z rozpędu) i parę dni temu patch dostał zielone śwatło od Octo i jest w głównym gicie ;]. http://mailman.verplant.org/pipermail/collectd/2009-July/002840.html

Kontynuując opis collectd, używam go od mniej więcej pół roku do zbierania statów i sprawuje się świetnie ;]. Nie ma wbudowanego systemu tworzenia wykresów (jak munin), chociaż wraz z collectd dostarczany jest skrypt perlowy collection działający całkiem przyzwoicie. Za to jest dokładny (większość wartości zbieranych jest co 10s, niektóre pluginy umożliwiają zmianę tego czasu) i szybki (jest napisany w C), ma też mechanizm buforowania zapisów plików RRD, czyli zamiast zapisywać plik przy każdej zmianie zapisuje go hurtowo co ileś sekund – ma to duże znaczenie jeżeli chcemy np. wyciągnąć staty użycia 100 tabel z PostgreSQLa ;]

Każda instancja collectd może pracować zarówno jako klient jak i serwer więc można zrobić np. serwer który przyjmuje dane od paru lokalnych klientów, zapisuje je w plikach rrd lokalnie i jednocześnie wysyła je do głównego serwera w centrali firmy. Albo wysyła staty bazy danych do serwera A a resztę do serwera B. Możliwości jest sporo ;]

Jeszcze wracając do wykresów, całkiem niezłym softem do robienia wykresów z jakichkolwiek plików rrd jest drraw , wygląda raczej paskudnie (przydałby się temu projektowy jakiś porządny CSS wizard) ale mozna w miarę szybko wyklepać porządane wykresy. Swoją drogą fajnie by było jakby ktoś napisał jakies Gtk/Qt GUI do RRDtools, ten format jest używany wszedzie a nigdzie nie ma porządnego edytora do niego.

Porównując go do Munin:

Oba:

  • Sensowne wartości domyślne
  • Łatwośc pisania pluginów (tyle że w munin plugin ma zarówno mówić jakie dane generuje jak i jak mają wyglądać wykresy, więce zależy jak kto lubi)
  • Dużu pluginów (w przypadku collectd są to po prostu moduły + perl, java i exec module do podłączania własnych, w przypadku munin każdy plugin to oddzielny program)

W czym munin jest lepszy:

  • Wykresy, collectd wymaga dodatkowego softu do tego, można je zdefiniowac od razu z poziomu plugina, domyslne są też bardzo dobre

W czym collectd jest lepszy

  • Rozdzielczość! domyślne 10s (i dzieki temu że większośc jest w C nie muli to tak jak odpalanie oddzielnego appa dla każdego plugina) pozwala czasami na łapanie małych “pików”, np. dzięki temu dowiedziałem się że przy intensywnym męczeniu hardwarowego RAIDa bazą danych wpada on w “oscylacje” (raz działa szybciej raz wolniej a’la sinusoida, prawdopodobnie cache sie wypełnia i zaczyna go troche opróżniać i wtedy zwalnia)
  • Każdy klient jest też serwerem więc łatwiej jest ustawiać skomplikowane struktury
  • Pluginy wbudowane w collectd mają bardzo szerokie możliwości, np. plugin bazodaniowy może mieć jako dane dowolne zapytanie SQL, więc możesz np. monitorować ilość sprzedanych produktów w ciągu ostatniej godziny, albo oddzielnie ilość insert/delete/update/select dla każdej tabeli), albo plugin CURL potrafi wyciągać dowolne (cokolwiek potrafisz zapisać w regexpie) dane z każdego protokołu obsługiwanego przez libcurl. I te pluginy są napisane w C więc działa to szybko ;]

I to chyba tyle, mam nadzieje że przybliżyłem trochę (nawet jeżeli raczej chaotycznie) ten kawałek softu potencjalnym userom ;]