Sdílet prostřednictvím


Protokolování pomocí řešení Elastic Stack

Tip

Tento obsah je výňatek z eBooku, Architekting Cloud Native .NET Applications for Azure, který je k dispozici na webu Docs pro .NET nebo jako soubor PDF zdarma ke stažení, který si můžete přečíst offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

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 Proměnné konfigurace pro Kubernetes

Tento krok nainstaluje Elasticsearch do clusteru a cíl do něj odešle všechny protokoly clusteru.

An example of a Kibana dashboard showing the results of a query against logs ingested from KubernetesObrázek 7–6 Příklad řídicího panelu Kibana zobrazující výsledky dotazu na protokoly, které se ingestují z Kubernetes

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 vylepšováním přehledů z dat místo boje s neposkládaným rozhraním. Podporuje širokou škálu vstupů, takže vaše distribuovaná aplikace zahrnuje více a různé druhy služeb, můžete očekávat, že budete moct dál hlásit data protokolů a metrik 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 slouží ke shromažďování informací protokolu z mnoha 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 serilogu pro zápis informací protokolu 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 využívání protokolů ze serilogu

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í protokolů a v extrémních případech je možné škálovat na více uzlů.

Zprávy protokolu vytvořené tak, aby obsahovaly parametry nebo které byly rozděleny od nich 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. Řídicí panely můžou vytvářet i uživatelé, kteří nejsou technické. 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ý zásobník je možné v 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í infrastruktury jako služby 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í aktuálního stavu pomocí oprav.

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.

Reference