Sdílet prostřednictvím


Protokolování pomocí Elastic Stack

Návod

Tento obsah je výňatek z elektronické knihy Architektura cloud-native .NET aplikací pro Azure, která je k dispozici na .NET Docs nebo jako bezplatné PDF ke stažení, které si můžete přečíst offline.

miniatura obálky e-knihy Cloud-nativní aplikace .NET pro Azure.

Existuje mnoho dobrých centralizovaných nástrojů pro protokolování a liší se v nákladech od bezplatných opensourcových nástrojů až po dražší možnosti. V mnoha případech jsou bezplatné nástroje stejně dobré jako nebo lepší než placené nabídky. Jedním z takových nástrojů je kombinace tří opensourcových komponent: Elasticsearch, Logstash a Kibana.

Souhrnně se tyto nástroje označují jako elastický zásobník nebo zásobník ELK.

Elastic Stack

Elastic Stack je výkonná možnost pro shromažďování informací z clusteru Kubernetes. Kubernetes podporuje odesílání protokolů do koncového bodu Elasticsearch a ve většině případů stačí začít tím, že nastavíte proměnné prostředí, jak je znázorněno na obrázku 7–5:

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

Obrázek 7–5 Konfigurační proměnné pro Kubernetes

Tento krok nainstaluje Elasticsearch na cluster a nakonfiguruje odesílání všech protokolů clusteru do něj.

Příklad řídicího panelu Kibana zobrazující výsledky dotazu na protokoly ingestované z Kubernetes Obrázek 7–6. Příklad řídicího panelu Kibana zobrazující výsledky dotazu na protokoly, které se ingestují z Kubernetes

Další informace o konfiguraci naleznete v tématu Konfigurace protokolování (Kibana).

Jaké jsou výhody elastického zásobníku?

Elastic Stack poskytuje centralizované protokolování s nízkými náklady, škálovatelným a cloudovým způsobem. Jeho uživatelské rozhraní zjednodušuje analýzu dat, takže můžete strávit čas získáváním poznatků z dat místo boje s neohrabaným rozhraním. Podporuje širokou škálu vstupů, takže jak vaše distribuovaná aplikace zahrnuje více a různé druhy služeb, můžete očekávat, že budete moci nadále zadávat logová a metrická data do systému. Elastic Stack také podporuje rychlé vyhledávání i napříč velkými datovými sadami, což umožňuje i velkým aplikacím protokolovat podrobná data a mít stále přehled o výkonu.

Logstash

První komponentou je Logstash. Tento nástroj se používá ke shromažďování logování z široké škály různých zdrojů. Logstash může například číst protokoly z disku a také přijímat zprávy z knihoven protokolování, jako je Serilog. Logstash může provádět základní filtrování a rozšíření protokolů při jejich doručení. Pokud vaše protokoly například obsahují IP adresy, může být Logstash nakonfigurovaný tak, aby pro danou zprávu udělal geografické vyhledávání a získalo zemi/oblast nebo dokonce město původu.

Serilog je knihovna protokolování pro jazyky .NET, která umožňuje parametrizované protokolování. Místo generování textové zprávy protokolu, která vkládá pole, jsou parametry oddělené. Tato knihovna umožňuje inteligentnější filtrování a vyhledávání. Ukázková konfigurace serilogu pro zápis do Logstash se zobrazí na obrázku 7-7.

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

Obrázek 7–7 Konfigurace Serilog pro zápis logovacích informací přímo do logstash přes HTTP

Logstash by používal konfiguraci, jako je ta, která je znázorněna na obrázku 7–8.

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index=>"sales-%{+xxxx.ww}"
    }
}

Obrázek 7–8 Konfigurace Logstash pro zpracování logů ze Serilog

Ve scénářích, ve kterých není nutná rozsáhlá manipulace s protokoly, existuje alternativa k Logstash známému jako Beats. Beats je řada nástrojů, které můžou shromažďovat širokou škálu dat z protokolů až po síťové data a informace o dostupnosti. Mnoho aplikací bude používat Jak Logstash, tak Beats.

Jakmile protokoly shromáždí Logstash, potřebuje je někde umístit. Zatímco Logstash podporuje mnoho různých výstupů, jedním z více vzrušujících výstupů je Elasticsearch.

Elasticsearch

Elasticsearch je výkonný vyhledávací modul, který dokáže indexovat protokoly při jejich doručení. Umožňuje rychlé spouštění dotazů na protokoly. Elasticsearch dokáže zvládnout obrovské množství logů a v extrémních případech je možné škálovat na více uzlů.

Zprávy protokolu, které byly vytvořeny tak, aby obsahovaly parametry, nebo které měly parametry oddělené prostřednictvím zpracování Logstash, lze dotazovat přímo, protože Elasticsearch tyto informace zachovává.

Dotaz, který vyhledá prvních 10 stránek navštívených uživatelem jill@example.com, se zobrazí na obrázku 7-9.

"query": {
    "match": {
      "user": "jill@example.com"
    }
  },
  "aggregations": {
    "top_10_pages": {
      "terms": {
        "field": "page",
        "size": 10
      }
    }
  }

Obrázek 7–9 Dotaz Elasticsearch pro vyhledání prvních 10 stránek navštívených uživatelem

Vizualizace informací pomocí webových řídicích panelů Kibana

Poslední součástí zásobníku je Kibana. Tento nástroj slouží k poskytování interaktivních vizualizací na webovém řídicím panelu. Uživatelé, kteří nejsou technicky založení, mohou také vytvářet řídicí panely. Většina dat, která jsou v indexu Elasticsearch, je možné zahrnout do řídicích panelů Kibany. Jednotliví uživatelé můžou mít různé přání řídicího panelu a Kibana umožňuje toto přizpůsobení prostřednictvím povolení řídicích panelů specifických pro uživatele.

Instalace elastického stacku v Azure

Elastický stack lze na Azure nainstalovat mnoha způsoby. Jako vždy je možné zřizovat virtuální počítače a instalovat na ně Elastic Stack přímo. Tuto možnost preferují někteří zkušení uživatelé, protože nabízí nejvyšší stupeň přizpůsobení. Nasazení na infrastrukturu jako službu přináší značné režijní náklady na správu, které navedou tuto cestu k převzetí vlastnictví všech úloh přidružených k infrastruktuře jako služby, jako je zabezpečení počítačů a udržování up-to-date s opravami.

Možnost s menší režií spočívá v použití jednoho z mnoha kontejnerů Dockeru, na kterých už je elastický zásobník nakonfigurovaný. Tyto kontejnery je možné převést do existujícího clusteru Kubernetes a spustit společně s kódem aplikace. Kontejner sebp/elk je dobře zdokumentovaný a otestovaný kontejner Elastic Stack.

Další možností je nedávno oznámená nabídka ELK jako služby.

Odkazy