Zabbix – monitorowanie stanu serwera, instalacja i konfiguracja

Oprogramowanie Zabbix służy głównie do monitorowania pracy serwerów, ale można go również wykorzystać do sprawdzania stanu serwisów WWW.

Zabbix Server

Instalację serwera przeprowadzałem w systemie Debian (wersja squeeze). Pobieramy oraz rozpakowujemy źródła ostatniej stabilnej wersji ze strony:

Przechodzimy do katalogu ze źródłami oraz strukturą bazy danych. Następnie ładujemy strukturę bazy oraz dane wymagane do działania serwera:

Przed konfiguracją należy zainstalować kilka paczek ze źródłami. Lista będzie różnić się w zależności od wybranej bazy danych (w moim przypadku MySQL):

Skonfigurujemy Zabbixa tak, aby możliwe było monitorowanie z wykorzystaniem protokołu SNMP (–with-net-snmp), wysyłane powiadomień poprzez protokół XMPP (–with-jabber):

Jeżeli konfiguracja przebiegła pomyślnie, możemy instalować:

Dokumentacja zaleca dodanie usług, ale nie jest to konieczne. Do pliku /etc/services możemy dodać następujące wpisy:

Teraz czas na utworzenie pliku konfiguracyjnego. Przykład dostarczy wraz z aplikacją wystarczy do uruchomienia serwera:

Domyślnie Zabbix instaluje się w /usr/local/sbin, startujemy serwer poleceniem:

Poleceniem ps możemy sprawdzić czy serwer działa:

Jeżeli nie zobaczymy procesu Zabbixa, to należy zajrzeć do pliku z dziennikiem. Domyślnie znajduje się w lokalizacji:

Panel administracyjny jest napisany w PHP. Do jego uruchomienia wystarczy skopiować odpowiednie pliki do katalogu, do którego dostęp posiada serwer WWW np.:

Po uruchomieniu postępujemy zgodnie z instrukcjami w instalatorze. Domyślny login to „admin”, a hasło „zabbix”, które oczywiście należy zmienić po pierwszym logowaniu :)

Posiadamy już serwer, ale jeszcze nic nie jest monitorowane. W górnym panelu wybieramy menu Configuration -> Hosts i klikając w „Not monitored” włączamy monitoring na maszynie, na której zainstalowany jest serwer Zabbix. Po chwili pierwsza ikona z lewej strony zmieni kolor z czerwonego na zielony, co oznacza, że monitorowana maszyna jest włączona i można nawiązać z nią połączenie.

Zabbix Agent

Po instalacji serwera należy skonfigurować serwery, które chcemy monitorować. Do tego celu należy zainstalować agenta na każdym z nich. Przechodzimy do katalogu ze źródłami o wydajemy polecenia:

Ponownie do pliku /etc/services możemy dopisać usługi:

Agenta uruchamiamy poleceniem:

oraz weryfikujemy przy pomocy:

Logi są dostępne w pliku /var/log/zabbix_agent.

Konfiguracja serwera Zabbix

Po instalacji agenta na każdym serwerze, należy je powiązać z serwerem Zabbixa. Uruchamiamy panel i przechodzimy do menu Configuration -> Hosts. Klikamy na Create Host. Następnie podajemy nazwę serwera, adres IP oraz wybieramy domyślny szablon.

Uwagi

Należy zwrócić uwagę na dużą liczbę danych, które są zbierane przez aplikację. Po tygodniu od uruchomienia aplikacji oraz podłączeniu trzech serwerów baza danych zawiera już ponad 2 500 000 rekordów. Domyślny okres przechowywania danych jest ustawiony na jeden rok :) W większości przypadków, gdy chcemy być jedynie powiadamiani o stanie serwera, można zmniejszyć ten okres do kilku tygodni lub dni.

Custom Code Completion for NetBeans

W pracy stosuję system szablonów Open Power Template. Pomimo wielu zalet system posiada jedną wadę, polecenia są stosunkowo długie :) Nie znalazłem sposobu na dodanie własnych poleceń do listy podpowiedzi w NetBeansie, więc napisałem plugin, który to umożliwia.

Plugin pozwala na utworzenie własnej listy podpowiedzi do kodu (np. nazw funkcji, klas itd.) lub po prostu zwykłych fraz w oknie edytora. W chwili obecnej działa jedynie z plikami XML (text/xml), ale łatwo można dodać inne typy edytując plik „layer.xml”.

Przykładowe listy fraz znajdują się w katalogu samples. Plugin wymaga wersji 7.0 lub nowszej środowiska. Źródła oraz skompilowana wersja znajdują się w serwisie GitHub.

Źródła w serwisie GitLab.

Linki

http://platform.netbeans.org/tutorials/nbm-code-completion.html

Usuwanie nieużywanych instalatorów MSI

Po usunięciu aplikacji, które były instalowane instalatorem MSI na dysku może jeszcze zostać wiele niepotrzebnych plików. Możemy je usunąć przy pomocy aplikacji Windows Install CleanUp.

Po pobraniu oraz instalujemy programu, w konsoli wykonujemy polecenie:

Na moim komputerze powyższa operacja zwolniła ok. 2 GB miejsca na partycji systemowej.

JSONP w WCF

Na potrzeby jednego z projektów wykonywałem Web Service przy użyciu technologii Windows Communication Foundation. Usługa musiała zwracać dane w postaci JSNOP tak, aby przeglądarka mogła odwołać się bezpośrednio do niej bez konieczności tworzenia proxy np. w PHP. Niestety, usługi w .NET obsługują tylko dwa format: XML oraz JSON.

Na stronie Microsoftu są dostępne przykłady wykorzystania WCF. Jeden z nich opisuje sposób implementacji JSNOP, ale rozwiązanie wydaje się być bardzo skomplikowane jak na taką prostą funkcjonalność ;)

Z pomocą przyszedł StackOverflow, na którym znalazłem rozwiązanie podobnego problemu. Pytanie dotyczyło wprawdzie zwracania zawartości zdjęcia, ale skoro możemy zwrócić obrazek w postaci binarnej, to z pewnością uda się wysłać do przeglądarki również dane w postaci tekstowej ;)

Rozwiązanie okazało się bardzo proste. Wystarczy ustawić atrybut „BodyStyle” na „Bare”, a typ wartości zwracanej przez metodę na „Stream”. W definicji metody zwracamy obiekt klasy „MemoryStream”, który zawiera dane. Należy również pamiętać o ustawieniu odpowiedniego „ContentType” (w naszym przypadku jest to oczywiście „application/javascript”).

Implementacja:

Zmienna „values” to dowolny, serializowalny obiekt. Parametr „callback” to nazwa metody zdefiniowana w JavaScripcie, która zostanie wywołana po odebraniu żądania.

HipHop for PHP – instalacja w Ubuntu 11.04

Postanowiłem opisać instalację oraz sposób użycia tego kompilatora, gdyż nie znalazłem zbyt wielu materiałów w języku polskim na ten temat.

Na początek uaktualniamy istniejące oprogramowanie:

Pobieramy niezbędne programy oraz biblioteki:

Teraz tworzymy na dysku katalog, do którego będziemy pobierali wszystkie potrzebne do instalacji pliki:

Wszystkie polecenia należy uruchamiać właśnie z tego katalogu. Skrypty będą automatycznie powracać do katalogu, z którego zostały wywołane.

Pobieramy źródła kompilatora (w chwili obecnej zajmują ok. 23 MB):

HipHop for PHP potrzebuje również bibliotek „libevent” oraz „curl”. Nie instalujemy ich jednak z oficjalnych repozytoriów, gdyż obie wymagają poprawek wprowadzonych przez programistów Facebooka.

Kompletne skrypty instalujące obie biblioteki poniżej:

Teraz czas na kompilację kompilatora. Osobom które testują HipHopa na maszynie wirtualnej polecam uprzednie przydzielenie trochę większej ilość pamięci RAM niż zwykle. W przeciwnym wypadku system będzie korzystał z pliku wymiany co znacząco wydłuży cały proces.

HipHop był tworzony dla systemów 64-bitowych. W chwili obecnej wsparcie dla 32-takich systemów jest eksperymentalne i nie wszystko może poprawnie działać.

Po zakończonej kompilacji dodamy alias, aby nie trzeba było za każdym razem wpisywać pełnej ścieżki do programu:

Teraz czas na test. Przed rozpoczęciem pracy z kompilatorem należy zdefiniować trzy zmienne. Zrobiliśmy już to wcześniej, ale podam odpowiednie polecenia jeszcze raz:

W chwili obecnej struktura katalogów wygląda u mnie w taki sposób:

Na dysku tworzymy katalog, a w nim przykładowy skryptem PHP, który wypisze słowa „Hello, World” na ekranie (zakładam, że nadal znajduje się w katalogu „hiphop-php”):

Najprostszym sposobem na uruchomienie kompilatora jest uruchomienie programu hphp:

Drugi sposób uruchamiania kompilatora zachowuje skompilowane programy w katalogach tymczasowych co pozwala na późniejsze uruchomienie aplikacji oraz podgląd źródeł C++:

Na ekranie powinniśmy uzyskać podobny wydruk:

Jak widać skrypt skompilował oraz uruchomił się poprawnie. Ostatnia linia zawiera katalog, w którym znajduje się skompilowany program oraz źródła. Interesujący jest rozmiar pliku wykonywalnego. Plik zajmuje ok. 25 MB, choć jego jedynym zadaniem jest wypisanie tekstu na ekranie ;)

Teraz możemy uruchomić aplikację:

oraz podejrzeć źródła C++:

Program możemy uruchomić również jako serwer. Do tego celu służy polecenie:

Powinniśmy uzyskać potwierdzenie uruchomienia serwera. Teraz wystarczy odwiedzić poniższy adres w przeglądarce, aby uruchomić aplikację:

Tak uruchomionym serwerem możemy sterować przy pomocy wiersza poleceń. Pełną listę poleceń znajdziemy pod adresem (korzystam z polecenia curl, gdyż wydruk jest czytelniejszy w konsoli):

Serwer zatrzymujemy poleceniem „stop”:

Po pełną listę poleceń oraz więcej przykładów użycia odsyłam w chwili obecnej na oficjalne Wiki.

Linki

https://github.com/facebook/hiphop-php/wiki/Building-and-Installing-on-Ubuntu-10.10
https://github.com/facebook/hiphop-php/wiki/Running-HipHop
http://php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/

sendmail – wysyłanie e-maili pod Windows z PHP

Szukałem sposobu na testowanie oraz monitorowanie owej wysyłki podczas pracy pod Windowsem bez konieczności ciągłego kopiowania plików na serwer testowy po każdej wprowadzonej zmianie lub instalacji dodatkowego oprogramowania w postaci serwera SMTP. Mogę oczywiście wysyłać e-maile przy pomocy biblioteki PHPMailer skonfigurowanej tak, aby wysyłka odbywała się przez dowolną skrzynkę SMTP, ale trudno jest monitorować taki proces. Chciałbym dokładnie wiedzieć jakie dane zostały wysłane na serwer oraz dlaczego niektóre wiadomości nie były poprawnie wysyłane.

Rozwiązaniem problemu okazał się sendmail. Program jest dostarczy np. razem z XAMMP-em, ale możemy go również pobrać i zainstalować osobno.

Konfiguracja jest bardzo prosta, wystarczy podać adres serwera SMTP, login oraz hasło do skrzynki pocztowej. Dodatkowo możemy nakazać logowanie komunikatów o błędach oraz wszystkich danych przesyłanych do oraz odbieranych z serwera SMTP do plików, co jest bardzo pomocne podczas testów. Ważne jest dla mnie również to, że taki mechanizm nie wymaga wprowadzania dodatkowego kodu do projektu, a wysyłka może odbywać się przy pomocy funkcji mail.

Przykładowa konfiguracja:

Po restarcie serwera WWW e-maile będą wysyłane z konta, które skonfigurowaliśmy w sendmailu, a treść każdej wiadomości oraz komunikaty błędów będą logowane do odpowiednich plików.

Instalacja LAMP w Ubuntu 11.04

W najnowszych wersjach Ubuntu instalacja stosu LAMP jest bardzo prosta. Wystarczy wydać dwa polecenia w terminalu:

W trakcie instalacji zostaniemy kilkukrotnie poproszeni o hasło do bazy MySQL dla użytkownika „root”.

Po zakończonej instalacji sprawdzamy czy serwer został zainstalowany i uruchomiony poprawnie odwiedzając stronę:

Node.js – pobieranie stron (web scraping)

Zwykle chcąc pobrać stronę WWW i przeskanować je zawartość korzystamy z narzędzia typu Wget lub cURL, a następnie przetwarzamy dane przy pomocy np. wyrażeń XPath. Oczywistą wadą takiego rozwiązania jest brak możliwości pobrania informacji generowanych przez Java Script.

Do parsowania stron generowanych przy pomocy Java Scriptu, można wykorzystać serwer Node.js oraz konsolową przeglądarkę PhantomJS.

Instalacja Node.js

Instalacja PhantomJS

Oprócz narzędzi potrzebnych do kompilacji programu:

możemy zainstalować jeszcze aplikację do kompresji plików binarnych:

Przystępujemy do pobrania oraz kompilacji:

Po kompilacji w katalogu „deploy” znajdziemy archiwum

Instalacja modułu PhantomJS dla Node.js

Teraz musimy dodać ścieżkę do pliku wykonywalnego PhantomJS do zmiennych środowiskowych. W systemie Windows modyfikujemy zmienną PATH, a w systemie Linux możemy utworzyć dowiązanie symboliczne w katalogu /usr/bin.

Poprawnym efektem działania powyższej operacji ma być możliwość wydania polecenia „phantomjs”, które uruchomi aplikację.

Linki

http://nodejs.org/
http://phantomjs.org/
https://github.com/sgentle/phantomjs-node
http://net.tutsplus.com/tutorials/javascript-ajax/web-scraping-with-node-js/ 

Instalacja Oracle XE w Ubuntu

Bazę w wersji Express możemy zainstalować z repozytoriów udostępnianych przez firmę Oracle.

Dodajemy repozytorium do pliku /etc/apt/sources.list o pobieramy klucz.

Instalujemy bazę oraz klienta.

Po instalacji uruchamiamy skrypt do konfiguracji bazy.

Po zakończeniu konfigurowania bazy, wchodzimy pod poniższy adres:

Pojawi się ekran logowania. Wspisujemy login „system” oraz hasło podane podczas instalacji.

Sieć neuronowa – rozpoznawanie znaków

Projekt akademicki. Zadaniem aplikacji jest rozpoznawanie znaków przy pomocy sieci neuronowej. Sieć uczy się metodą wstecznej propagacji błędów.

Źródła w serwisie GitLab.