Standardowo w aplikacjach używa się takich frameworków jak log4net czy nlog w celu logowania kluczowych informacji jak i wyjątków. Bardzo szybko staje się jasne (szczególnie w przypadku micro-serwisów), że analizowanie plików tekstowych z logami jest czasochłonne.
Z tego względu dobrze mieć centralne repozytorium logów i łatwy do niego dostęp. Większość rozwiązań umożliwia dzisiaj indeksowanie oraz łatwe przeszukiwanie danych. Jednym z bardziej znanych produktów jest splunk. Umożliwia agregację logów z różnych źródeł i szybkie wyszukiwanie za pomocą zaawansowanych zapytań. Za pomocą splunk łatwe jest wygenerowanie raportów np. pokazujących jaki typ wyjątku był najczęściej wyrzucany w określonym czasie. Niestety rozwiązanie jest dość drogie.
Exceptionless nie jest alternatywą dla splunk. Jeśli jednak potrzebujemy wyłącznie centralnego repozytorium logów z możliwością wykonania prostych zapytań, wtedy ExceptionLess jest tanią lub nawet darmową alternatywą. ExceptionLess jest open-source, można zatem pobrać kod źródłowy i bez problemu hostować to na wewnętrznym serwerze. Możliwe jest również hostowanie na ich serwerach i wtedy cena zależy od liczby projektów i innych parametrów. Dla testów jednak (jeden projekt), można stworzyć darmowe konto.
Spróbujmy zatem napisać proste demo. Zaczynamy od stworzenia darmowego konta na https://be.exceptionless.io/signup. Następnie tworzymy nowy projekt:
Po wybraniu typu projektu (ASP.NET MVC), dostaniemy informacje, co należy wykonać dalej:
Jak widzimy, musimy zainstalować odpowiedni pakiet za pomocą Install-Package Exceptionless.Mvc. Ze screenu wynika również, że musimy ustawić APIKey reprezentujący projekt, który właśnie stworzyliśmy. Wystarczy ustawić odpowiedni element w Web.config
<exceptionless apiKey="API_KEY_HERE" />
I to naprawdę wszystko! Przyglądając się Web.config zobaczymy również, że dodatkowy moduł został dołączony:
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules> <add name="ExceptionlessModule" type="Exceptionless.Mvc.ExceptionlessModule, Exceptionless.Mvc" /> </modules> </system.webServer>
Dzięki temu, nieobsłużone wyjątki zostaną zapisane automatycznie w bazie ExceptionLess. Spróbujmy zatem wyrzucić jakiś wyjątek w kontrolerze:
public ActionResult Index() { throw new ArgumentNullException("Any message"); return View(); }
Przechodząc teraz do zakładki “Exceptions”, zobaczymy, że wyjątek został przechwycony przez ExceptionLess i zapisany:
Klikając na wpisie, przejdziemy do szczegółów:
U góry aplikacji widzimy również opcje wyszukiwania, która wspiera m.in. znak “*”:
Dane są indeksowane, zatem wyszukiwanie jest szybkie.
W ustawieniach konta, możemy również skonfigurować powiadomienia o np. krytycznych wyjątkach lub otrzymywać codzienny raport. ExceptionLess nie służy wyłącznie do przechowywania wyjątków, ale do logowania jakichkolwiek zdarzeń. Do każdego zdarzenia można dołączać tag, dzięki temu exceptionless jest przydatny w monitorowaniu działania aplikacji. Za pomocą raportów, w łatwy sposób możemy dowiedzieć się, które elementy aplikacji są najczęściej wykorzystywane.
Powiem że na tle Trio Logstash + Elastic Search + Kibana nie prezentuje się jakoś niesamowicie… Chociaż jest łatwiejsze w podstawowej konfiguracji.