HAProxy w zastosowaniach - monitorowanie

Wed 21 September 2011 by admin

Kolejna część cyklu z HAProxy w tytule, tym razem na tapecie temat monitorowania działania usługi. Słowo HA w nazwie nie zwalnia nas z obowiązku monitorowania aktywności naszych serwerów, jakie zatem mamy metody obserwacji działania HAProxy ?

Strona www ze statusem działania HAProxy (patrz. poprzedni wpis) wydaję się najbardziej naturalna odpowiedzią. Dostęp do statystyk może być odpowiednio zabezpieczony hasłem, dane są ładnie zaprezentowane, jednak do automatycznego monitorowania kiepsko się nadaje. Po głębszym wniknięciu w obszerną dokumentację odnajdujemy opcję: stats socket umożliwia ona dostęp do socketu, dzięki czemu możemy już w sposób interaktywny współpracować z HAProxy. Współpraca może się odbywać na poziomie (stats socket ... level)  użytkownika poprzez pobieranie wybranych statystyk lub na poziomie administratora, gdzie możemy pobierać wszystkie statystyki i co więcej np. wykluczać poszczególne serwery z sekcji backend (patrz. enable/disable server). W celu pobrania danych z socketu możemy wykorzystać bądź to dedykowane narzędzia nc/socat lub sami napisać prosty skrypt np. perl'owy  z modułem IO::Socket::UNIX, trzecim wyjściem jest skorzystanie z konsolowego HATop'a [1].  Podsumowując ,,socket'owy'' tryb pracy z HAProxy daje nam możliwość łatwiejszej automatyzacji procesu monitorowania. Pisanie jednak skryptu, który pobierze na kilka wartości i na ich podstawie wyda nam werdykt czy wszystko jest ok czy też nie można jeszcze bardziej uprościć korzystając z opcji monitor. Umożliwia nam ona podjęcie decyzji na podstawie zdefiniowanych acl'ek czy dana jest usługa działa poprawie. Odbywa się to poprzez wysłanie request'u na ustalony adres i gdy wszystko działa ok dostajemy w odpowiedzi kod HTTP 200 w przeciwnym wypadku 503, prawda, że proste ?  Oto przykład:

acl nbsrv_static nbsrv(dynamic) lt 2
acl nbsrv_static2 nbsrv(static) lt 2
monitor-uri /checkifok
monitor fail if nbsrv_dynamic || nbsrv_static

sprawdzamy czy liczba serwerów w odpowiednich backend'ach jest mniejsza od 2, jeśli tak to dostajemy kod HTTP 503. W tym przypadku skrypt jest bardzo uproszczony wystarczy już tylko curl. Minusem tego rozwiązania jest to, że mamy do dyspozycji tylko jeden adres monitor-uri czyli dostajemy przy bardziej zaawansowanych regułkach acl tylko zgrubną informację, że coś jest nie tak.

[1] http://feurix.org/projects/hatop/


Comments