Wybierz region
pl
  • PL
  • EN
Wydrukuj

Elastic Search dla .NET Developerów w przykładach dla .NET Core – część 3

W poprzednim odcinku pokazaliśmy jak uruchomić nasze pierwsze rozwiązanie Elastic Search. Do konfiguracji naszego środowiska użyliśmy dockera a w szczególności możliwości jakie daje jego rozszerzenie docker-compose.

W obecnym pokażemy jeden z przykładów użycia a jest nim, zbieranie logów oraz metryk.

Konfiguracja stosu Elastic Search

          Zacznijmy jednak od przypomnienia z jakich elementów składa się nasze środowisko Elastic Search. Skład się ono z następujących elementów:

  • Elastic Search
  • Kibana
  • APM

Omówienie aplikacji

Zapis logów oraz metryk pokażemy na przykładzie prostej aplikacji ASP .NET Core Mvc Razor Pages. Aplikacje wygenerowano ze standardowego szablonu aplikacji dla .NET Core  Cały kod omawianej aplikacji możemy odszukać na serwerze GitHub w następującym repozytorium:

https://github.com/mrozim78/DotnetForElasticSearch

W katalogu Elastic.Kibana.Examples

Aplikacja ta posiada dwie główne strony: Index, Error. Strona Index zwraca stronę główną naszej aplikacji a Error zawiera obsługę błędów. W stronie Error dodano także wygenerowanie wyjątku, który może potem zostać zalogowany.

Konfiguracja logowania

Konfiguracje logowania naszej aplikacji odnajdziemy w pliku Program.cs

w metodzie ConfigureLogging. Do logowania dla naszej aplikacji używamy biblioteki Serilog. Omówmy tą konfiguracje z podaniem znaczenia poszczególnych linii.

Na początku standardowo konfigurujemy odczyt konfiguracji logowania z pliku json w zależności od rodzaju środowiska. Jest to odpowienio albo plik appsettings.json dla środowiska produkcyjnego, albo appsettings. Development.json dla środowiska developerskiego.

Następnie w logowaniu dodajemy poszczególne rozszerzenia dla SeriLog o dodatkowe informacje tak zwane Enrichers a są nimi:

  • identyfikator korelacji z APM by korelować logi z metrykami
  • szczegółowe informacje o wyjątkach
  • nazwa maszyny z której pochodzą o logi

W następnym etapie konfigurujemy jakie informacje i na jakich poziomach logowania będziemy zapisywać. Potem następuje konfiguracja miejsca gdzie będą zapisywane logi tak zwany Sink i w naszym przypadku będzie to ElasticSearch. W metodzie ConfigureElasticSink konfigurujemy jaka będzie postać takiego logu czyli nazwa indexu w Elastic Search.

Nasz index składał się będzie z nazwy naszego assembly, nazwy środowiska oraz daty powstania logu.

Spójrzmy teraz na naszą konfiguracje w pliku json.

W sekcji ElasticConfiguration zawarty jest adres serwera ElasticSearch oraz numer portu.        

Konfiguracja metryk APM

Konfiguracje metryk APM w naszej aplikacji odnajdziemy w pliku Startup.cs. W metodzie Configure jest to w zasadzie jedna linia, która włącza usługę wysyłki do serwera APM.

Podobnie jak w przypadku logowania konfiguracja APM znajduje się w pliku json.

W sekcji ElasticApm zawarty jest adres serwera APM wraz z portem.

W linii z CloudProvider następuje wyłączenie obsługę chmury dla APM, bo uruchamiamy logowanie metryk na środowisku lokalnym.

Parametr TransactionSampleRate oznacza współczynnik interwału zbierania metryk. Gdy zależy nam na wydajności kosztem dokładności metryk powinniśmy ten współczynnik ustawić na wartości poniżej 1.

W celu włączenia logowania oraz APM zgodnie z naszą konfiguracją powinniśmy dodać odpowiednie biblioteki z nuget.

Przeglądanie logów aplikacji oraz APM

W celu analizy przesłanych logów używamy w Kibana funkcji Discover. Na podstawie danych logów możemy budować również tablicę z wykresami używając funkcji Dashboard. Dla logów APM została przygotowana specjalna funkcja, którą odnajdziemy w menu pod nazwą APM.

Zakończmy ten wpis małym podsumowaniem. Konfiguracja logowania oraz logowania metryk APM nie jest trudna. Składa się z kilku prostych kroków, które należy wykonać modyfikując kod aplikacji. W następnym wpisie i ostatnim z serii wpisów o ElasticSearch pokażemy przykład prostej aplikacji wykorzystującej Elastic Search jako prosty silnik do wyszukiwania danych.


Remigiusz Mrozek

Architekt w Pionie Energetyki i Gazownictwa. Na co dzień koduje w C#, prywatnie pasjonat nowych technologii ze szczególnym ukłonem w odmęty Big Data i Machine Learningu. Mistrz Gry, zawsze z najbardziej psychodeliczną fabułą. Można go spotkać na Coperniconie i Pyrkonie!


Wydrukuj