Monitoring se stal velmi důležitou součástí rostoucích cloudových řešení s rostoucí složitostí distribuovaných systémů. Je nutné pochopit jejich chování. Potřebujeme škálovatelné nástroje, které dokážou shromažďovat data ze všech služeb – a poskytují specialistům jediné rozhraní s analýzou výkonu, demonstrací chyb, dostupností a protokoly.
Tyto stejné nástroje musí být účinné a produktivní. V tomto článku se podíváme na dva oblíbené technologické zásobníky: EFK (Elasticsearch) a PLG (Loki) a analyzujeme jejich architektury a rozdíly.
Zásobník EFK
Možná jste již slyšeli o velmi oblíbeném ELK nebo EFK. Zásobník se skládá z několika samostatných částí: Elasticsearch (ukládání objektů), Logstash nebo FluentD (sběr a agregace protokolů) a Kibana pro vizualizaci.
Typický pracovní postup vypadá takto:
Elastickýsearch — distribuované úložiště objektů s vyhledáváním a analýzou v reálném čase. Vynikající řešení pro polostrukturovaná data, jako jsou protokoly. Informace jsou uloženy jako dokumenty JSON, indexovány v reálném čase a distribuovány mezi uzly clusteru. Používá se invertovaný index obsahující všechna jedinečná slova a související dokumenty pro fulltextové vyhledávání, který je zase založen na vyhledávači Apache Lucene.
FluentD je sběrač dat, který sjednocuje data při jejich shromažďování a spotřebě. Snaží se co nejvíce uspořádat data v JSON. Jeho architektura je rozšiřitelná, je jich více stovky různých rozšíření, podporované komunitou, pro všechny příležitosti.
Kibana je nástroj pro vizualizaci dat pro Elasticsearch s různými doplňkovými funkcemi, jako je analýza časových řad, grafy, strojové učení a další.
Architektura Elasticsearch
Data clusteru Elasticsearch jsou uložena napříč všemi jeho uzly. Cluster se skládá z více uzlů pro zlepšení dostupnosti a odolnosti. Každý uzel může vykonávat všechny role clusteru, ale ve velkých, škálovatelných nasazeních jsou uzlům obvykle přiřazeny jednotlivé úkoly.
Typy uzlů clusteru:
master node - spravuje cluster, potřebujete alespoň tři, jeden je vždy aktivní;
datový uzel - ukládá indexovaná data a provádí s nimi různé úkoly;
ingest uzel - organizuje potrubí pro transformaci dat před indexováním;
koordinační uzel - směrování požadavků, snížení fáze zpracování vyhledávání, koordinace hromadného indexování;
varovný uzel - spouštění oznamovacích úloh;
uzel strojového učení - zpracování úloh strojového učení.
Níže uvedený diagram ukazuje, jak se data uchovávají a replikují mezi uzly, aby se dosáhlo vyšší dostupnosti dat.
Data každé repliky jsou uložena v obráceném indexu, níže uvedený diagram ukazuje, jak se to stane:
Instalace
Podrobnosti lze zobrazit zde, použiji tabulku kormidla:
Nedivte se, že tuto zkratku nenajdete, protože je známější jako Grafana Loki. V každém případě si tento stack získává na oblibě, protože využívá dobře nastavená technická řešení. Možná jste již slyšeli o Grafaně, oblíbeném vizualizačním nástroji. Jeho tvůrci, inspirovaní Prometheem, vyvinuli Loki, horizontálně škálovatelný, vysoce výkonný systém agregace protokolů. Loki indexuje pouze metadata, nikoli samotné časopisy, toto technické řešení umožnilo snadné použití a nákladově efektivní.
Promtail - agent pro odesílání protokolů z operačního systému do clusteru Loki. grafana je vizualizační nástroj založený na datech od Loki.
Loki je postaven na stejných principech jako Prometheus, takže se dobře hodí pro ukládání a analýzu protokolů Kubernetes.
Loki architektura
Loki lze spustit jako jeden proces nebo jako více procesů, což umožňuje horizontální škálování.
Může také fungovat jako monolitická aplikace i jako mikroslužba. Běh jako jediný proces může být užitečný pro místní rozvoj nebo pro jemnozrnné monitorování. Pro průmyslovou implementaci a škálovatelné pracovní zatížení se doporučuje použít možnost mikroslužby. Cesty pro zápis a čtení dat jsou odděleny, takže je lze podle potřeby jemně ladit a škálovat.
Podívejme se na architekturu systému sběru protokolů bez podrobností:
A zde je popis (architektura mikroslužeb):
Složky:
Promtail - agent nainstalovaný na uzlech (jako sada služeb), odstraňuje protokoly z úloh a přistupuje k rozhraní Kubernetes API, aby získal metadata, která budou použita k označení protokolů. Poté odešle protokol do hlavní služby Loki. Pro shodu metadat jsou podporována stejná pravidla označování jako v Prometheus.
Distributor - distributor služeb, pracující jako vyrovnávací paměť. Pro zpracování milionů záznamů balí příchozí data a při příchodu je komprimuje do bloků. Ve stejnou dobu běží více datových jímek, ale protokoly patřící ke stejnému příchozímu datovému toku by měly končit pouze v jednom z nich pro všechny jeho bloky. To je organizováno jako kruh přijímačů a sekvenční hashování. Pro odolnost proti chybám a redundanci se to provádí nkrát (3, pokud není nakonfigurováno).
požírat — servisní přijímač. Datové bloky jsou komprimovány s přidanými protokoly. Jakmile má blok dostatečnou velikost, blok se vyprázdní do databáze. Metadata jdou do indexu a data z bloku protokolu jdou do Chunks (obvykle úložiště objektů). Po resetu přijímač vytvoří nový blok, do kterého budou přidány nové záznamy.
index - databáze, DynamoDB, Cassandra, Google BigTable a další.
Kusy - bloky protokolů v komprimované podobě, obvykle uložené v úložišti objektů, například S3.
Dotazovatel je čtecí cesta, která dělá všechnu špinavou práci. Podívá se na časový rozsah a časové razítko a poté se podívá do indexu a hledá shody. Dále čte bloky dat a filtruje je, aby získal výsledek.
Nyní se podívejme, jak vše funguje.
Instalace
Nejjednodušší způsob instalace na Kubernetes je použít helm. Předpokládáme, že jste jej již nainstalovali a nakonfigurovali (a třetí verze!Cca. překladatel)
Níže je ukázkový řídicí panel zobrazující data z Prometheus pro Etcd a metriky Loki pro protokoly Etcd pod.
A nyní pojďme diskutovat o architektuře obou systémů a také porovnat jejich možnosti mezi sebou.
Porovnání
Dotazovací jazyk
Elasticsearch používá dotazovací jazyk Query DSL a Lucene k poskytování možnosti fulltextového vyhledávání. Jde o zavedený výkonný vyhledávač s širokou podporou operátorů. S ním můžete vyhledávat podle kontextu a třídit podle relevance.
Na druhé straně kruhu je Lokiho LogQL, nástupce PromQL (Prometheus dotazovací jazyk). K filtrování a výběru dat protokolu používá štítky protokolů. Je možné použít některé operátory a aritmetiku, jak je popsáno zde, ale ve schopnostech zaostává za jazykem Elastic.
Vzhledem k tomu, že požadavky v Loki jsou spojeny se štítky, lze je snadno korelovat s metrikami, v důsledku toho je snazší s nimi organizovat provozní monitorování.
Škálovatelnost
Oba zásobníky jsou horizontálně škálovatelné, ale s Loki je to jednodušší, protože má oddělené cesty pro čtení a zápis a má architekturu mikroslužeb. Loki lze přizpůsobit vašim potřebám a lze jej použít pro velmi velké objemy dat protokolu.
Vícenájem
Cluster multi-tenancy je společným tématem pro snížení OPEX, oba zásobníky poskytují multi-tenancy. Existuje několik pro Elasticsearch způsoby oddělení zákazníků: samostatný index na zákazníka, směrování podle zákazníka, jedinečná pole zákazníka, filtry vyhledávání. Loki má podpora jako HTTP hlavička X-Scope-OrgID.
Stát
Loki je velmi nákladově efektivní díky skutečnosti, že neindexuje data, pouze metadata. Tím pádem, úspory skladování a paměť (cache), protože objektové úložiště je levnější než blokové úložiště, které se používá v clusterech Elasticsearch.
Závěr
Zásobník EFK lze použít pro různé účely, poskytuje maximální flexibilitu a bohaté rozhraní Kibana pro analýzy, vizualizaci a dotazy. Lze jej dále vylepšit pomocí možností strojového učení.
Zásobník Loki je užitečný v ekosystému Kubernetes kvůli mechanismu zjišťování metadat. Data pro sledování můžete snadno korelovat na základě časových řad v Grafaně a protokolů.
Pokud jde o náklady a dlouhodobé uchovávání protokolů, Loki je vynikající volbou pro vstup do cloudu.
Na trhu je více alternativ – některé mohou být pro vás lepší. Například GKE má integraci Stackdriver, která poskytuje skvělé řešení monitorování. Do naší analýzy v tomto článku jsme je nezahrnuli.
Článek přeložili a pro Habra připravili zaměstnanci Tréninkové centrum slurmu — intenzivní, video kurzy a firemní školení od praktiků (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)