Üdvözlet, Habr lakói! Az új kurzusra való felvétel előtt é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 é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 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:

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.

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.gitEzután a production mappába kell lépni:
$ cd productionEzután a legfrissebb Docker képek elérhetők:
$ docker-compose pullVégül a Loki stack a következő parancsot használva indítható el:
$ docker-compose upLoki architektúra
Íme egy kis diagram a Loki architektúrájáról:

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 psFrissen 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_1A 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/chartsEzt követően keresheti a "loki" nevű csomagokat:
$ helm search lokiEredmé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 monitoringA 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=trueMegjegyzé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=lokiEredmé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 24mMinden 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:80Egy 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}}'; echoHaszná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:

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:

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:

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 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 , 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
