Üdvözlet Habrovszk lakosai! A tanfolyamra való új beiratkozás kezdetének előestéjén
Ez a cikk a Loki rövid bemutatása. Loki projekt
Loki fő inspirációja az volt
- címkék használata az adatok tárolására
- kevés erőforrás felhasználása
Visszatérünk a Prometheus működésére, és néhány példát adunk a Kubernetes kontextusában való használatára.
Néhány szó Prométheuszról
A Loki működésének teljes megértéséhez fontos, hogy tegyünk egy lépést hátra, és emlékezzünk egy kicsit a Prometheusra.
A Prometheus egyik megkülönböztető jellemzője a mérőszámok gyűjtése a gyűjtőhelyekről (exportőrökön keresztül) és tárolása a TSDB-ben (Time Series Data Base), metaadatok hozzáadásával címkék formájában.
Miért szükséges
A közelmúltban a Prometheus de facto szabvány lett a konténerek és a Kubernetes világában: telepítése nagyon egyszerű, és a Kubernetes-fürthöz natív Prometheus végpont tartozik. A Prometheus mérőszámokat is kinyerhet egy tárolóban telepített alkalmazásokból, miközben meghatározott címkéket tárol. Ezért az alkalmazásfigyelés nagyon könnyen megvalósítható.
Sajnos még mindig nincs kulcsrakész megoldás a naplókezelésre, és magának kell megoldást találnia:
- felügyelt felhőszolgáltatás a naplók központosításához (AWS, Azure vagy Google)
- monitoring szolgáltatás „monitoring mint szolgáltatás” (például Datadog)
- saját naplógyűjtési szolgáltatás létrehozása.
A harmadik lehetőséghez hagyományosan az Elasticsearch-et használtam, annak ellenére, hogy nem voltam vele mindig elégedett (főleg a nehézkessége és a konfiguráció bonyolultsága).
A Lokit a megvalósítás egyszerűsítésére tervezték, a következő elvek szerint:
- legyen egyszerű kezdeni
- kevés erőforrást fogyaszt
- önállóan, különösebb karbantartás nélkül dolgozhat
- a Prometheus kiegészítéseként szolgál a hibavizsgálatok segítésére
Ez az egyszerűség azonban bizonyos kompromisszumok rovására megy. Az egyik az, hogy ne indexeljük a tartalmat. Ezért a szöveges keresés nem túl hatékony vagy gazdag, és nem teszi lehetővé a szöveg tartalmára vonatkozó statisztikák készítését. De mivel Loki a grep megfelelője és Prometheus kiegészítője akar lenni, ez nem hátrány.
Esemény kivizsgálása
Hogy jobban megértsük, miért nincs szüksége a Lokinak az indexelésre, térjünk vissza a Loki fejlesztői által használt incidensvizsgálati módszerhez:
1 Figyelmeztetés → 2 Irányítópult → 3 Adhoc lekérdezés → 4 Naplóösszesítés → 5 Elosztott nyomkövetés → 6 Javítás!
(1 Figyelmeztetés → 2 Irányítópult → 3 Adhoc lekérdezés → 4 Naplóösszesítés → 5 Elosztott nyomkövetés → 6 Javítás!)
Az ötlet az, hogy kapunk valamilyen riasztást (Slack Notification, SMS stb.) és utána:
- nézd meg a Grafana műszerfalait
- nézze meg a szolgáltatási mutatókat (például a Prometheusban)
- nézze meg a naplóbejegyzéseket (például az Elasticsearch-ben)
- esetleg nézd meg az elosztott nyomokat (Jaeger, Zipkin stb.)
- és végül az eredeti probléma megoldása.
Itt a Grafana + Prometheus + Elasticsearch + Zipkin verem esetében négy különböző eszközt kell használnia. Az idő csökkentése érdekében jó lenne ezeket a lépéseket egyetlen eszközzel végrehajtani: a Grafana segítségével. Érdemes megjegyezni, hogy ezt a kutatási megközelítést a Grafana 6. verziója óta alkalmazzák. Így lehetővé válik a Prometheus-adatok közvetlen elérése a Grafana-ból.
Az Explorer képernyő megosztott Prometheus és Loki között
Ezen a képernyőn megtekintheti a Prometheus mérőszámaihoz kapcsolódó Loki naplókat az osztott képernyős koncepció használatával. A 6.5-ös verzió óta a Grafana lehetővé teszi a nyomkövetési azonosító elemzését a Loki naplóbejegyzéseiben, hogy kövesse a kedvenc elosztott nyomkövető eszközeire (Jaeger) mutató hivatkozásokat.
Helyi Loki teszt
A Loki helyi tesztelésének legegyszerűbb módja a docker-compose használata. A docker-compose fájl a Loki-lerakatban található. A tárat a következő paranccsal érheti el git
:
$ git clone https://github.com/grafana/loki.git
Ezután be kell lépnie a termelési könyvtárba:
$ cd production
Ezt követően letöltheti a Docker képek legújabb verzióját:
$ docker-compose pull
Végül a Loki verem elindul a következő paranccsal:
$ docker-compose up
Loki építészet
Itt van egy kis diagram a Loki architektúrával:
Loki építészeti alapelvei
A webkliens alkalmazásokat futtat a szerveren, a Promtail naplókat gyűjt és elküldi a Lokinak, a webkliens metaadatokat is küld a Lokinak. A Loki mindent összesít, és továbbítja a Grafanának.
Elindul a Loki. Az elérhető összetevők megtekintéséhez futtassa a következő parancsot:
$ docker ps
Frissen telepített Docker esetén a parancsnak a következő eredményt kell visszaadnia:
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ő összetevőket látjuk:
- Promtail: a naplók központosításáért felelős ügynök
- Grafana: egy híres műszerfali eszköz
- Loki: Data Centralization Daemon
A klasszikus infrastruktúra részeként (például virtuális gépeken alapuló) a Promtail ügynököt minden gépen telepíteni kell. A Grafana és a Loki telepíthető ugyanarra a gépre.
Telepítés a Kubernetesben
A Loki-összetevők Kubernetesre történő telepítése a következőképpen történik:
- daemonSet a Promtail ügynök telepítéséhez a kiszolgálófürt minden egyes gépén
- Bevetési Loki
- az utolsó pedig a Grafana bevetése.
Szerencsére a Loki Helm csomagként is elérhető, így könnyen telepíthető.
Telepítés Heml-en keresztül
A Heml-nek már telepítve kell lennie. Letölthető a projekt GitHub tárházából. Úgy telepíthető, hogy kicsomagolja az architektúrájának megfelelő archívumot, és hozzáadja a kormányt $PATH
.
Megjegyzés: A Helm 3.0.0-s verziója nemrég jelent meg. Mivel sok változás történt rajta, az olvasónak azt tanácsoljuk, hogy várjon egy kicsit a használat előtt..
Forrás hozzáadása Helmhez
Az első lépés a „loki” tároló hozzáadása a következő paranccsal:
$ helm add loki https://grafana.github.io/loki/charts
Ezek után rákereshet a „loki” nevű csomagokra:
$ helm search loki
Eredmény:
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...
Ezek a csomagok a következő tulajdonságokkal rendelkeznek:
- csomag loki/loki csak a Loki szerverrel egyezik
- csomag loki/fluent-bit lehetővé teszi egy DaemonSet üzembe helyezését a fluent-bin használatával a naplók gyűjtésére a Promtail helyett
- csomag loki/promtail naplófájl-gyűjtő ügynököt tartalmaz
- csomag loki/loki-stack, lehetővé teszi a Loki azonnali telepítését a Promtail-lel együtt.
Loki telepítése
A Loki Kubernetes rendszerbe 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
Lemezre 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, akkor adja hozzá a paramétert
--set grafana.enabled = true
A parancs futtatásakor a következő kimenetet kell kapnia:
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.
Ha megnézzük a „monitoring” névtérben lévő podok állapotát, láthatjuk, hogy minden telepítve van:
$ kubectl -n monitoring get pods -l release=loki
Eredmény:
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
Minden pod fut. Itt az ideje néhány tesztnek!
Csatlakozás a Grafana-hoz
A Kubernetes alatti Grafana-hoz való csatlakozáshoz alagutat kell nyitnia a podjához. Alább található a Grafana pod 3000-es portjának megnyitására szolgáló parancs:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Egy másik fontos pont a Grafana rendszergazdai jelszó helyreállításának szükségessége. A jelszót titokban tartják loki-grafana
mezőben .data.admin-user
base64 formátumban.
A visszaállításhoz a következő parancsot kell futtatnia:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Használja ezt a jelszót az alapértelmezett rendszergazdai fiókkal (admin) együtt.
Loki adatforrás meghatározása a Grafanában
Először is győződjön meg arról, hogy a Loki adatforrás létrejött (Konfiguráció/Adatforrás).
Íme egy példa:
Példa a Loki adatforrásának beállítására
A „Teszt” gombra kattintva ellenőrizheti a kapcsolatot a Lokival.
Kérések benyújtása Lokihoz
Most lépjen a Grafana oldalára a „Felfedezés” részhez. Amikor naplókat fogad tárolókból, a Loki metaadatokat ad hozzá a Kubernetesből. Így lehetővé válik egy adott konténer naplóinak megtekintése.
Például a promtail tároló naplóinak kiválasztásához használja a következő lekérdezést: {container_name = "promtail"}
.
Ne felejtse el itt kiválasztani a Loki adatforrást is.
Ez a lekérdezés a következőképpen adja vissza a tárolótevékenységet:
Lekérdezés eredménye a Grafana-ban
Hozzáadás az irányítópulthoz
A Grafana 6.4-től kezdve a naplóadatokat közvetlenül az irányítópulton helyezheti el. Ezt követően a felhasználó gyorsan tud váltani a webhelyén lévő kérések száma és az alkalmazásnyomok között.
Az alábbiakban egy példa látható egy irányítópultra, amely megvalósítja ezt az interakciót:
Minta irányítópult Prometheus-metrikákkal és Loki-naplókkal
Loki jövője
Májusban/júniusban kezdtem el használni a Lokit a 0.1-es verzióval. Ma már megjelent az 1-es verzió, sőt az 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 az érettség valódi jeleit mutatta, és a későbbi verziók (0.4, majd 1.0) csak erősítették ezt a benyomást.
Az 1.0.0 után senkinek nem lehet mentsége arra, hogy ne használja ezt a csodálatos eszközt.
A további fejlesztéseknek nem a Lokira kell vonatkozniuk, hanem inkább annak integrációjára a kiváló Grafanával. Valójában a Grafana 6.4 már jól integrálja a műszerfalakat.
A nemrégiben megjelent Grafana 6.5 tovább javítja ezt az integrációt azáltal, hogy automatikusan felismeri a naplótartalmat JSON formátumban.
Az alábbi videó egy kis példát mutat erre a mechanizmusra:
A Grafanában exponált Loki karakterláncok használata
Lehetővé válik a JSON-mezők egyikének használata például a következőkhöz:
- hivatkozások külső eszközre
- a napló tartalmának szűrése
Például rákattinthat a traceId-re a Zipkin vagy a Jaeger eléréséhez.
Szokás szerint várjuk észrevételeiket, és arra is invitálunk
Forrás: will.com