Przekierowanie

Nowa odsłona strony! Zapraszam na devsession.pl

poniedziałek, 25 września 2017

4Developers Gdańsk

18 września uczestniczyłem w konferencji 4Developers w Gdańsku nie tylko jako uczestnik ale również jako prelegent! O tak! Pierwszy wykon na konfie za mną 👏 Więc zdam Wam krótką relację z obu stron.

Dodam tylko, że edycja w Gdańsku jest jedną z wielu organizowanych w różnych miastach w Polsce. Można powiedzieć, że jest "lokalna". W najbliższym czasie będzie edycja w Łodzi

Miejsce, sale czyli infrastruktura


Hotel Focus, w którym się odbywała był wystarczający aby pomieścić zgłoszonych uczestników w salach aczkolwiek w przerwach było tłoczno na holu oraz sali z cateringiem gdzie dodatkowo miejsce zabrały firmy, które się wystawiały. Coś nie do końca grało z klimatyzacją. Na niektórych salach duchota na innych sympatycznie. Typowe problemy i wiadomo każdemu się nie dogodzi w tym temacie. Na plus sala restauracyjna gdzie był lunch. Dobre jedzenie, jeszcze lepsze desery!

Prelekcje


Konferencja była podzielona na cztery ścieżki tematyczne: C++, Architektura, .Net, SoftSkills. Co mnie zaintrygowało to ta ścieżka C++ - dawno nie widziałem konferencji, która by ten temat poruszała. I to jak dla mnie duży plus bo mamy aktualnie masę ścieżek związanych z  JS&Frontend - wiadomo temat ssie!
W związku z tym, że występowałem pod koniec dnia nie przeznaczyłem całego czasu na prelekcje innych ale pojawiłem się na:
ETW  w słuzbie programisty .NET Konrad Kosa
You are using the wrong database! Szymon Warda
Orchestrate your choreography! Daniel Pokusa
Cryptocurrencies, blockchains and things Adam Hartka

Wszystkie prezentację pod kątem merytorycznym oceniam bardzo dobrze. Jeśli chodzi o wykonanie to typowe rzeczy. Konradowi trochę demo się wywaliło (ach ten sprzęt). Szymon jak to ma w zwyczaju szybko leciał z tematem. Daniel Pokusa bardzo dobrze się zaprezentował! Prezentacja Adama Hartka o blockchain trochę nie miała tempa. Temat trudny do przekazania i dodatkowo odbywała się w j. angielskiem, z którym bardzo dobrze sobie radził ale jednak zmęczenie dawało się we znaki.

Czas na mnie

O 15:00 zrobiłem sobie przerwę aby przygotować się do swojej prelekcji, odprężyć się, przewietrzyć. I tak jakbym poszedł na którąś ścieżkę to bym się nie mógł skupić. Bardzo przeżywałem to wystąpienie już na kilka dni przed. Ale jak się okazało z dużej chmury mały deszcz. A to dlatego, że pomimo iż była to Konferencja to jak uczestniczy podzielili się po salach to u mnie chyba pojawiło ok 30 osób. Bardzo fajne, kameralne warunki. Po szybkiej instalacji miałem jeszcze 10 min więc żeby nie stać jak kołek to porozmawiałem trochę z uczestnikami, którzy pojawiali się na sali. Uznałem to za dobrą opcję skrócenia dystansu, poznania trochę siebie. Z samej prelekcji niewiele pamiętam (ach ten stres). Po czasie w jakim skończyłem wiem, że za szybko mówiłem. Ale miałem przygotowany dodatkowy temat, historię - właśnie na taką okoliczność. Niestety otrzymałem tylko jedną opinię lub bardziej bym powiedział kontrargumenty do przedstawionych tematów ale to dobrze. Musi być miejsce na dyskusję, nie musimy się zgadzać ze wszystkim i nawet prelegent ma prawo do błędu!

Minusy

Konferencja od strony technicznej była wspierana przez aplikację Eventory. I pomimo, iż mi jakoś nie przeszkadzało jej używanie to wielu ludzi marudziło, że trzeba się rejestrować itd. Można było w niej ocenić prelekcje ale bardzo mało uczestników skorzystało z tej opcji. Ja pomimo prośby otrzymałem 6 głosów. Szkoda. Można by ten element poprawić, spróbować jakoś bardziej zaangażować uczestników.

Podsumowując

Cieszę się, że otrzymałem możliwość wystąpienia na 4Developers. Moje CFP nie zostało przyjęte w pierwszej turze ale to nie zawsze oznacza, że już nie ma szans (ale o tym kiedy indziej). Jak zawsze takie spotkania są okazją do poznania nowych ludzi. Tak! Nie bójcie się rozmawiać, pytać. Kiedyś sam stałem w rogu pijąc kawkę. Dziś staram się zagadywać dzięki czemu poznałem osobiście Adama Sitnika i wymieniliśmy kilka ciekawych spostrzeżeń na temat naszej branży. Jako prelegent uważam że takie lokalne konferencje (prócz innych meetupów, warsztatów) są fajną opcją do zdobywania doświadczenia. Dzięki 4Developers!





sobota, 2 września 2017

Logowanie wyższego poziomu z Serilog + Elasticsearch + Kibana

Dzisiaj szybki tutorial jak skorzystać z dobrodziejstw strukturalnego logowania (structured logging) określanego również mianem logowania semantycznego (semantic logging).



Na początek mój przypadek użycia z codziennej pracy. Korzystamy z klasycznych, obytych już przez lata bibliotek do logowania jak log4j, log4net czy wbudowane w .NET Trace. Jednak, jak to bywa często z logami, zaglądamy do nich tylko w przypadku gdy coś padnie i potrzebujemy kompletny stack trace czy przejrzeć kroki operacji. Są bo są. Tak na czarną godzinę. Ostatnio pojawiła się potrzeba bardziej szczegółowego monitorowania metod z warstwy repozytorium, które są wywoływane do bazy danych. Ale nie tylko logowanie! Również późniejsza ich analiza. I w tym miejscu wkracza na scenę pierwszy aktor - Serilog!

Serilog

Serilog, który jak wyżej wspomniane "loggery" także posiada możliwość wypluwania danych do plików ma jedną przeważającą cechę! Logowanie strukturalnych danych. Co to oznacza? W skrócie możliwość logowania obiektów wraz z ich właściwościami. Dodatkowo dostępnych jest wiele tzw. sink (z ang. zlew) czegoś w rodzaju miejsc gdzie dane mają trafiać. Ich listę znajdziecie tutaj.
W moim przypadku wykorzystałem Elasticsearch. 

Elasticsearch

Elasticsearch jest silnikiem, który umożliwia gromadzenie danych, ich przetwarzanie oraz analizę. Komunikacja odbywa się poprzez REST a zapytania formułuję się w formacie JSON. Jest to bardzo popularna platforma (szczególnie z wykorzystaniem całego pakietu Elastic Stack) często wykorzystywana w środowiskach rozproszonych.

Kibana

Ostatni etap - przeglądanie, wizualizacja danych. Kibana jest stworzona do pracy z Elasticsearch. Przy naprawdę niewielkiej konfiguracji uzyskałem kilka wiele mówiących wykresów. A to tylko początek. Nawet nie dotarłem do zapytań i bardziej zaawansowanych funkcjonalności.

Quick Start

Poniżej przedstawiam dosyć prostą konfigurację Serilog. Skonfigurowałem dwa wyjścia:
- Plik tekstowy
- Elasticsearch


_logger = new LoggerConfiguration()
                .WriteTo
                .File(@"..\__logs\DBPerf\sdmstruct.log")
                .WriteTo
                .Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
                    {
                        AutoRegisterTemplate = true,
                        MinimumLogEventLevel = Serilog.Events.LogEventLevel.Information
                    })
                .Destructure.ByTransforming<DbMethodCallInfo>(r =>
                {
                    return new
                    {
                        r.RequestId,
                        r.Module,
                        r.FirstCaller,
                        r.LastCaller,
                        r.DBMethod
                    };
                })
                .CreateLogger();

Dodatkowo ważne jest wskazanie w jaki sposób ma zostać zserializowana struktura logowanego obiektu. Generyczna metoda Destructure.ByTransforming<T> umożliwia wskazanie docelowego typu i definicji nowego obiektu, który trafi do loga. Dzięki temu możemy pominąć pewne właściwości, lub zmienić ich format.

Tak utworzoną instancję logera wywołujemy podobnie jak w innych tego typu bibliotekach poprzez metody Info, Warn, Debug itd. z tą różnicą, że tutaj występuje coś w rodzaju szablonu (template).


_dglogger.Information("DB Call {@DbMethodCallInfo}", dbMethodCallInfo);

Bardzo dobrze zostały one opisane na stronie projektu Writing Log Events. W moim przykładzie poprzez symbol @ wskazałem aby przekazany obiekt został z serializowany. Brak jakiegokolwiek operatora lub użycie $ wskazuje na wykorzystanie metody ToString().

Elasticsearch + Kibana

Tutaj nie ma chyba lepszej opcji niż użycie Dockera. Są gotowe, skonfigurowane obrazy które do celów testowych w zupełności wystarczą. Ja użyłem obrazów z bardzo popularnego repozytorium na
GitHub: https://github.com/deviantony/docker-elk. Wskład wchodzi tutaj cały Elastic Stack: Elasticsearch, Logstach oraz Kibana. Logstach nie miałem potrzeby użyć i nie będę go omawiał.
Szyki klon repo i jedziemy z compose ;)


Kotfis@RUMIA D:\Prv\GitHub\docker-elk
$ docker-compose up

Przy odrobienie szczęścia (tak Docker się potrafić wywalić :) ) otrzymuje instancję serwisów do których możemy się dostać przez przeglądarkę:

Elasticsearch http://localhost:9200/
Kibana http://localhost:5601

Żeby upewnić się, że cokolwiek trafia do Elastica polecam wpisać w przeglądarce adres:


http://localhost:9200/_cat/indices?v

W ten sposób otrzymamy listę indeksów wraz z ilością dokumentów:


health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash-2017.09.02 At15lEHnQJ20qQVju9Ledg   5   1     213004            0     39.1mb         39.1mb
yellow open   .kibana             ZOD1LlKvT6Sht8ZtcCyoCQ   1   1          7            1     48.5kb         48.5kb
yellow open   logstash-2017.09.01 nov4uz4oTPmKzVSVtKQnEg   5   1      20514            0      4.8mb          4.8mb

Ale co z Kibaną zapytacie? Temat na osobny post. Ale żeby wasze oczy ucieszył chodź jeden mały wykresik to podaję kilka istotnych informacji! Przy automatycznym zarejestrowanym szablonie (co zostało uczynione w konfiguracji logera) Serilog utworzy indeks w formacie "logstash-*". Posługując się nim w pierwszym kroku dodajemy wizualizację wybierając pośród różnego rodzaju wykresów, tabelach itp. Opcjonalnie możemy także stworzyć Dashboard, do którego można podpiąć kilka reprezentacji danych.

Linki do wszystkich wspomnianych produktów, repozytoriów:
Serilog
Elastic Stack
Docker
Docker-Elk (Elasticsearch, Logstach, Kibana)


Na koniec chciałbym polecić rozszerzenie do Chrome Check my links Umożliwia automatyczne przejście po wszystkich linkach dostępnych na stronie co w moim przypadku spełniło rolę automatu i wygenerowało sporo requestów. Więc w krótkim okresie czasu wygenerowałem sporo ruchu.