Wyszukiwanie w witrynie

Jak zainstalować Elasticsearch, Logstash i Kibana (stos ELK) na CentOS/RHEL 7


Jeśli jesteś osobą, która jest lub była odpowiedzialna za sprawdzanie i analizowanie logów systemowych w systemie Linux, wiesz, jakim koszmarem może stać się to zadanie, jeśli jednocześnie monitorowanych jest wiele usług.

W przeszłości zadanie to należało wykonywać głównie ręcznie, a każdy typ dziennika był obsługiwany oddzielnie. Na szczęście połączenie Elasticsearch, Logstash i Kibana po stronie serwera z Filebeat po stronie klienta stronie, sprawia, że to niegdyś trudne zadanie wygląda dziś jak spacer po parku.

Pierwsze trzy komponenty tworzą tak zwany stos ELK, którego głównym celem jest zbieranie logów z wielu serwerów jednocześnie (znane również jako logowanie scentralizowane).

Sugerowana lektura: 4 dobre narzędzia do monitorowania dzienników Open Source i zarządzania nimi w systemie Linux

Wbudowany interfejs sieciowy oparty na języku Java umożliwia szybkie przeglądanie dzienników w celu łatwiejszego porównywania i rozwiązywania problemów. Te dzienniki klientów są wysyłane do serwera centralnego przez firmę Filebeat, którą można określić jako agenta wysyłającego dzienniki.

Zobaczmy, jak wszystkie te elementy pasują do siebie. Nasze środowisko testowe będzie składać się z następujących maszyn:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Należy pamiętać, że podane tutaj wartości RAM nie są ścisłymi wymaganiami wstępnymi, ale wartościami zalecanymi dla pomyślnej implementacji stosu ELK na serwerze centralnym. Mniej RAM na klientach nie zrobi dużej różnicy, jeśli w ogóle.

Instalowanie stosu ELK na serwerze

Zacznijmy od zainstalowania stosu ELK na serwerze wraz z krótkim wyjaśnieniem, co robi każdy komponent:

  1. Elasticsearch przechowuje logi wysyłane przez klientów.
  2. Logstash przetwarza te logi.
  3. Kibana zapewnia interfejs sieciowy, który pomoże nam sprawdzać i analizować logi.

Zainstaluj następujące pakiety na serwerze centralnym. Na początek zainstalujemy Java JDK w wersji 8 (aktualizacja 102, najnowsza w momencie pisania tego tekstu), która jest zależnością składników ELK.

Możesz najpierw sprawdzić na stronie pobierania oprogramowania Java, czy jest dostępna nowsza aktualizacja.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

Czas sprawdzić, czy instalacja zakończyła się pomyślnie:

java -version

Aby zainstalować najnowsze wersje Elasticsearch, Logstash i Kibana, będziemy musieli ręcznie utworzyć repozytoria dla yum następująco:

Włącz repozytorium Elasticsearch

1. Zaimportuj publiczny klucz GPG Elasticsearch do menedżera pakietów RPM:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Wstaw następujące wiersze do pliku konfiguracyjnego repozytorium elasticsearch.repo:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Zainstaluj pakiet Elasticsearch.

yum install elasticsearch

Po zakończeniu instalacji zostaniesz poproszony o uruchomienie i włączenie Elasticsearch:

4. Uruchom i włącz usługę.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Zezwól na ruch przez port TCP 9200 w swojej zaporze sieciowej:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Sprawdź, czy Elasticsearch odpowiada na proste żądania za pośrednictwem HTTP:

curl -X GET http://localhost:9200

Wynik powyższego polecenia powinien być podobny do:

Upewnij się, że wykonałeś powyższe kroki, a następnie kontynuuj Logstash. Ponieważ zarówno Logstash, jak i Kibana mają ten sam klucz Elasticsearch GPG, nie ma potrzeby ponownego importowania go przed instalacją pakietów.

Sugerowana lektura: Zarządzaj dziennikami systemowymi (konfiguruj, obracaj i importuj do bazy danych) w CentOS 7

Włącz repozytorium Logstash

7. Wstaw następujące linie do pliku konfiguracyjnego repozytorium logstash.repo:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Zainstaluj pakiet Logstash:

yum install logstash

9. Dodaj certyfikat SSL na podstawie adresu IP serwera ELK w następującym wierszu pod sekcją [ v3_ca ] w /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Wygeneruj certyfikat z podpisem własnym ważny przez 365 dni:

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Skonfiguruj pliki wejściowe, wyjściowe i filtrujące Logstash:

Input: utwórz plik /etc/logstash/conf.d/input.conf i wstaw do niego następujące linie. Jest to konieczne, aby Logstash mógł „nauczyć się”, jak przetwarzać impulsy pochodzące od klientów. Upewnij się, że ścieżka do certyfikatu i klucza odpowiada właściwym ścieżkom, jak opisano w poprzednim kroku:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Plik wyjściowy (/etc/logstash/conf.d/output.conf):


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Plik filtra (/etc/logstash/conf.d/filter.conf). Dla uproszczenia będziemy rejestrować komunikaty syslog:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Sprawdź pliki konfiguracyjne Logstash.

service logstash configtest

13. Uruchom i włącz logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Skonfiguruj zaporę sieciową, aby umożliwić Logstash pobieranie dzienników od klientów (port TCP 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Włącz repozytorium Kibana

14. Wstaw następujące linie do pliku konfiguracyjnego repozytorium kibana.repo:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Zainstaluj pakiet Kibana:

yum install kibana

16. Uruchom i włącz Kibanę.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Upewnij się, że masz dostęp do interfejsu internetowego Kibany z innego komputera (zezwól na ruch na porcie TCP 5601):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Uruchom Kibana (http://192.168.0.29:5601), aby sprawdzić, czy możesz uzyskać dostęp do interfejsu internetowego:

Wrócimy tutaj po zainstalowaniu i skonfigurowaniu Filebeat na klientach.

Sugerowana lektura: Monitoruj logi serwera w czasie rzeczywistym za pomocą narzędzia „Log.io” w systemie Linux

Zainstaluj Filebeat na serwerach klienckich

Pokażemy Ci, jak to zrobić dla Klienta nr 1 (powtórz tę czynność później dla Klienta nr 2, zmieniając ścieżki, jeśli ma to zastosowanie w Twojej dystrybucji).

1. Skopiuj certyfikat SSL z serwera do klientów:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Zaimportuj publiczny klucz GPG Elasticsearch do menedżera pakietów RPM:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Utwórz repozytorium dla Filebeat (/etc/yum.repos.d/filebeat.repo) w CentOS dystrybucje oparte na:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Skonfiguruj źródło instalacji Filebeat na Debianie i jego pochodnych:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Zainstaluj pakiet Filebeat:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Uruchom i włącz Filebeat:

systemctl start filebeat
systemctl enable filebeat

Skonfiguruj Filebeat

Tutaj mała uwaga. Konfiguracja Filebeat jest przechowywana w pliku YAML, który wymaga ścisłego wcięcia. Zachowaj ostrożność podczas edycji pliku /etc/filebeat/filebeat.yml w następujący sposób:

  1. W sekcji ścieżki wskaż, które pliki dziennika powinny zostać „wysłane” na serwer ELK.
  2. W obszarze poszukiwacze:
input_type: log
document_type: syslog
  1. W obszarze wyjście:

    1. Odkomentuj linię zaczynającą się od logstash.
    2. Wskaż adres IP swojego serwera ELK i port, na którym Logstash nasłuchuje w hostach.
    3. Upewnij się, że ścieżka do certyfikatu wskazuje na rzeczywisty plik utworzony w Kroku I (sekcja Logstash) powyżej.

Powyższe kroki ilustruje poniższy obrazek:

Zapisz zmiany, a następnie uruchom ponownie Filebeat na klientach:

systemctl restart filebeat

Po wykonaniu powyższych kroków na klientach możesz kontynuować.

Testowanie Filebeatu

Aby sprawdzić, czy logi od klientów mogą zostać pomyślnie wysłane i odebrane, uruchom następującą komendę na serwerze ELK:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Wynik powinien być podobny do (zwróć uwagę, jak wiadomości z /var/log/messages i /var/log/secure są odbierane od client1 i klient2):

W przeciwnym razie sprawdź, czy plik konfiguracyjny Filebeat nie zawiera błędów.

journalctl -xe

po próbie ponownego uruchomienia Filebeat wskaże nieprawidłowe linie.

Testuję Kibanę

Po sprawdzeniu, czy logi są wysyłane przez klientów i pomyślnie odbierane na serwerze. Pierwszą rzeczą, którą będziemy musieli zrobić w Kibanie, jest skonfigurowanie wzorca indeksowania i ustawienie go jako domyślnego.

Indeks można opisać jako pełną bazę danych w kontekście relacyjnej bazy danych. Użyjemy filebeat-* (lub możesz użyć bardziej precyzyjnych kryteriów wyszukiwania, jak wyjaśniono w oficjalnej dokumentacji).

Wpisz filebeat-* w Nazwa indeksu lub polu wzorca, a następnie kliknij Utwórz:

Pamiętaj, że później będziesz mógł wprowadzić bardziej szczegółowe kryteria wyszukiwania. Następnie kliknij gwiazdkę wewnątrz zielonego prostokąta, aby skonfigurować ją jako domyślny wzorzec indeksowania:

Na koniec w menu Odkryj znajdziesz kilka pól, które możesz dodać do raportu wizualizacji logu. Po prostu najedź na nie kursorem i kliknij Dodaj:

Wyniki zostaną pokazane w środkowej części ekranu, jak pokazano powyżej. Możesz pobawić się (dodawać i usuwać pola w raporcie dziennika), aby zapoznać się z Kibaną.

Domyślnie Kibana wyświetla rekordy przetworzone w ciągu ostatnich 15 minut (patrz prawy górny róg), ale możesz zmienić to zachowanie, wybierając inny przedział czasowy:

Streszczenie

W tym artykule wyjaśniliśmy, jak skonfigurować stos ELK do zbierania dzienników systemowych wysyłanych przez dwóch klientów, komputery CentOS 7 i Debian 8.

Teraz możesz zapoznać się z oficjalną dokumentacją Elasticsearch i znaleźć więcej szczegółów na temat korzystania z tej konfiguracji w celu efektywniejszego sprawdzania i analizowania logów.

Jeśli masz jakieś pytania, nie wahaj się ich zadać. Oczekujemy na kontakt zwrotny.