Logowanie zdarzeń w Docker przy użyciu platformy Splunk

Docker Splunk

Logowanie zdarzeń w Docker przy użyciu platformy Splunk

12/02/2017
Podziel się

Począwszy od wersji 1.10 Docker posiada funkcjonalność umożliwiającą gromadzenie i przesyłanie zdarzeń logowania z kontenerów i aplikacji w nich uruchomionych do Splunka, bez potrzeby użycia agenta. W wersji 1.13 sterownik logowania do Splunka został przepisany na nowo. Jest teraz szybszy, bardziej wydajny i ma więcej funkcji.

Nowością w Splunk Enterprise 6.3 jest funkcjonalność HTTP Event Collector, ułatwiająca bezagentowe przesyłanie zdarzeń logowania do platformy Splunk.

Korzystając z tych dwóch technologii użytkownicy mogą w krótkim czasie uruchomić kolekcję zdarzeń zarówno z aplikacji uruchomionych wewnątrz kontenerów jak i kontenerów dockera.

W niniejszym artykule przedstawię, jak w podstawowym zakresie skonfigurować logowanie zdarzeń z aplikacji uruchomionych w kontenerach zarządzanych przez Dockera, używając 2 kontenerów. W pierwszym kontenerze uruchomię instancję Splunk Enterprise, która zostanie wykorzystana do gromadzenia, analizy i wizualizacji zdarzeń pochodzących z access loga serwera WWW uruchomionego w osobnym kontenerze.

Artykuł jest przeznaczony dla osób, które mają podstawową wiedzę w zakresie korzystania z Dockera i Splunk. Jeżeli jednak nie znacie jeszcze tych technologii a chcielibyście szybko i bezboleśnie zdobyć podstawową wiedzę o ich użytkowaniu to dobrymi źródłami wiedzy jest strona Getting Started na oficjalnym portalu Splunka oraz Get started with docker.

Przejdźmy teraz do konfiguracji.

1. Uruchomienie kontenera ze Splunk Enterprise

docker run --name "splunk" -d \
-e "SPLUNK_START_ARGS=--accept-license" \
-p 8000:8000 -p 8088:8088 -p 8089:8089 splunk/splunk:6.5.2

Ustawienie zmiennej “SPLUNK_START_ARGS=–accept-license” powoduje, że tekst licencji nie zostanie wyświetlony i użytkownik automatycznie akceptuje jej postanowienia.

Do kontenera zostały zmapowane trzy porty:

  • 8000/TCP – GUI Splunk Enterprise oraz
  • 8088/TCP – port, na który będą wysyłane zdarzenia
  • 8089/TCP – zarządznie

Obraz kontenera splunk/splunk:6.5.2 został opublikowany przez firmę Splunk i zawiera próbną wersję oprogramowania Splunk Enterprise która działa przez 60 dni i pozwala zaindeksować 500MB danych dziennie.

2. Włączenie funkcji kolekcji zdarzeń przy użyciu HTTP Event Collector

Funkcjonalność HTTP Event Collector jest dostępna w Splunk Enterprise od wersi 6.3. Ogólnie rzecz biorąc jest to JSONowe API umożliwiające przesyłanie zdarzeń do Splunka z jakiegokolwiek źródła bez konieczności używania agenta.

Włączenie i podstawowa konfiguracja HTTP Event Collectora jest stosunkowo prosta.

Włączenie HTTP Event Collector

docker exec -it splunk /opt/splunk/bin/splunk \
http-event-collector enable -uri https://linuxpolska.com:8089

Splunk poprosi o podanie użytkownika i hasła. Loguję się na konto admin z domyśmym hasłem: changeme.

Generowanie tokena

docker exec -it splunk /opt/splunk/bin/splunk \
http-event-collector create nginx -uri https://linuxpolska.com:8089

Wykonanie tej komendy spowoduje wygenerowanie tokena o nazwie nginx, którego wartości użyję później, przy konfiguracji wysyłania zdarzeń do splunka. Przykładowy wynik:

http://nginx
token=52370866-EB4D-4902-A1C9-13E4DA38A087
description=
disabled=0
index=default
indexes=
source=
sourcetype=
outputgroup=
use-ack=

W przedstawionym wyżej przykładzie wartość tokena to: 52370866-EB4D-4902-A1C9-13E4DA38A087

Włączenie HTTP Event Collector i definiowanie tokenów jest możliwe również przy użyciu GUI Splunk. Procedura została opisana w rozdziale Set up and use HTTP Event Collector w dokumentacji Splunk Enterprise.

Test konfiguracji HTTP Event Collector
Sprawdzam czy konfiguracja HTTP Event Collector działa.
Wysyłam do Splunka testowe zdarzenie zawierające pole o nazwie test_field i wartości Test message

curl -k -H 'Authorization: Splunk 52370866-EB4D-4902-A1C9-13E4DA38A087' \
https://192.168.66.66:8088/services/collector/event \
-d '{"event": { "test_field": "Test message"}}'

W przypadku powodzenia zostanie zwrócony komunikat:
{„text”:”Success”,”code”:0}

Przedstawiona komenda wysyła zdarzenie do instancji Splunk uruchomionej na hoście o adresie ip: 192.168.66.66. na port 8088/TCP przy użyciu wartości zdefiniowanego wcześniej tokena (52370866-EB4D-4902-A1C9-13E4DA38A087).

Zdarzenia przesyłane do HTTP Event Collectora powinny być odpowiednio sformatowane. Zasady formatowania zdarzeń zostały opisane w dokumencie Format events for HTTP Event Collector.

Na koniec upewniam się czy wysłane zdarzenie zostało zaindeksowane w Splunku. Zdarzenie testowe powinno zostać zapisane w domyślnym indexie. Pole source powinno zostać automatycznie wypełnione przez Splunka, zgodnie ze wzorcem: http:<nazwa_tokena>. Wobec tego mogę wykorzystać pole source aby wyszukać wszystkie zdarzenia, które zostały przesłane przy użyciu tokena nginx:

result nginx

Zapytanie zwróciło wysłane wcześniej zdarzenie testowe. Test zakończył się powodzeniem. Teraz mogę przejść do uruchomienia i konfiguracji kontenera z serwerem webowym.

3. Uruchomienie serwera webowego w kontenerze

docker run --log-driver=splunk --log-opt
splunk-token=52370866-EB4D-4902-A1C9-13E4DA38A087 --log-opt
splunk-url=https://192.168.66.66:8088 --log-opt splunk-insecureskipverify=true -p
"80:80" nginx

Opis opcji dotyczących logowania

  • log-driver=splunk – ustawia sterownik logowania
  • log-opt splunk-token=52370866-EB4D-4902-A1C9-13E4DA38A087 – ustawia token na ten, który zdefiniowałem wcześniej w Splunku.
  • log-opt splunk-url=https://192.168.66.66:8088 – url instancji Splunka z uruchomionym HTTP Event Collectorem
  • log-opt splunk-insecureskipverify=true – weryfikacja certyfikatu ssl zostanie pominięta. Testowa instancjaSplunka, z której korzystam ma certyfikat niezaufany (self-signed)

Opisany zestaw opcji wykorzystanych do uruchomienia przesyłania zdarzeń do Splunka jest zestawem minimalnym. Dockerowy sterownik logowania do Splunka daje dużo więcej możliwości formatowania zdarzeń i uzupełniania ich dodatkowymi informacjami. Wszystkie opcje zostały opisane w instrukcji Splunk logging driver, która jest częścią oficjalnej dokumentacji Dockera.

4. Test przesyłania zdarzeń z serwera WWW

Przy użyciu curl wysyłam dwa testowe zapytania http do serwera WWW. Serwer powinien wygenerować zdarzenia logowania, które zostaną przesłane na do Splunka gdzie zostaną zaindeksowane w domyślnym indeksie z wartością http:nginx w polu source.

curl 192.168.66.66:80
curl 192.168.66.66:80?id=1234

Wyszukuję zdarzenia korzystając z GUI Splunka:

result nginx

Zapytanie zwróciło dwa nowe zdarzenia. Każde z nich zawiera 3 pola:

  • line – zdarzenie logowania wygenerowane przez serwer WWW
  • source – źródło zdarzenia. Uruchomiony w kontenerze serwer WWW wysyła logi access do standardowego wyjścia, dlatego w polu source mamy wartość stdout.
  • tag – domyślna wartość to 12 pierwszych znaków ID kontenera serwera WWW.

Wykonanie wszystkich procedur opisanych w artykule zajęło niespełna 15 minut. W tym czasie, przy użyciu środowiska Docker zostały uruchomione dwa kontenery, jeden z instancją Splunk Enterprise, drugi z serwerem WWW działającym pod kontrolą Nginx oraz zostało skonfigurowane przesyłanie zdarzeń logowania z serwera WWW do Splunka.

Używając sterownika logowania Splunk w dokerze możemy w łatwy i szybki sposób wykorzystać platformę Splunk Enterprise do gromadzenia, wizualizacji i analizy zdarzeń generowanych przez aplikacje uruchomione wewnątrz kontenerów dockerowych.

Zobacz również

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *