Pozdravte, obyvatelia Chabrovska! V predvečer začiatku nového zápisu do kurzu
Tento článok je krátkym úvodom do Lokiho. Projekt Loki
Hlavnou inšpiráciou pre Lokiho bol
- používanie štítkov na ukladanie údajov
- spotreba malého množstva zdrojov
Vrátime sa k tomu, ako Prometheus funguje a uvedieme niekoľko príkladov jeho použitia v kontexte Kubernetes.
Pár slov o Prometheovi
Aby ste úplne pochopili, ako Loki funguje, je dôležité urobiť krok späť a zapamätať si niečo o Prometheovi.
Jednou z charakteristických čŕt Prometheus je extrakcia metrík zo zberných miest (prostredníctvom exportérov) a ich ukladanie do TSDB (Time Series Data Base) s pridaním metadát vo forme štítkov.
Prečo to potrebujete
V poslednej dobe sa Prometheus stal de facto štandardom vo svete kontajnerov a Kubernetes: jeho inštalácia je veľmi jednoduchá a klaster Kubernetes prichádza s natívnym koncovým bodom pre Prometheus. Prometheus môže tiež extrahovať metriky z aplikácií nasadených v kontajneri pri ukladaní konkrétnych štítkov. Preto je implementácia monitorovania aplikácií veľmi jednoduchá.
Bohužiaľ, stále neexistuje riešenie na kľúč pre správu protokolov a riešenie si musíte nájsť sami:
- spravovaná cloudová služba na centralizáciu protokolov (AWS, Azure alebo Google)
- monitorovacia služba „monitorovanie ako služba“ (napríklad Datadog)
- vytvorenie vlastnej služby zberu protokolov.
Pre tretiu možnosť som už tradične použil Elasticsearch, napriek tomu, že som s ním nebol vždy spokojný (najmä jeho ťažkosť a zložitosť konfigurácie).
Loki bol navrhnutý tak, aby zjednodušil implementáciu podľa nasledujúcich princípov:
- byť jednoduché začať
- spotrebúvajú málo zdrojov
- pracovať samostatne bez špeciálnej údržby
- slúži ako doplnok k Prometheus na pomoc pri vyšetrovaní chýb
Táto jednoduchosť však ide na úkor niektorých kompromisov. Jedným z nich je neindexovať obsah. Textové vyhľadávanie preto nie je veľmi efektívne ani bohaté a neumožňuje štatistiku obsahu textu. Ale keďže Loki chce byť ekvivalentom grepu a doplnkom Promethea, nie je to nevýhoda.
Vyšetrovanie incidentov
Aby sme lepšie pochopili, prečo Loki nepotrebuje indexovanie, vráťme sa k metóde vyšetrovania incidentov, ktorú vývojári Loki použili:
1 Upozornenie → 2 Ovládací panel → 3 Adhoc dotaz → 4 Agregácia denníka → 5 Distribuované sledovanie → 6 Oprava!
(1 Upozornenie → 2 Dashboard → 3 Adhoc dotaz → 4 Agregácia protokolov → 5 Distribuované sledovanie → 6 Oprava!)
Ide o to, že dostaneme nejaký druh upozornenia (Slack Notification, SMS atď.) a potom:
- pozrite sa na prístrojové dosky Grafana
- pozrite sa na metriky služieb (napríklad v Prometheus)
- pozrite si záznamy denníka (napríklad v Elasticsearch)
- možno sa pozrite na distribuované stopy (Jaeger, Zipkin atď.)
- a konečne vyriešiť pôvodný problém.
Tu v prípade zásobníka Grafana + Prometheus + Elasticsearch + Zipkin budete musieť použiť štyri rôzne nástroje. Ak chcete skrátiť čas, bolo by pekné, keby ste mohli vykonávať všetky tieto kroky pomocou jedného nástroja: Grafana. Stojí za zmienku, že tento prístup k výskumu je implementovaný v Grafane od verzie 6. Takto je možné pristupovať k údajom Prometheus priamo z Grafany.
Obrazovka Prieskumníka rozdelená medzi Promethea a Lokiho
Na tejto obrazovke si môžete prezerať denníky Loki súvisiace s metrikami Prometheus pomocou konceptu rozdelenej obrazovky. Od verzie 6.5 vám Grafana umožňuje analyzovať ID sledovania v záznamoch denníka Loki a sledovať odkazy na vaše obľúbené distribuované nástroje na sledovanie (Jaeger).
Loki test
Najjednoduchší spôsob, ako otestovať Loki lokálne, je použiť docker-compose. Súbor docker-compose sa nachádza v úložisku Loki. Úložisko môžete získať pomocou nasledujúceho príkazu git
:
$ git clone https://github.com/grafana/loki.git
Potom musíte prejsť do výrobného adresára:
$ cd production
Potom môžete získať najnovšiu verziu obrázkov Docker:
$ docker-compose pull
Nakoniec sa Loki stack spustí nasledujúcim príkazom:
$ docker-compose up
Loki architektúra
Tu je malý diagram s architektúrou Loki:
Princípy architektúry Loki
Webový klient spúšťa aplikácie na serveri, Promtail zbiera logy a posiela ich Lokimu, webový klient posiela Lokimu aj metadáta. Loki všetko agreguje a prenáša do Grafany.
Loki je spustený. Ak chcete zobraziť dostupné komponenty, spustite nasledujúci príkaz:
$ docker ps
V prípade čerstvo nainštalovaného Dockera by mal príkaz vrátiť nasledujúci výsledok:
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 nasledujúce komponenty:
- Promtail: agent zodpovedný za centralizáciu protokolov
- Grafana: slávny nástroj palubnej dosky
- Loki: Démon centralizácie údajov
V rámci klasickej infraštruktúry (napríklad založenej na virtuálnych strojoch) musí byť na každom stroji nasadený agent Promtail. Grafana a Loki je možné nainštalovať na rovnaký stroj.
Nasadenie do Kubernetes
Inštalácia komponentov Loki na Kubernetes bude nasledovná:
- daemonSet na nasadenie agenta Promtail na každom z počítačov v klastri serverov
- Nasadenie Loki
- a poslednou je nasadenie Grafana.
Našťastie je Loki k dispozícii ako balík Helm, čo uľahčuje jeho nasadenie.
Inštalácia cez Heml
Už by ste mali mať nainštalovaný Heml. Dá sa stiahnuť z úložiska GitHub projektu. Inštaluje sa rozbalením archívu zodpovedajúceho vašej architektúre a pridaním kormidla $PATH
.
Poznámka: Verzia 3.0.0 Helm bola vydaná nedávno. Keďže došlo k mnohým zmenám, čitateľovi sa odporúča chvíľu počkať, kým ho použije..
Pridanie zdroja pre Helm
Prvým krokom je pridanie úložiska „loki“ pomocou nasledujúceho príkazu:
$ helm add loki https://grafana.github.io/loki/charts
Potom môžete vyhľadať balíčky s názvom „loki“:
$ helm search loki
Výsledok:
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...
Tieto balíčky majú nasledujúce vlastnosti:
- balenia loki/loki zodpovedá iba serveru Loki
- balenia loki/fluent-bit umožňuje nasadiť DaemonSet pomocou fluent-bin na zhromažďovanie protokolov namiesto Promtail
- balenia loki/promtail obsahuje agenta zberu protokolových súborov
- balenia loki/loki-stack, umožňuje okamžite nasadiť Lokiho spolu s Promtailom.
Inštalácia Lokiho
Ak chcete nasadiť Loki do Kubernetes, spustite nasledujúci príkaz v priestore názvov „monitorovanie“:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Ak chcete uložiť na disk, pridajte parameter --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Poznámka: ak chcete súčasne nasadiť aj Grafana, tak pridajte parameter
--set grafana.enabled = true
Keď spustíte tento príkaz, mali by ste dostať nasledujúci 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.
Pri pohľade na stav modulov v mennom priestore „monitorovania“ vidíme, že všetko je nasadené:
$ kubectl -n monitoring get pods -l release=loki
Výsledok:
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šetky moduly bežia. Teraz je čas urobiť nejaké testy!
Pripája sa k Grafane
Ak sa chcete pripojiť k Grafane pod Kubernetes, musíte otvoriť tunel do jej modulu. Nižšie je uvedený príkaz na otvorenie portu 3000 pre grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Ďalším dôležitým bodom je potreba obnoviť heslo správcu Grafana. Heslo je utajené loki-grafana
v poli .data.admin-user
vo formáte base64.
Ak ho chcete obnoviť, musíte spustiť nasledujúci príkaz:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Toto heslo použite v spojení s predvoleným účtom správcu (admin).
Definovanie zdroja údajov Loki v Grafane
Najprv sa uistite, že bol vytvorený zdroj údajov Loki (Konfigurácia/Zdroj údajov).
Tu je príklad:
Príklad nastavenia zdroja údajov pre Lokiho
Kliknutím na „Test“ môžete skontrolovať spojenie s Lokim.
Podávanie žiadostí Lokimu
Teraz prejdite na Grafana do sekcie „Preskúmať“. Pri prijímaní protokolov z kontajnerov Loki pridáva metadáta z Kubernetes. Takto je možné prezerať denníky konkrétneho kontajnera.
Ak chcete napríklad vybrať protokoly kontajnera promtail, môžete použiť nasledujúci dotaz: {container_name = "promtail"}
.
Tu tiež nezabudnite vybrať zdroj údajov Loki.
Tento dotaz vráti aktivitu kontajnera takto:
Výsledok dotazu v Grafane
Pridať na informačný panel
Počnúc verziou Grafana 6.4 môžete informácie denníka umiestniť priamo na palubnú dosku. Potom bude môcť používateľ rýchlo prepínať medzi počtom požiadaviek na svojej stránke a sledovaním aplikácie.
Nižšie je uvedený príklad dashboardu, ktorý implementuje túto interakciu:
Vzorový informačný panel s metrikami Prometheus a protokolmi Loki
Lokiho budúcnosť
Loki som začal používať už v máji/júni s verziou 0.1. Dnes už bola vydaná verzia 1 a dokonca aj 1.1 a 1.2.
Treba priznať, že verzia 0.1 nebola dostatočne stabilná. Ale už 0.3 vykazovala skutočné známky zrelosti a následné verzie (0.4, potom 1.0) tento dojem len posilnili.
Po 1.0.0 už nikto nemôže mať žiadne ospravedlnenie, aby nepoužil tento úžasný nástroj.
Ďalšie vylepšenia by sa nemali týkať Lokiho, ale skôr jeho integrácie s vynikajúcou Grafanou. V skutočnosti má Grafana 6.4 už dobrú integráciu s dashboardmi.
Grafana 6.5, ktorá bola nedávno vydaná, ďalej zlepšuje túto integráciu automatickým rozpoznávaním obsahu protokolu vo formáte JSON.
Video nižšie ukazuje malý príklad tohto mechanizmu:
Pomocou Loki strún vystavených v Grafane
Je možné použiť jedno z polí JSON, napríklad pre:
- odkazy na externý nástroj
- filtrovanie obsahu denníka
Môžete napríklad kliknúť na traceId a prejsť na Zipkin alebo Jaeger.
Ako obvykle, tešíme sa na vaše komentáre a pozývame vás
Zdroj: hab.com