Loki — loggyűjtés a Prometheus megközelítésével

Üdvözlet, Habr lakói! Az új kurzusra való felvétel előtt az új fordítást osztjuk meg veletek. Induljunk. érdekes anyag fordítását készítettük el nektek.

Ez a cikk egy rövid bevezetést nyújt a Lokiba. A Loki projekt támogatva van a Grafana által és célja a naplók központosított gyűjtése (szerverekről vagy konténerekről).

A Loki fő inspirációs forrása Prometheus az ötlet volt, hogy alkalmazza megközelítéseit a naplók kezelésére:

  • címkék (labels) használata az adatok tárolására
  • kis erőforrás-felhasználás

Még visszatérünk a Prometheus működési elveire, és néhány példát hozunk fel annak használatáról a Kubernetes kontextusában.

Néhány szó a Prometheusról

Ahhoz, hogy teljesen megértsük, hogyan működik a Loki, fontos egy lépést hátra lépni, és kicsit visszaemlékezni a Prometheuszra.

A Prometheus egy megkülönböztető jellemzője, hogy metrikákat nyer ki a gyűjtési pontokból (exporterek segítségével), és azokat TSDB-be (Time Series Data Base, időbeli adatsorok adatbázisa) menti, miközben metaadatokat ad hozzá címkék formájában.

Miért van szükség erre

Az utóbbi időben a Prometheus de facto standard lett a konténerek és a Kubernetes világában: telepítése nagyon egyszerű, és a Kubernetes klaszterben alapértelmezés szerint elérhető egy végpont a Prometheus számára. A Prometheus a konténerben futó alkalmazások metrikáit is ki tudja nyerni, miközben bizonyos címkéket megtart. Ezért az alkalmazások monitorozása nagyon egyszerűen megvalósítható.

Sajnos a naplók kezelésére a mai napig nincs „kulcsrakész” megoldás, és neked kell megtalálnod a megoldást:

  • felügyelt felhőszolgáltatás a naplók központosítására (AWS, Azure vagy Google)
  • monitorozási szolgáltatás "monitorozás mint szolgáltatás" (monitoring as a service) (például Datadog)
  • saját naplók gyűjtésére szolgáló szolgáltatás létrehozása.

A harmadik opcióhoz hagyományosan az Elasticsearch-t használtam, annak ellenére, hogy nem mindig voltam elégedett vele (különösen a nehézsége és a beállítás bonyolultsága miatt).

A Lokit azzal a céllal tervezték, hogy egyszerűsítse a megvalósítást az alábbi elvek figyelembevételével:

  • könnyen indítható legyen
  • kevés erőforrást használjon
  • önállóan működjön, különösebb karbantartás nélkül
  • kiegészítő legyen a Prometheus számára a hibák kivizsgálásában

Ez a egyszerűség azonban kompromisszumba kerül. Az egyik az, hogy nem indexeljük a tartalmat. Ezért a szövegyi keresés nem túl hatékony vagy gazdag, és nem teszi lehetővé a szövegtartalom statisztikai elemzését. Mivel a Loki a grep megfelelője és a Prometheus kiegészítése akar lenni, ez nem tekinthető hátránynak.

Incidensnyomozás

Ahhoz, hogy jobban megértsük, miért nincs szükség indexálásra a Loki esetében, térjünk vissza a Loki fejlesztői által használt incidensnyomozási módszerhez:

Loki — loggyűjtés a Prometheus megközelítésével
1 Figyelmeztetés → 2 Műszerfal → 3 Ad-hoc lekérdezés → 4 Naplóagglomálás → 5 Elosztott nyomkövetés → 6 Javítás!
(1 Figyelmeztetés → 2 Műszerfal → 3 Ad-hoc lekérdezés → 4 Naplógyűjtés → 5 Elosztott nyomkövetés → 6 Javítjuk!)

Az ötlet az, hogy kapunk egy figyelmeztetést (Slack értesítés, SMS stb.), és ezt követően:

  • megtekintjük a Grafana műszerfalakat
  • megnézzük a szolgáltatások metrikáit (például a Prometheusban)
  • áttekintjük a naplóbejegyzéseket (például az Elasticsearchban)
  • esetleg ránézünk az elosztott nyomkövetésekre (Jaeger, Zipkin stb.)
  • és végül kijavítjuk az eredeti problémát.

Ebben az esetben a Grafana + Prometheus + Elasticsearch + Zipkin alkalmazásával négy különböző eszközt kell használnunk. Az idő lerövidítése érdekében jó lenne, ha lehetőség lenne ezeket a lépéseket egyetlen eszköz, a Grafana segítségével végrehajtani. Érdemes megjegyezni, hogy ez a kutatási módszer a Grafana 6. verziójától kezdődően implementálva van. Így lehetőség nyílik, hogy közvetlenül a Grafana-ból hívjuk elő a Prometheus adatait.

Loki — loggyűjtés a Prometheus megközelítésével
Az Explorer képernyő el van osztva a Prometheus és a Loki között

Ezen a képernyőn meg lehet nézni a Loki-ban található naplókat, amelyek a Prometheus metrikáihoz kapcsolódnak, a képernyőmegosztás koncepciójának felhasználásával. A 6.5-ös verziótól kezdődően a Grafana képes kezelni a nyomkövetési azonosítót (trace id) a Loki naplóbejegyzéseiben, hogy hivatkozássá váljanak a kedvenc elosztott nyomkövető eszközeidhez (Jaeger).

Loki helyi tesztelése

A Loki helyi tesztelésének legegyszerűbb módja a docker-compose használata. A docker-compose fájl elérhető a Loki tárolójában. A tárolót az alábbi parancs segítségével lehet megszerezni git:

$ git clone https://github.com/grafana/loki.git

Ezután a production mappába kell lépni:

$ cd production

Ezután a legfrissebb Docker képek elérhetők:

$ docker-compose pull

Végül a Loki stack a következő parancsot használva indítható el:

$ docker-compose up

Loki architektúra

Íme egy kis diagram a Loki architektúrájáról:

Loki — loggyűjtés a Prometheus megközelítésével
A Loki architektúra alapelvei

A webkliens alkalmazásokat indít a szerveren, a Promtail összegyűjti a naplókat, és elküldi azokat a Loki-nak, a webkliens emellett metaadatokat is küld a Loki-nak. A Loki mindent aggregál, és átadja a Grafana-nak.
A Loki elindult. A meglévő komponensek megtekintéséhez futtassa a következő parancsot:

$ docker ps

Frissen telepített Docker esetén a parancsnak a következő eredményt kell adnia:

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

A következő komponenseket látjuk:

  • Promtail: ügynök, amely a naplók központosításáért felelős
  • Grafana: ismert eszköz a műszerfalakhoz
  • Loki: az adatok központosításának démonja

A klasszikus infrastruktúra keretein belül (például virtuális gépek alapjain) minden gépen telepíteni kell a Promtail ügynököt. A Grafana és a Loki egy gépen is telepíthető.

Telepítés Kubernetesben

A Loki komponenseinek telepítése Kubernetesben a következőkből fog állni:

  • daemonSet a Promtail ügynök telepítéséhez a klaszter gépein
  • a Loki telepítése (Deployment)
  • és végül a Grafana telepítése.

A szerencsénkre a Loki Helm csomagként elérhető, ami megkönnyíti a telepítését.

Telepítés Helm segítségével

A Helm már legyen telepítve a rendszeren. A projekt GitHub tárházából letölthető. A telepítése az architektúrához megfelelő archívum kibővítésével és a helm hozzáadásával történik $PATH.

Megjegyzés: A 3.0.0 verziójú Helm nemrégiben került kiadásra. Mivel sok változás történt benne, ajánlott várni egy kicsit a használatba vételével kapcsolatban..

Forrás hozzáadása a Helmhez

Az első lépés a "loki" repó hozzáadása a következő paranccsal:

$ helm add loki https://grafana.github.io/loki/charts

Ezt követően keresheti a "loki" nevű csomagokat:

$ helm search loki

Eredmény:

loki/loki       0.17.2 v0.4.0 Loki: mint a Prometheus, de naplókhoz.
loki/loki-stack 0.19.1 v0.4.0 Loki: mint a Prometheus, de naplókhoz.
loki/fluent-bit 0.0.2  v0.0.1 Fluent-bit Loki go plugint használ...
loki/promtail   0.13.1 v0.4.0 Felelős a naplók összegyűjtéséért és...

Ezeknek a csomagoknak a következő funkcióik vannak:

  • csomag loki/loki csak a Loki szervernek felel meg
  • csomag loki/fluent-bit lehetővé teszi a DaemonSet telepítését, a Promtail helyett fluent-bit használatával a naplók összegyűjtésére
  • csomag loki/promtail tartalmazza a naplón alapuló ügynököt
  • csomag loki/loki-stack, lehetővé teszi a Loki és a Promtail együttes telepítését.

Loki telepítése

A Loki Kubernetesben történő telepítéséhez futtassa a következő parancsot a "monitoring" névtérben:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

A lemezre való mentéshez adja hozzá a paramétert --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

Megjegyzés: ha egyszerre szeretné telepíteni a Grafanát, adja hozzá a paramétert --set grafana.enabled = true

A parancs futtatása után a következő kimenetet kell kapnia:

UTOLSÓ TELEPÍTÉS: 2019. nov. 19., kedd 15:56:54
NÉVTER: monitoring
ÁLLAPOT: TELEPÍTVE
ERŐFORRÁSOK:
==> v1/ClusterRole
NÉV KOR
loki-promtail-clusterrole 189nap
…
MEGJEGYZÉSEK:
A Loki stack telepítve lett a klaszterére. A Loki most hozzáadható forrásként a Grafanához.
Lásd <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> további részletekért.

A „monitoring” névtérben a podok állapotának megtekintésével láthatjuk, hogy minden telepítve van:

$ kubectl -n monitoring get pods -l release=loki

Eredmény:

NÉV                   KÉSZ   ÁLLAPOT  ÚJRATÖLTÉS  ÉLETKOR
loki-0                 1/1    Futtatás  0           147m
loki-promtail-9zjvc   1/1    Futtatás  0           3h25m
loki-promtail-f6brf    1/1    Futtatás  0           11h
loki-promtail-hdcj7   1/1    Futtatás  0           3h23m
loki-promtail-jbqhc   1/1    Futtatás  0           11h
loki-promtail-mj642   1/1    Futtatás  0           62m
loki-promtail-nm64g   1/1    Futtatás  0           24m

Minden pod fut. Most itt az idő néhány teszt elvégzésére!

Kapcsolódás a Grafanához

A Kubernetes alatt a Grafanához való kapcsolódáshoz alagutat kell létrehozni a podjához. Az alábbi parancs nyitja meg a 3000-es portot a Grafana podhoz:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Egy másik fontos dolog a Grafana adminisztrátor jelszavának helyreállítása. A jelszó a titkos fájlban tárolódik loki-grafana a mezőben .data.admin-user base64 formátumban.

A helyreállításhoz hajtsa végre az alábbi parancsot:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Használja ezt a jelszót az alapértelmezett adminisztrátori fiókkal (admin).

Forrás definiálása a Loki adatforráshoz a Grafanában

Elsősorban győződjön meg róla, hogy a Loki adatforrás létrejött (Beállítások / Adatforrás).
Ez egy példa:

Loki — loggyűjtés a Prometheus megközelítésével
Példa adatforrás beállítására a Lokihoz

A 'Teszt' gombra kattintva ellenőrizheti a kapcsolatot a Lokival.

Lekérdezések a Lokihoz

Most térjen át a Grafanába az 'Explore' részlegbe. A Loki a konténerekből érkező naplóknál metainformációkat ad hozzá a Kubernetesből. Így lehetővé válik a konkrét konténer naplóinak megtekintése.

Például a promtail konténer naplóinak lekérdezéséhez használhatja a következő lekérdezést: {container_name = "promtail"}.
Ne felejtse el itt is kiválasztani a Loki adatforrást.

Ez a lekérdezés a konténerek aktivitását az alábbi formában adja vissza:

Loki — loggyűjtés a Prometheus megközelítésével
A lekérdezés eredménye a Grafanában

Hozzáadás a műszerfalhoz

A Grafana 6.4-től kezdve a naplóinformációkat közvetlenül a műszerfalra lehet helyezni. Ezt követően a felhasználó gyorsan átkapcsolhat az alkalmazás nyomásaitól a webhelyén tett lekérdezések mennyiségére.

Íme egy példa a műszerfalra, amely ezt az interakciót megvalósítja:

Loki — loggyűjtés a Prometheus megközelítésével
Példa a Prometheus metrikákkal és Loki naplókkal rendelkező műszerfalra

Loki jövője

Májusban/júniusban kezdtem el használni a Loki-t a 0.1-es verzióval. Ma már a 1-es verzió is megjelent, sőt a 1.1 és 1.2 is.

El kell ismerni, hogy a 0.1-es verzió nem volt elég stabil. De a 0.3 már igazi érettségi jeleit mutatta, a következő verziók (0.4, majd 1.0) csak erősítették ezt a benyomást.

Az 1.0.0 után már senkinek sem lehet kifogása, hogy ne használja ezt a csodálatos eszközt.

A további fejlesztések inkább nem a Loki-ra, hanem a kiváló Grafana integrációjára kell, hogy vonatkozzanak. Valójában a Grafana 6.4-ben már jól működő integráció van a műszerfalakkal.

A nemrégiben kiadott Grafana 6.5 még inkább javítja ezt az integrációt, automatikusan felismerve a JSON formátumú naplók tartalmát.

Az alábbi videóban egy kis példát mutatunk be erről a mechanizmusról:

Loki — loggyűjtés a Prometheus megközelítésével
Loki sorok használata a Grafaában

Lehetővé válik az egyik JSON mező használata, például:

  • hivatkozás egy külső eszközre
  • naplótartalom szűrése

Például rákattinthat a traceId-re, hogy átlépjen a Zipkin vagy a Jaeger oldalára.

Hagyományosan várjuk a megjegyzéseiket és meghívunk a nyílt webináriumra, ahol a 2019-es DevOps iparág fejlődéséről fogunk beszélgetni és megvitatjuk a 2020-as fejlődési irányokat.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster