Wprowadzenie do ELK w Pythonie.

Natalia Kraszewska
Natalia Kraszewska
May 22, 2025
11 min read
Loading the Elevenlabs Text to Speech AudioNative Player...

Wprowadzenie

Integralną częścią tworzenia oprogramowania jest odbieranie i analizowanie informacji generowanych przez kod. Czasami jest to prosty log, taki jak "Aplikacja uruchomiona" lub "Funkcja rozpoczęta". Możemy jednak również uzyskać informacje o krytycznych błędach, które zatrzymują aplikację. Aby móc generować takie komunikaty, zbierać i analizować je, musisz dołączyć logging do opracowanej aplikacji. Zazwyczaj logi są zapisywane do pliku tekstowego, który można łatwo parsować. Tego rodzaju rozwiązanie sprawdza się najlepiej, gdy aplikacja jest w fazie rozwoju. Aplikacja nie ma użytkowników, więc liczba logów nie jest tak duża, a zapisywanie wszystkich logów w pliku tekstowym pozwala na łatwą analizę.

Sytuacja wygląda zupełnie inaczej, gdy nasza aplikacja dociera do użytkowników. Może ich być tysiące (i tego nam życzę). Wtedy zapisywanie logów w pliku tekstowym nie będzie najlepszym rozwiązaniem. Nasze logi będą zawierać kluczowe informacje, takie jak liczba użytkowników na sekundę, liczba błędów, czas działania funkcji i tak dalej. Na szczęście na ratunek przychodzi zestaw narzędzi ELK, czyli Elasticseach, Logstash i Kibana, który jest jednym z najpopularniejszych systemów zarządzania logami. W tym artykule przedstawię, do czego można użyć ELK, jakie są korzyści z używania tego zestawu narzędzi, z czego się składa i jak zaimplementować ELK w swoim projekcie.

Czym jest ELK?

ELK to zestaw narzędzi, który pozwala przechowywać, analizować i wizualizować logi. Kiedy prawidłowo połączymy ELK z naszą aplikacją, możemy przesyłać strumieniowo logi pochodzące od użytkowników, co daje nam pełną kontrolę nad tym, co aktualnie dzieje się w naszej aplikacji, ilu użytkowników aktualnie z niej korzysta, jak długo czekają na wyniki, a w przypadku zbyt długiego czasu odpowiedzi możemy zwiększyć wymagane zasoby obliczeniowe.

Aby lepiej zrozumieć, jak działa ELK, dowiedzmy się, co dokładnie oznacza skrót ELK:

  • Elasticsearch - to open-source'owy silnik wyszukiwania i analizy, który jest zbudowany na Apache Lucene. Pozwala na szybkie przechowywanie i analizowanie ogromnych ilości danych tekstowych.
  • Logstash - to darmowe oprogramowanie open-source, które zbiera dane z różnych źródeł, przekształca je i wysyła.
  • Kibana - to darmowa aplikacja, która zapewnia wizualizację danych i eksplorację danych. Kibana oferuje funkcje, takie jak różne typy diagramów, które pozwalają na prezentowanie danych w wygodny i łatwo zrozumiały sposób.

Przykładowy projekt w Pythonie z Flask

Przejdźmy do przeglądarki internetowej, aby sprawdzić, czy aplikacja działa poprawnie. Chcesz wiedzieć więcej? Popraw jakość swojego kodu w Pythonie - kliknij tutaj.

Uruchom ELK za pomocą Docker

Moim zdaniem najlepszym podejściem do skonfigurowania systemu ELK jest zrobienie tego za pomocą Docker. Możesz po prostu użyć gotowych obrazów Docker z Dockerhub (https://hub.docker.com) i uruchomić je za pomocą pliku docker-compose. Po pierwsze, musimy przygotować pliki konfiguracyjne. W poniższym przykładzie chcę pokazać podstawową konfigurację ELK, która pozwala nam wysyłać, przechowywać i wizualizować logi. Oczywiście, istnieje o wiele więcej ustawień, które mogłyby ulepszyć system ELK. Więcej informacji można znaleźć w oficjalnej dokumentacji ELK (https://www.elastic.co/guide/index.html).

W pliku elasticsearch.yml ustawiamy nazwę klastra, host sieciowy, typ discovery, typ licencji xpack i na przykład wyłączamy zabezpieczenia xpack.

Plik kibana.yml zawiera nazwę serwera, host serwera i host elasticsearch.

W pliku logstash.yml znajdują się tylko informacje o hoście HTTP.

Plik logstash.conf zawiera informacje o tym, jak logi będą odbierane przez logstash (input) i gdzie logstash będzie je wysyłać (output). W tym przypadku logi będą wysyłane do logstash przez TCP przy użyciu portu 5000, a logstash będzie wysyłać je do elasticsearch przy użyciu hosta elasticsearch:9200.

Gdy wszystkie pliki konfiguracyjne są przygotowane, nadszedł czas, aby napisać docker-compose.yml, który uruchomi wszystkie komponenty systemu ELK. Musimy jednak omówić kilka rzeczy wcześniej:

  • Komunikacja - Elasticsearch, Logstash i Kibana potrzebują sieci do komunikacji ze sobą. Musimy zapewnić sieć mostkową, która działa dokładnie jak most między tymi komponentami.
  • Obrazy i wersja ELK - W tym przykładzie użyjemy wersji 7.14.4 ELK.
  • Potrzebne porty:
    • Elasticsearch używa portu 9200 dla żądań i portu 9300 do komunikacji między węzłami w klastrze.
    • Logstash potrzebuje portu 5000 do komunikacji TCP i portu 9600 do komunikacji przez web API.
    • Aby uzyskać dostęp do Kibana przez stronę internetową, użyjemy portu 5601.

Zbierzmy wszystkie te informacje w pliku docker-compose.

Aby sprawdzić poprawność pliku docker-compose.yml, musimy go uruchomić za pomocą polecenia:

A po kilku sekundach przejdźmy na stronę internetową 127.0.0.1:5601, aby sprawdzić, czy system ELK działa.

Dodaj logging do aplikacji w Pythonie

Jeśli system ELK działa poprawnie, musimy dodać trochę logów do skryptu app.py. Pamiętaj, że chcemy wysyłać te logi do Logstash, więc potrzebny jest AsynchronousLogstashHandler. Spójrzmy na poniższy fragment kodu, aby dowiedzieć się, jak prawidłowo skonfigurować logging.

Gdy logging zostanie dodany, uruchom app.py i wygeneruj trochę logów, odwiedzając strony internetowe 127.0.0.1:5001, 127.0.0.1:5001/hello/Natalia i 127.0.0.1:5001/hello/N.

Zobacz strumień logów w Elastic

Przejdź do menu Home i wybierz Observability -> Logs

Kliknij Settings

W sekcji Indices dodaj log* w polu Log indices.

Kliknij Apply i wróć do panelu Observability -> Logs.

I voilà! Logi z app.py zostały dodane. Od teraz każdy log wygenerowany przez app.py będzie przesyłany strumieniowo do systemu ELK i widoczny w panelu Stream.

Wniosek

Logging pozwala kontrolować stan aplikacji, co jest bardzo ważne, zwłaszcza gdy jest ona używana przez użytkowników. Zestaw narzędzi ELK pozwala na łatwe zbieranie i analizowanie logów. Jak udowodniono w artykule, konfiguracja systemu ELK za pomocą Docker nie jest taka trudna. Mam nadzieję, że zachęciłem Cię do używania systemu ELK w swoich aplikacjach.

Zobacz inne artykuły:

Share this post
DevOps
Natalia Kraszewska
MORE POSTS BY THIS AUTHOR
Natalia Kraszewska

Curious how we can support your business?

TALK TO US