Splunk – Wprowadzenie


Splunk_logo
Splunk jako baza – czyli pokaż inżynierowi narzędzie, a on sprawdzi Ci wszystko.

Kilka tygodni temu wspominałem o najważniejszej rzeczy, która rządzi IT. Debugowanie. W tym dokumencie postaram się to myśl rozszerzyć i pokazać, że odpowiednie narzędzie w odpowiednich rękach potrafi czynić cuda.

I. Wstęp

Debugowanie to najważniejsza umiejętność każdego inżyniera, nie ma osoby która się z tym nie zgodzi – dziwne, że piszę to z taką lekkością. Ale jak debugować coś z czym masz kontakt raz na rok, nie znasz produktu ani infrastruktury albo masz pod sobą tyle, że nie wszystkiego jesteś w stanie się nauczyć? Producenci nas nie rozpieszczają, unifikacja nam na pewno nie grozi. No i jeszcze te hasła.
A co jak by użyć kluczy systemowych, odpalić przyjemny dashboard i po nitce do kłębka odnaleźć rozwiązanie zawikłanej awarii?

II. Dla kogo?

Na pewno dla firmy – kolejne lekkie stwierdzenie – Splunk niestety swoje kosztuje, do tego support, który konieczny jesteś prędzej czy później zaciągnąć do wspólnej zabawy. Nie dlatego, że twój inżynier sobie nie poradzi. Tyle osób w firmie będzie chciało używać Splunka, że będziesz potrzebował całego helpdesku. Zaproponował bym jeszcze małym przedsiębiorstwom, które mają coś więcej niż stronę internetową, albo komuś kto jak ja na co dzień boryka się z zawiłościami infrastruktury IT.

III. Główne założenie.

Informację z całego hardware infrastruktury spływają do jednego miejsca, aplikacja korzysta bezpośrednio z plików, nie ma pod tym żadnej bazy danych ale na szczęście jeśli taka twoja wola, wszystko do bazy da się zapisać. Dalej będziemy właściwie podążać za pierwszą linijką dokumentacji o indexowaniu.

How indexing works
Splunk Enterprise can index any type of time-series data (data with timestamps). When Splunk Enterprise indexes data, it breaks it into events, based on the timestamps.

Znaczy to nie mniej nie więcej niż to że dostajemy dwie zmienne data i treść wiadomości. Celem jest dostać się od pojedynczego hosta do zapytania bazy danych.

IV. Wartość dodana

Aplikacja, która nie jest kolejnym zbieraczem śmieci czy wymagającym ciągłego debugowania złodziejem czasu.
Dzięki indeksowaniu wydarzeń na bazie czasu wystąpienia jesteśmy w stanie określić i skorelować cały szereg zdarzeń. Podczas awarii powiązane systemy wyzwalają błędy w tym samym momencie. Umożliwia to łatwe logiczne połączenie łańcucha zdarzeń na podstawie którego od źle wykonanego zapytania do bazy jesteśmy w stanie ustalić, że jedno z połączeń sieciowych na switchu edgowym nie działa prawidłowo. Splunk nie tylko zbiera dane ale wie że komputer z danym IP w pliku /etc/hostname ma napisane TwojaUkochanaMacierz_1.twojadomena.local dzięki temu łatwo rozwiązuje zależności pomiędzy systemami na bazie adresów jak i nazw.
Splunk sam dla siebie staje się DNSem. Co robi DNS? Po wpisaniu adresu ip i nazwy komputera w odpowiednie miejsce inne komputery mogą zapytać Cię czy znasz takiego delikwenta z nazwy bo nie znają jego adresu IP. Ty nie dość że go znasz to jeszcze masz na niego wszystkie papiery.

V. Założenia przed wdrożeniowe

Wdrożenie szczególnie dla administratora, który robi to pierwszy raz niesie ze sobą kilka haczyków, o których trzeba pamiętać.
Pierwszą decyzją do podjęcia jest rozległość naszego systemu data managmentu. Splunk jako aplikacja enterprise-owa pozwala na dużą skalowalność. W zależności od ilości przetwarzanych danych może składać się z jednego hosta pełniącego funkcję indexer-a, storage i search heada lub każda ta funkcja może być obsługiwana przez oddzielny węzeł działający na poczet całego klastra Splunk.
Zgodnie z założeniem dokumentu tworzymy tu narzędzie dla inżyniera, który będzie używał go nijako z doskoku w różnych infrastrukturach. Narzędzie musi być lekkie i jak najmniej skomplikowane, najlepiej jeśli było by pojedynczym plikiem maszyny wirtualnej, który łatwo może zostać ‘zrzucony’ w infrastrukturze klienta – wpływ na to ma oczywiście separacja sieciowa, ciężko taką analizę było by przeprowadzić na swoim zewnętrznym komputerze, który nie rzadko nie dostanie się do wszystkich usług.
Od rozpoczęcia procesu tworzenia tego dokumentu upłynęło trochę czasu a ja mam za sobą kolejne wdrożenie, ewangelizację i przygotowanie zestawu dashboardów aby wszystkim żyło się lepiej. Z tego właśnie powodu, treść oraz założenia muszą zostać nijako zmodyfikowane aby w pełni odpowiadały potędze jaką oferuje splunk.
Splunk sprawdzi się tylko jako platforma centralna, agregująca dane w długim przedziale czasowym.
Tak więc zgodnie z nowymi założeniami będziemy wdrażać pojedynczą instancje Splunk, która będzie korzystała z dowolnej macierzy dyskowej jako swój storage. Znaczy to, że instalacja będzie indexerem oraz search headem.
Indexer to computing power potrzebny na odpowiednie zapisanie danych; Search head natomiast udostępnia swój procesor i pamięć aby wykonywać zapytania.

VI. Wdrożenie

Jako OS wybrałem Centos-a 7. Możliwe jest zainstalowanie instancji Splunka na systemach Windows, Linux oraz MacOS co daje nam pełną dowolność. Ja zdecydowałem się akurat na Linuxa ze względu na mniejsze obciążenie infrastruktury wirtualizacyjnej oraz łatwiejszą obsługę poprzez natywnie dostępne SSH. Sama instalacja nie powinna przysporzyć problemów toteż nie poświęcimy jej zbyt wiele czasu.
Po ściągnięciu paczki należy umieścić gdzieś jej zawartość /opt/splunk jest dobrym i “czystym” wyborem. Następnie wystarczy odpalić

# /opt/splunk/bin/splunk start

W tym momencie Splunk jako aplikacja headless wystartuje na naszym systemie (to samo tyczy się windowsa, należy tylko pamiętać, że w windowsie slash jest w w drugą stronę 😉
Kolejną rzeczą będzie odblokowanie portów. Splunk web interface domyślnie nasłuchuje na porcie 8000 więc ten powinien być otwarty (w niektórych przypadkach należy pamiętać o SELinuxie – diabelskim narzędziu do zatruwania życia).

VII. Dane

Kiedy nasz Splunk jest już gotowy należy jeszcze wskazać mu jak ma gromadzić dane. Tutaj dochodzimy do najważniejszego aspektu i tego po co w ogóle splunk jest. W rozdziale IV wspomniałem, że splunk nie jest kolejnym “zbieraczem śmieci” – żeby tak było to my musimy jasno określić, które dane mają trafiać do naszego indexera.
Najprostszą i za razem najbardziej efektywną metodą jest skorzystanie z Splunk universal Forwarder-a (SUF) , którego należy zainstalować na maszynie, która chcemy monitorować. Następnie w zależności od przeznaczenia maszyny oraz systemu operacyjnego do SUF możemy doinstalować add-on-y, które w łatwy sposób przedstawią odpowiednio opisane dane naszemu Splunkowi.
Zobaczmy to na przykładzie jednego z monitorowanych przeze mnie hostów linuxowych

#/opt/splunk/etc/apps/Splunk_TA_nix/local/inputs.conf - sciezka do add-on-u forwardera na jednym z hostów Unixowych
----------------- monitorowanie za pomocą skryptu ------------------
[script://./bin/cpu.sh] 
disabled = 0
index=unix_app_data
----------------- monitorowanie directory --------------------------
[monitor:///var/log]
disabled = 0
index=unix_app_data

Powyższy kawałek kodu będzie odpowiadał za zbieranie outputu przy pomocy predefiniowanego skryptu – warto wspomnieć, że żeby skrypt działał niezbędne jest zainstalowanie paczki sysstat. W centosie można to zrobić za pomocą

#yum -y install sysstat

oraz za monitorowanie i zbieranie plików z lokalizacji /var/log – agregat gdzie system domyślnie trzyma logi.

Kolejną czynnością ku glorii i chwale jest wskazanie forwarderowi gdzie te wszystkie dane ma przesyłać. Metody są trzy.
1. Na windowsie – jak to na systemie okienkowym bywa – podczas instalacji będziemy mogli wskazać adres oraz port Splunka
2. Ręczna edycja pliku /opt/splunk/etc/system/local/outputs.conf


#/opt/splunk/etc/system/local/outputs.conf
[tcpout]
defaultGroup = default-autolb-group

[tcpout:default-autolb-group]
server = 192.168.56.101:9998

[tcpout-server://192.168.56.101:9998]

3. Sposób najlepszy. Użycie CLI


./splunk add forward-server <host name or ip address>:<listening port>

W moim przypadku
./splunk add forward-server 192.168.56.101:9998

Teraz pewnie zapytacie – co to za port? Skąd on go w ogóle wziął. Przyjdźmy do interfejsu splunka

splunk_settings
splunk_settings2
splunk_settings3

Tak jak widać powyżej. Wchodzimy w ustawienia Forwarding and Receiving i dodajemy port.

Ważne!

Pamiętaj o otwarciu wszystkich portów, które używasz! Na OSie monitorowanym jak i w splunku musisz otworzyć port, którego masz zamiar używać. W moim przypadku są to port 9997 i 9998.

Let the data flow!