Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la

Bonjou, rezidan Khabrovsk! Sou Ev nan kòmansman an nan yon nouvo enskripsyon pou kou a "Prattik ak zouti DevOps" Nou te prepare yon tradiksyon materyèl enteresan pou ou.

Atik sa a se yon ti entwodiksyon sou Loki. Pwojè Loki sipòte pa Grafana epi li vize a koleksyon santralize mòso bwa (ki soti nan sèvè oswa resipyan).

Enspirasyon prensipal la pou Loki te Prometheus ak lide pou aplike apwòch li nan jesyon boutèy demi lit:

  • lè l sèvi avèk etikèt pou estoke done yo
  • konsomasyon kèk resous

Nou pral retounen sou fason Prometheus travay epi bay kèk egzanp sou itilizasyon li nan kontèks Kubernetes.

Kèk mo sou Prometheus

Pou w konprann byen ki jan Loki travay, li enpòtan pou w fè yon etap tounen epi sonje yon ti kras sou Prometheus.

Youn nan karakteristik diferan nan Prometheus se ekstraksyon nan mezi nan pwen koleksyon (atravè ekspòtatè) ak estoke yo nan TSDB (Time Series Data Base), ak adisyon nan metadata nan fòm lan nan etikèt.

Poukisa li nesesè

Dènyèman, Prometheus te vin estanda defakto nan mond lan nan resipyan ak Kubernetes: enstalasyon li yo trè senp, ak gwoup Kubernetes la vini ak yon pwen final natif natal pou Prometheus. Prometheus kapab tou ekstrè mezi nan aplikasyon yo deplwaye nan yon veso pandan y ap estoke etikèt espesifik. Se poutèt sa, siveyans aplikasyon se trè fasil aplike.

Malerezman, toujou pa gen solisyon kle pou jesyon boutèy demi lit, epi ou dwe jwenn yon solisyon pou tèt ou:

  • sèvis nwaj jere pou santralize mòso bwa (AWS, Azure oswa Google)
  • sèvis siveyans "siveyans kòm yon sèvis" (pa egzanp, Datadog)
  • kreye pwòp sèvis koleksyon boutèy demi lit ou.

Pou twazyèm opsyon a, mwen tradisyonèlman itilize Elasticsearch, malgre lefèt ke mwen pa te toujou kontan ak li (espesyalman lou li yo ak konpleksite nan konfigirasyon).

Loki te fèt pou senplifye aplikasyon dapre prensip sa yo:

  • dwe senp pou kòmanse
  • konsome kèk resous
  • travay poukont san okenn antretyen espesyal
  • sèvi kòm yon adisyon nan Prometheus pou ede ak envestigasyon ensèk yo

Sepandan, senplisite sa a vini nan depans lan nan kèk konpwomi. Youn nan yo se pa endèks kontni an. Se poutèt sa, rechèch tèks pa trè efikas oswa rich epi li pa pèmèt estatistik sou kontni tèks la. Men, depi Loki vle ekivalan a grep ak yon konpleman nan Prometheus, sa a se pa yon dezavantaj.

Ankèt Ensidan

Pou pi byen konprann poukisa Loki pa bezwen endèks, ann tounen nan metòd envestigasyon ensidan ke devlopè Loki yo te itilize:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
1 Avètisman → 2 Dach → 3 Rekèt adhoc → 4 Agrégation Log → 5 Trase distribiye → 6 Ranje!
(1 Avètisman → 2 Dashboard → 3 Adhoc Query → 4 Log Agregation → 5 Distributed Tracing → 6 Fixing!)

Lide a se ke nou resevwa yon kalite alèt (Slack Notifikasyon, SMS, elatriye) epi apre sa:

  • gade tablodbò Grafana
  • gade nan mezi sèvis (pa egzanp, nan Prometheus)
  • gade antre nan log (pa egzanp, nan Elasticsearch)
  • petèt pran yon gade nan tras distribiye (Jaeger, Zipkin, elatriye)
  • epi finalman fikse pwoblèm orijinal la.

Isit la, nan ka Grafana + Prometheus + Elasticsearch + Zipkin pil la, ou pral oblije sèvi ak kat zouti diferan. Pou diminye tan, li ta bon pou kapab fè tout etap sa yo lè l sèvi avèk yon sèl zouti: Grafana. Li se vo anyen ke apwòch sa a nan rechèch te aplike nan Grafana depi vèsyon 6. Kidonk, li vin posib jwenn aksè nan done Prometheus dirèkteman nan Grafana.

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Ekran Explorer fann ant Prometheus ak Loki

Soti nan ekran sa a ou ka wè mòso Loki ki gen rapò ak mezi Prometheus lè l sèvi avèk konsèp ekran divize an. Depi vèsyon 6.5, Grafana pèmèt ou analize id tras nan antre Loki pou swiv lyen ki mennen nan zouti trase distribiye pi renmen ou yo (Jaeger).

Tès Loki lokal

Fason ki pi fasil pou teste Loki lokalman se sèvi ak docker-compose. Docker-compose dosye a sitiye nan depo Loki a. Ou ka jwenn depo a lè l sèvi avèk lòd sa a git:

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

Lè sa a, ou bezwen ale nan anyè pwodiksyon an:

$ cd production

Apre sa ou ka jwenn dènye vèsyon an nan imaj Docker:

$ docker-compose pull

Finalman, pile Loki lanse ak lòd sa a:

$ docker-compose up

Achitekti Loki

Men yon ti dyagram ak achitekti Loki:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Prensip Achitekti Loki

Kliyan entènèt la kouri aplikasyon sou sèvè a, Promtail kolekte mòso bwa epi voye yo bay Loki, kliyan entènèt la tou voye metadata nan Loki. Loki rasanble tout bagay epi transmèt li bay Grafana.
Loki lanse. Pou wè eleman ki disponib, kouri lòd sa a:

$ docker ps

Nan ka yon Docker ki fèk enstale, lòd la ta dwe retounen rezilta sa a:

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

Nou wè eleman sa yo:

  • Promtail: ajan responsab pou santralize mòso bwa
  • Grafana: yon zouti tablodbò pi popilè
  • Loki: Done Santralizasyon Daemon

Kòm yon pati nan yon enfrastrikti klasik (pa egzanp, ki baze sou machin vityèl), ajan Promtail la dwe deplwaye sou chak machin. Grafana ak Loki ka enstale sou menm machin nan.

Deplwaman nan Kubernetes

Enstale konpozan Loki sou Kubernetes pral jan sa a:

  • daemonSet pou deplwaye ajan Promtail sou chak machin ki nan gwoup sèvè a
  • Deplwaman Loki
  • ak dènye a se deplwaman Grafana.

Erezman, Loki disponib kòm yon pake Helm, ki fè li fasil deplwaye.

Enstalasyon atravè Heml

Ou ta dwe deja enstale Heml. Li ka telechaje nan depo GitHub pwojè a. Li enstale pa debalaj achiv ki koresponn ak achitekti ou a epi ajoute Helm nan $PATH.

Remak: vèsyon 3.0.0 nan Helm te lage dènyèman. Depi te gen anpil chanjman nan li, se lektè a konseye pou tann yon ti jan anvan ou sèvi ak li..

Ajoute yon sous pou Helm

Premye etap la se ajoute repozitwa "loki" lè l sèvi avèk lòd sa a:

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

Apre sa, ou ka chèche pakè ki rele "loki":

$ helm search loki

Rezilta:

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

Pakè sa yo gen karakteristik sa yo:

  • pake a loki/loki matche ak sèvè Loki sèlman
  • pake a loki/fluent-bit pèmèt ou deplwaye yon DaemonSet lè l sèvi avèk fluent-bin pou kolekte mòso bwa olye pou yo Promtail
  • pake a loki/promtail gen yon ajan koleksyon dosye boutèy demi lit
  • pake a loki/loki-stack, pèmèt ou imedyatman deplwaye Loki ansanm ak Promtail.

Enstale Loki

Pou deplwaye Loki nan Kubernetes, kouri lòd sa a nan espas non "siveyans" la:

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

Pou sove sou disk, ajoute paramèt la --set loki.persistence.enabled = true:

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

Remak: si ou vle deplwaye Grafana an menm tan an, Lè sa a, ajoute paramèt la --set grafana.enabled = true

Lè ou kouri lòd sa a ou ta dwe jwenn pwodiksyon sa a:

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.

Gade nan eta a nan gous yo nan espas non "siveyans la", nou ka wè ke tout bagay deplwaye:

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

Rezilta:

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

Tout gous yo ap kouri. Koulye a, li lè yo fè kèk tès!

Konekte ak Grafana

Pou konekte ak Grafana anba Kubernetes, ou bezwen louvri yon tinèl nan gous li yo. Anba a se kòmandman pou louvri pò 3000 pou gous Grafana la:

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

Yon lòt pwen enpòtan se bezwen pou refè modpas administratè Grafana la. Modpas la kenbe sekrè loki-grafana nan jaden .data.admin-user nan fòma base64.

Pou retabli li, ou bezwen kouri lòd sa a:

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

Sèvi ak modpas sa a ansanm ak kont administratè default (admin).

Defini yon sous done Loki nan Grafana

Premye a tout, asire w ke yo te kreye sous done Loki (Konfigirasyon/Datasource).
Isit la se yon egzanp:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Egzanp mete kanpe yon sous done pou Loki

Lè w klike sou "Tès" ou ka tcheke koneksyon an ak Loki.

Fè demann pou Loki

Koulye a, ale nan Grafana nan seksyon "Eksplore". Lè w ap resevwa mòso bwa ki soti nan resipyan, Loki ajoute metadata soti nan Kubernetes. Kidonk, li vin posib pou wè mòso bwa yo nan yon veso espesifik.

Pa egzanp, pou chwazi mòso bwa promtail veso yo, ou ka itilize rechèch sa a: {container_name = "promtail"}.
Isit la tou sonje chwazi sous done Loki.

Rekèt sa a pral retounen aktivite veso a jan sa a:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Rezilta rechèch nan Grafana

Ajoute sou tablodbò

Kòmanse ak Grafana 6.4, ou ka mete enfòmasyon sou boutèy demi lit dirèkteman sou tablodbò a. Apre sa, itilizatè a pral kapab byen vit chanje ant kantite demann sou sit li a ak tras aplikasyon an.

Anba a se yon egzanp yon tablodbò ki aplike entèraksyon sa a:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Egzanp tablodbò ak mezi Prometheus ak mòso bwa Loki

Lavni nan Loki

Mwen te kòmanse itilize Loki nan mwa me/jen ak vèsyon 0.1. Jodi a vèsyon 1, e menm 1.1 ak 1.2 te deja lage.

Li dwe admèt ke vèsyon 0.1 pa t ase ki estab. Men, 0.3 deja te montre siy reyèl nan matirite, ak vèsyon ki vin apre (0.4, Lè sa a, 1.0) sèlman ranfòse enpresyon sa a.

Apre 1.0.0, pèsonn pa ka gen okenn eskiz pou pa sèvi ak zouti bèl bagay sa a.

Plis amelyorasyon pa ta dwe sou Loki, men pito entegrasyon li yo ak ekselan Grafana la. An reyalite, Grafana 6.4 deja gen bon entegrasyon ak tablodbò.

Grafana 6.5, ki te pibliye dènyèman, amelyore plis entegrasyon sa a lè li rekonèt otomatikman sa ki ekri nan fòma JSON.

Videyo ki anba a montre yon ti egzanp mekanis sa a:

Loki - koleksyon boutèy demi lit lè l sèvi avèk apwòch Prometheus la
Sèvi ak Loki fisèl ekspoze nan Grafana

Li vin posib pou itilize youn nan jaden JSON yo, pa egzanp, pou:

  • lyen ki mennen nan zouti ekstèn
  • filtraj sa ki nan boutèy demi lit

Pou egzanp, ou ka klike sou traceId pou ale nan Zipkin oswa Jaeger.

Kòm dabitid, nou tann kòmantè ou yo epi envite ou louvri webinar, kote nou pral pale sou fason endistri DevOps te devlope pandan 2019 epi diskite sou chemen devlopman posib pou 2020.

Sous: www.habr.com