Ahoj, Habbrováci! Před zahájením nového cyklu kurzu jsme pro vás připravili překlad zajímavého materiálu.
Tento článek je stručným úvodem do Loki. Projekt Loki a je zaměřen na centralizované shromažďování logů (ze serverů nebo kontejnerů).
Hlavním zdrojem inspirace pro Loki byla myšlenka aplikace jeho přístupů k řízení logů:
- použití štítků (labels) pro ukládání dat
- nízká spotřeba zdrojů
K principům fungování Promethea se ještě vrátíme a uvedeme několik příkladů jeho použití v kontextu Kubernetes.
Několik slov o Prometheovi
Abychom plně pochopili, jak Loki funguje, je důležité udělat krok zpět a vzpomenout si na Prometheuse.
Jedním z charakteristických rysů Promethea je extrakce metrik z bodů sběru (přes exportéry) a jejich ukládání do TSDB (Time Series Data Base, databáze časových řad) s přidáním metadat ve formě štítků.
K čemu to slouží
V poslední době se Prometheus stal de facto standardem ve světě kontejnerů a Kubernetes: jeho instalace je velmi jednoduchá, a v Kubernetes klastru již od počátku existuje koncový bod pro Prometheus. Prometheus také může extrahovat metriky z aplikací nasazených v kontejneru a přitom uchovávat určité štítky. Proto je monitorování aplikací velmi jednoduché na realizaci.
Bohužel stále neexistuje „na klíč“ řešení pro správu logů, takže si musíte najít vlastní řešení:
- spravovaná cloudová služba pro centralizaci logů (AWS, Azure nebo Google)
- monitoringová služba "monitorování jako služba" (monitoring as a service) (například Datadog)
- vytvoření vlastní služby pro shromažďování logů.
Pro třetí variantu jsem obvykle používal Elasticsearch, i když jsem s ním nebyl vždy spokojen (zejména s jeho těžkostí a složitostí nastavení).
Loki byl navržen s cílem usnadnit implementaci podle následujících principů:
- být jednoduchý na začátek
- spotřebovávat málo zdrojů
- fungovat samostatně bez jakékoli speciální údržby
- sloužit jako doplněk k Prometheovi pro pomoc při řešení chyb
Tato jednoduchost však vyžaduje určité kompromisy. Jedním z nich je, že obsah není indexován. To znamená, že hledání v textu není příliš efektivní nebo bohaté a neumožňuje sledovat statistiky textového obsahu. Protože však Loki chce být ekvivalentem grep a doplňkem Promethea, to není nedostatek.
Vyšetřování incidentů
Abychom lépe pochopili, proč Loki nepotřebuje indexaci, vraťme se k metodě vyšetřování incidentů, kterou použili vývojáři Loki:

1 Upozornění → 2 Dashboard → 3 Adhoc dotaz → 4 Agregace logů → 5 Distribuované trasování → 6 Oprava!
(1 Upozornění → 2 Dashboard → 3 Adhoc dotaz → 4 Agregace logů → 5 Distribuované trasování → 6 Oprava!)
Idea spočívá v tom, že dostaneme nějaké upozornění (Slack notifikace, SMS atd.) a poté:
- prohlížíme dashboardy Grafana
- prohlížíme metriky služeb (např. v Promethea)
- prohlížíme záznamy logů (např. v Elasticsearch)
- možná se podíváme na distribuované stopy (Jaeger, Zipkin a další)
- a nakonec opravíme původní problém.
Zde, v případě stacku Grafana + Prometheus + Elasticsearch + Zipkin, bychom museli použít čtyři různé nástroje. Pro zkrácení času by bylo dobré mít možnost vykonávat všechny tyto kroky pomocí jednoho nástroje: Grafana. Je třeba poznamenat, že tento přístup k vyšetřování je implementován v Grafana od verze 6. Tímto způsobem se stává možné dotazovat se na data Promethea přímo z Grafana.

Obrazovka Explorer je rozdělena mezi Prometheus a Loki
Na této obrazovce lze prohlížet logy v Loki, které jsou spojeny s metrikami Promethea, pomocí konceptu rozdělené obrazovky. Od verze 6.5 umožňuje Grafana zpracovávat identifikátor stopy (trace id) v záznamech logů Loki, což usnadňuje přechod na vaše oblíbené nástroje pro distribuované trasování (Jaeger).
Místní test Loki
Nejjednodušší způsob místního testování Loki je použít docker-compose. Soubor docker-compose se nachází v repozitáři Loki. Repozitář můžete získat pomocí následujícího příkazu git:
$ git clone https://github.com/grafana/loki.gitPoté se musíte přejít do adresáře production:
$ cd productionPoté můžete získat poslední verzi image Docker:
$ docker-compose pullNakonec se stack Loki spouští následujícím příkazem:
$ docker-compose upArchitektura Loki
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 do Loki, webový klient také posílá metadata do Loki. Loki vše agreguje a předává do Grafany.
Loki byl spuštěn. Pro zobrazení dostupných komponent proveďte následující příkaz:
$ docker psV případě čerstvě nainstalovaného Dockeru by příkaz měl vrátit následující výsledek:
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_1Vidíme následující komponenty:
- Promtail: agent odpovědný za centralizaci logů
- Grafana: známý nástroj pro dashboardy
- Loki: démon pro centralizaci dat
V rámci klasické infrastruktury (např. na základě virtuálních strojů) musí být na každém stroji nasazen agent Promtail. Grafana a Loki mohou být nainstalovány na jednom stroji.
Nasazení v Kubernetes
Instalace komponent Loki v Kubernetes bude spočívat v následujícím:
- daemonSet pro nasazení agenta Promtail na každém ze strojů v clusteru serverů
- nasazení (Deployment) Loki
- a nakonec - nasazení Grafany.
Naštěstí je Loki k dispozici jako balíček Helm, což usnadňuje jeho nasazení.
Instalace přes Helm
Helm by již měl být nainstalován. Můžete si ho stáhnout z GitHub repozitáře projektu. Instaluje se rozbalením archivu odpovídajícího vaší architektuře a přidáním helm do $PATH.
Poznámka: verze 3.0.0 Helm byla nedávno vydána. Vzhledem k mnoha změnám se doporučuje, aby si čtenáři chvíli počkali, než začnou používat tuto verzi.
Přidání zdroje pro Helm
Prvním krokem bude přidání repozitáře “loki” pomocí následujícího příkazu:
$ helm add loki https://grafana.github.io/loki/chartsPoté můžete vyhledávat balíčky s názvem “loki”:
$ helm search lokiResult:
loki/loki 0.17.2 v0.4.0 Loki: jako Prometheus, ale pro logy.
loki/loki-stack 0.19.1 v0.4.0 Loki: jako Prometheus, ale pro logy.
loki/fluent-bit 0.0.2 v0.0.1 Používá fluent-bit Loki go plugin pro...
loki/promtail 0.13.1 v0.4.0 Odpovědný za sbírání logů a...Tyto balíčky mají následující funkce:
- balíček loki/loki odpovídá pouze serveru Loki
- balíček loki/fluent-bit umožňuje vám nasadit DaemonSet s použitím fluent-bit pro sběr logů místo Promtail
- balíček loki/promtail obsahuje agenta pro sběr logů
- balíček loki/loki-stack, umožňuje okamžité nasazení Loki spolu s Promtail.
Instalace Loki
Abychom nasadili Loki v Kubernetes, spusťte následující příkaz v prostoru jmen “monitoring”:
$ helm upgrade --install loki loki/loki-stack --namespace monitoringPro uložení na disk přidejte parametr --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=truePoznámka: pokud chcete současně nasadit Grafanu, přidejte parametr
--set grafana.enabled = true
Při spuštění tohoto příkazu byste měli obdržet následující výstup:
POSLEDNÍ NASAZENÍ: Út 19. listopadu 2019 15:56:54
NAMESPACE: monitoring
STAV: NASAZENO
ZDROJE:
==> v1/ClusterRole
NÁZEV VĚK
loki-promtail-clusterrole 189d
…
POZNÁMKY:
Loki stack byl nasazen do vaší clusteru. Loki může nyní být přidán jako datový zdroj v Grafaně.
Viz <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> pro více podrobností.Po kontrole stavu podů v prostoru názvů "monitoring" uvidíme, že vše bylo nasazeno:
$ kubectl -n monitoring get pods -l release=lokiResult:
NÁZEV 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 24mVšechny pody jsou spuštěny. Nyní je čas provést několik testů!
Připojení k Grafaně
Aby bylo možné připojit se k Grafaně v Kubernetes, je nutné otevřít tunel k jejímu podu. Níže je uveden příkaz pro otevření portu 3000 pro pod Grafana:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80Dalším důležitým bodem je potřeba obnovit heslo administrátora Grafany. Heslo je uloženo v tajemství loki-grafana v poli .data.admin-user ve formátu base64.
Pro jeho obnovu je nutné provést následující příkaz:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echoPoužijte toto heslo spolu s výchozím administrátorským účtem (admin).
Definice datového zdroje Loki v Grafaně
Nejprve se ujistěte, že je vytvořen datový zdroj Loki (Nastavení / Datový zdroj).
Zde je příklad:

Příklad nastavení datového zdroje pro Loki
Kliknutím na „Test“ můžete ověřit spojení s Lokim.
Provádíme dotazy na Loki
Nyní přejděte do Grafany do sekce „Prozkoumat“. Při přijetí logů od kontejnerů Loki přidává metadata z Kubernetes. Tímto způsobem je možné prohlížet logy konkrétního kontejneru.
Například pro výběr logů kontejneru promtail lze použít následující dotaz: {container_name = "promtail"}.
Zde také nezapomeňte vybrat datový zdroj Loki.
Tento dotaz vrátí aktivitu kontejnerů v následujícím formátu:

Výsledek dotazu v Grafaně
Přidání na dashboard
Od Grafany 6.4 je možné umístit informace o logách přímo na dashboard. Poté bude moci uživatel rychle přepínat mezi počtem dotazů na jeho stránkách a trasami aplikací.
Níže je uveden příklad dashboardu, který toto propojení realizuje:

Ukázka dashboardu s metrikami Prometheus a logy Loki
Budoucnost Loki
Začal jsem používat Loki už v květnu / červnu se verzí 0.1. Dnes byla vydána verze 1, a dokonce i 1.1 a 1.2.
Je třeba uznat, že verze 0.1 nebyla dostatečně stabilní. Ale 0.3 už prokázala skutečné známky zralosti, a následující verze (0.4, poté 1.0) jen posílily tento dojem.
Po 1.0.0 už nikdo nemůže mít výmluvy, aby nepoužíval tento skvělý nástroj.
Další vylepšení by se měla týkat spíše integrace s vynikající Grafana než samotného Loki. Ve skutečnosti v Grafana 6.4 už byla dobrá integrace pro dashboardy.
Grafana 6.5, která byla nedávno vydána, ještě více zlepšuje tuto integraci tím, že automaticky rozpoznává obsah logů ve formátu JSON.
Níže je ve videu uveden malý příklad tohoto mechanismu:

Použití řetězců Loki zobrazených v Grafana
Stává se možné použít jedno z polí JSON, například pro:
- odkaz na externí nástroj
- filtraci obsahu logů
Například můžete kliknout na traceId a přejít na Zipkin nebo Jaeger.
Tradičně čekáme na vaše komentáře a zveme vás na , kde budeme hovořit o tom, jak se vyvíjel DevOps průmysl během roku 2019 a probereme možné směry rozvoje na rok 2020.
Zdroj: habr.com
