Zdravím vás, Khabrovite! V očekávání zahájení nového zápisu do kurzu
Tento článek je stručným představením Lokiho. Projekt Loki
Hlavní inspirací pro Lokiho byl
- pomocí štítků k ukládání dat
- nízká spotřeba zdrojů
Vrátíme se k principům Promethea a uvedeme několik příkladů jeho použití v kontextu Kubernetes.
Pár slov o Prometheovi
Abyste plně pochopili, jak Loki funguje, je důležité udělat krok zpět a trochu se vrátit k Prometheovi.
Jednou z charakteristických vlastností Prometheus je extrakce metrik ze sběrných míst (prostřednictvím exportérů) a jejich ukládání do TSDB (databáze časových řad, databáze časových řad) s přidáním metadat ve formě štítků.
Proč je to nutné
V poslední době se Prometheus stal de facto standardem ve světě kontejnerů a Kubernetes: jeho instalace je velmi jednoduchá a cluster Kubernetes má zpočátku koncový bod pro Prometheus. Prometheus může také extrahovat metriky z aplikací nasazených v kontejneru při zachování specifických štítků. Monitorování aplikací je proto velmi snadné implementovat.
Bohužel stále neexistuje řešení na klíč pro správu protokolů a řešení si musíte najít sami:
- spravovaná cloudová služba pro centralizaci protokolů (AWS, Azure nebo Google)
- monitorovací služba „monitorování jako služba“ (například Datadog)
- vytvoření vlastní služby sběru protokolů.
Pro třetí možnost jsem již tradičně použil Elasticsearch, přestože jsem s ním nebyl vždy spokojen (zejména jeho náročnost a složitost nastavení).
Loki byl navržen tak, aby se dal snadno implementovat podle následujících zásad:
- být snadné začít
- spotřebovávat málo zdrojů
- pracovat samostatně bez zvláštní údržby
- slouží jako doplněk k Prometheus, který pomáhá s vyšetřováním chyb
Tato jednoduchost však jde na úkor některých kompromisů. Jedním z nich je neindexovat obsah. Textové vyhledávání proto není příliš efektivní ani bohaté a neumožňuje vést statistiky o obsahu textu. Ale protože Loki chce být ekvivalentem grepu a doplňkem Promethea, není to nevýhoda.
Vyšetřování incidentu
Abychom lépe pochopili, proč Loki nepotřebuje indexování, vraťme se k metodě vyšetřování incidentů, kterou používají vývojáři Loki:
1 Výstraha → 2 Ovládací panel → 3 Adhoc dotaz → 4 Agregace protokolu → 5 Distribuované trasování → 6 Opravit!
(1 Upozornění → 2 Ovládací panel → 3 Adhoc dotaz → 4 Agregace protokolu → 5 Distribuované trasování → 6 Oprava!)
Myšlenka je taková, že dostaneme nějaký druh upozornění (Slack Notification, SMS atd.) a poté:
- podívejte se na řídicí panely Grafana
- podívejte se na metriky služeb (například v Prometheus)
- podívejte se na položky protokolu (například v Elasticsearch)
- možná se podívejte na distribuované stopy (Jaeger, Zipkin atd.)
- a konečně opravit původní problém.
Zde v případě zásobníku Grafana + Prometheus + Elasticsearch + Zipkin budete muset použít čtyři různé nástroje. Abychom ušetřili čas, bylo by hezké mít možnost provádět všechny tyto kroky pomocí jediného nástroje: Grafana. Stojí za zmínku, že tento přístup k výzkumu je v Grafaně implementován od verze 6. Díky tomu je možné přistupovat k datům Prometheus přímo z Grafany.
Obrazovka Průzkumníka rozdělená mezi Promethea a Lokiho
Na této obrazovce můžete zobrazit protokoly v Loki související s metrikami Prometheus pomocí konceptu rozdělené obrazovky. Od verze 6.5 vám Grafana umožňuje analyzovat ID trasování v záznamech protokolu Loki, abyste mohli sledovat odkazy na vaše oblíbené distribuované trasovací nástroje (Jaeger).
Lokiho test
Nejjednodušší způsob, jak otestovat Loki lokálně, je použít docker-compose. Soubor docker-compose se nachází v úložišti Loki. Úložiště můžete získat pomocí následujícího příkazu git
:
$ git clone https://github.com/grafana/loki.git
Poté je třeba přejít do produkčního adresáře:
$ cd production
Poté můžete získat nejnovější obrázky Docker:
$ docker-compose pull
Nakonec se Loki stack spustí následujícím příkazem:
$ docker-compose up
Loki architektura
Zde je malý diagram s architekturou Loki:
Principy architektury Loki
Webový klient spouští aplikace na serveru, Promtail sbírá logy a posílá je Lokimu, webový klient také posílá metadata Lokimu. Loki vše agreguje a předává Grafaně.
Loki běží. Chcete-li zobrazit dostupné součásti, spusťte následující příkaz:
$ docker ps
V případě čerstvě nainstalovaného Dockeru by měl příkaz vrátit následující výstup:
IMAGE PORTS NAMES
grafana/promtail: production_promtail_1
grafana/grafana: m 0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late 80/tcp,0.0.0.0:3100... production_loki_1
Vidíme následující komponenty:
- Promtail: agent zodpovědný za centralizaci protokolů
- Grafana: slavný nástroj palubní desky
- Loki: démon centralizace dat
V rámci klasické infrastruktury (například založené na virtuálních strojích) musí být na každém stroji nasazen agent Promtail. Grafana a Loki lze nainstalovat na stejný stroj.
Nasazení do Kubernetes
Instalace komponent Loki v Kubernetes bude následující:
- daemonSet pro nasazení agenta Promtail na každý z počítačů v clusteru serverů
- Lokiho nasazení
- a poslední je nasazení Grafany.
Naštěstí je Loki dostupný jako balíček Helm, takže jeho nasazení je snadné.
Instalace přes Heml
Heml byste již měli mít nainstalovaný. Lze jej stáhnout z úložiště GitHub projektu. Instaluje se rozbalením archivu vhodného pro vaši architekturu a přidáním kormidla $PATH
.
Poznámka: verze 3.0.0 Helmu byla vydána nedávno. Vzhledem k tomu, že v něm došlo k mnoha změnám, čtenáři se doporučuje chvíli počkat, než jej začne používat..
Přidání zdroje pro Helm
Prvním krokem je přidání úložiště „loki“ pomocí následujícího příkazu:
$ helm add loki https://grafana.github.io/loki/charts
Poté můžete vyhledat balíčky s názvem „loki“:
$ helm search loki
Výsledek:
loki/loki 0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2 v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail 0.13.1 v0.4.0 Responsible for gathering logs and...
Tyto balíčky mají následující vlastnosti:
- пакет loki/loki odpovídá pouze serveru Loki
- пакет loki/fluent-bit umožňuje nasadit DaemonSet pomocí fluent-bin ke shromažďování protokolů namísto Promtail
- пакет loki/promtail obsahuje agenta pro shromažďování protokolů
- пакет loki/loki-stack, umožňuje okamžitě nasadit Lokiho společně s Promtailem.
Instalace Lokiho
Chcete-li nasadit Loki do Kubernetes, spusťte následující příkaz v oboru názvů „monitorování“:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Chcete-li uložit na disk, přidejte možnost --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Poznámka: pokud chcete zároveň nasadit Grafanu, tak přidejte parametr
--set grafana.enabled = true
Když spustíte tento příkaz, měli byste získat následující výstup:
LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.
Při pohledu na stav modulů ve jmenném prostoru „monitorování“ vidíme, že vše je nasazeno:
$ kubectl -n monitoring get pods -l release=loki
Výsledek:
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 147m
loki-promtail-9zjvc 1/1 Running 0 3h25m
loki-promtail-f6brf 1/1 Running 0 11h
loki-promtail-hdcj7 1/1 Running 0 3h23m
loki-promtail-jbqhc 1/1 Running 0 11h
loki-promtail-mj642 1/1 Running 0 62m
loki-promtail-nm64g 1/1 Running 0 24m
Všechny moduly běží. Nyní je čas udělat nějaké testy!
Připojení ke Grafaně
Abyste se mohli připojit ke Grafaně pod Kubernetes, musíte otevřít tunel do jeho modulu. Následuje příkaz k otevření portu 3000 pro grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Dalším důležitým bodem je potřeba obnovit heslo správce Grafana. Heslo je uchováváno v tajnosti loki-grafana
v oboru .data.admin-user
ve formátu base64.
Chcete-li jej obnovit, musíte spustit následující příkaz:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Toto heslo použijte ve spojení s výchozím účtem správce (admin).
Definice zdroje dat Loki v Grafaně
Nejprve se ujistěte, že je vytvořen zdroj dat Loki (Konfigurace / Zdroj dat).
Zde je příklad:
Příklad nastavení zdroje dat pro Lokiho
Kliknutím na „Test“ můžete otestovat spojení s Lokim.
Vyřizování žádostí Lokimu
Nyní přejděte do Grafany a přejděte do sekce „Prozkoumat“. Při přijímání protokolů z kontejnerů Loki přidává metadata z Kubernetes. Je tak možné prohlížet protokoly konkrétního kontejneru.
Chcete-li například vybrat protokoly kontejneru promtail, můžete použít následující dotaz: {container_name = "promtail"}
.
Nezapomeňte zde také vybrat zdroj dat Loki.
Tento dotaz vrátí aktivitu kontejneru takto:
Výsledek dotazu v Grafana
Přidávání na palubní desku
Počínaje Grafanou 6.4 je možné umístit informace protokolu přímo na řídicí panel. Poté bude uživatel moci rychle přepínat mezi počtem požadavků na jeho webu a trasováním aplikací.
Níže je uveden příklad řídicího panelu, který implementuje tuto interakci:
Ukázkový řídicí panel s metrikami Prometheus a protokoly Loki
Budoucnost Lokiho
Loki jsem začal používat již v květnu/červnu s verzí 0.1. Dnes již vyšla verze 1 a dokonce 1.1 a 1.2.
Nutno přiznat, že verze 0.1 nebyla dostatečně stabilní. Ale 0.3 již vykazovala skutečné známky vyspělosti a další verze (0.4, poté 1.0) tento dojem jen posilovaly.
Po 1.0.0 už nikdo nemůže mít výmluvu, proč tento úžasný nástroj nepoužívat.
Další vylepšení by se nemělo týkat Lokiho, ale spíše jeho integrace s vynikající Grafanou. Ve skutečnosti má Grafana 6.4 již dobrou integraci s řídicími panely.
Grafana 6.5, která byla vydána nedávno, tuto integraci dále vylepšuje tím, že automaticky rozpoznává obsah protokolů ve formátu JSON.
Níže uvedené video ukazuje malý příklad tohoto mechanismu:
Použití řetězců Loki vykreslených v Grafaně
Je možné použít jedno z polí JSON, například k:
- odkazy na externí nástroj
- filtrování obsahu protokolu
Můžete například kliknout na traceId a přejít na Zipkin nebo Jaeger.
Jako obvykle se těšíme na vaše komentáře a zveme vás
Zdroj: www.habr.com