Lokio - ŝtipkolekto uzante la Prometheus-aliron

Saluton, Ĥabrovskanoj! Antaŭtagmeze de la komenco de nova aliĝo al la kurso "DevOps-praktikoj kaj iloj" Ni pretigis tradukon de interesa materialo por vi.

Ĉi tiu artikolo estas mallonga enkonduko al Lokio. Projekto Lokio subtenata de Grafana kaj celas al centralizita kolekto de ŝtipoj (de serviloj aŭ ujoj).

La ĉefa inspiro por Lokio estis Prometeo kun la ideo apliki liajn alirojn al registro-administrado:

  • uzante etikedojn por konservi datumojn
  • konsumo de malmultaj rimedoj

Ni revenos al kiel funkcias Prometeo kaj donos kelkajn ekzemplojn de ĝia uzo en la kunteksto de Kubernetes.

Kelkaj vortoj pri Prometeo

Por plene kompreni kiel Lokio funkcias, gravas fari paŝon malantaŭen kaj memori iomete pri Prometeo.

Unu el la karakterizaĵoj de Prometheus estas la eltiro de metrikoj de kolektopunktoj (per eksportantoj) kaj stokado de ili en TSDB (Time Series Data Base), kun aldono de metadatenoj en formo de etikedoj.

Kial ĝi bezonas

Lastatempe, Prometheus fariĝis la fakta normo en la mondo de ujoj kaj Kubernetes: ĝia instalado estas tre simpla, kaj la Kubernetes-areo venas kun denaska finpunkto por Prometheus. Prometheus ankaŭ povas ĉerpi metrikojn de aplikoj deplojitaj en ujo konservante specifajn etikedojn. Tial, aplika monitorado estas tre facile efektivigi.

Bedaŭrinde, ankoraŭ ne ekzistas ŝlosila solvo por ŝtipadministrado, kaj vi devas trovi solvon por vi mem:

  • administrita nuba servo por centralizi protokolojn (AWS, Azure aŭ Google)
  • monitora servo "monitorado kiel servo" (ekzemple Datadog)
  • kreante vian propran ŝtipkolektan servon.

Por la tria opcio, mi tradicie uzis Elasticsearch, malgraŭ tio, ke mi ne ĉiam estis feliĉa pri ĝi (precipe ĝia pezeco kaj komplekseco de agordo).

Lokio estis dizajnita por simpligi efektivigon laŭ la sekvaj principoj:

  • estu simple komenci
  • konsumi malmultajn rimedojn
  • labori sendepende sen speciala prizorgado
  • servas kiel aldono al Prometeo por helpi pri cim-esploroj

Tamen, ĉi tiu simpleco venas koste de iuj kompromisoj. Unu el ili estas ne indeksi la enhavon. Tial, tekstoserĉo ne estas tre efika aŭ riĉa kaj ne permesas statistikojn pri la enhavo de la teksto. Sed ĉar Lokio volas esti la ekvivalento de grep kaj komplemento al Prometeo, tio ne estas malavantaĝo.

Esploro de Okazaĵoj

Por pli bone kompreni kial Lokio ne bezonas indekson, ni reiru al la okazaĵa enketmetodo, kiun uzis la programistoj de Lokio:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
1 Atentigo → 2 Instrumentpanelo → 3 Adhoc Demando → 4 Protokolo-Agregado → 5 Distribuita Spurado → 6 Ripari!
(1 Averto → 2 Instrumentpanelo → 3 Adhoc Demando → 4 Registro-Agregado → 5 Distribuita Spurado → 6 Ripari!)

La ideo estas, ke ni ricevas ian atentigon (Slack Notification, SMS, ktp.) kaj post tio:

  • rigardu Grafana panelojn
  • rigardu servajn metrikojn (ekzemple, en Prometheus)
  • rigardu protokolojn (ekzemple, en Elasticsearch)
  • eble rigardu distribuitajn spurojn (Jaeger, Zipkin, ktp.)
  • kaj finfine ripari la originan problemon.

Ĉi tie, en la kazo de la stako Grafana + Prometheus + Elasticsearch + Zipkin, vi devos uzi kvar malsamajn ilojn. Por redukti tempon, estus bone povi plenumi ĉiujn ĉi tiujn paŝojn per unu ilo: Grafana. Indas noti, ke ĉi tiu aliro al esplorado estis efektivigita en Grafana ekde la versio 6. Tiel, eblas aliri Prometheus-datumojn rekte de Grafana.

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Ekrano de esploristo dividita inter Prometeo kaj Lokio

De ĉi tiu ekrano vi povas vidi Loki-protokolojn rilatajn al Prometheus-metriko uzante la divida ekrankoncepto. Ekde versio 6.5, Grafana permesas al vi analizi la spuridentigilon en Loki-protokolo-enskriboj por sekvi ligilojn al viaj plej ŝatataj distribuitaj spuriloj (Jaeger).

Loka Loki-testo

La plej facila maniero testi Lokion loke estas uzi docker-compose. La docker-compose dosiero situas en la Loki-deponejo. Vi povas akiri la deponejon uzante la jenan komandon git:

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

Tiam vi devas iri al la produktada dosierujo:

$ cd production

Post ĉi tio vi povas akiri la lastan version de Docker-bildoj:

$ docker-compose pull

Fine, la Loki-stako estas lanĉita per la sekva komando:

$ docker-compose up

Loki-arkitekturo

Jen malgranda diagramo kun la Lokio-arkitekturo:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Loki-Arkitekturaj Principoj

La TTT-kliento prizorgas aplikojn sur la servilo, Promtail kolektas protokolojn kaj sendas ilin al Loki, la TTT-kliento ankaŭ sendas metadatenojn al Loki. Lokio agregas ĉion kaj transdonas ĝin al Grafana.
Lokio estas lanĉita. Por vidi disponeblajn komponantojn, rulu la jenan komandon:

$ docker ps

En la kazo de ĵus instalita Docker, la komando devus resendi la sekvan rezulton:

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

Ni vidas la jenajn komponantojn:

  • Promtail: agento respondeca pri centralizado de protokoloj
  • Grafana: fama panela ilo
  • Lokio: Demono de Centraligo de Datumoj

Kiel parto de klasika infrastrukturo (ekzemple, bazita sur virtualaj maŝinoj), la Promtail-agento devas esti deplojita sur ĉiu maŝino. Grafana kaj Lokio povas esti instalitaj sur la sama maŝino.

Deplojo al Kubernetes

Instali Loki-komponentojn sur Kubernetes estos jene:

  • daemonSet por deploji la Promtail-agenton sur ĉiu el la maŝinoj en la servila areto
  • Deplojo Lokio
  • kaj la lasta estas la deplojo de Grafana.

Feliĉe, Lokio disponeblas kiel Helm-pakaĵo, faciligante ĝin disfaldi.

Instalado per Heml

Vi jam devus havi Heml instalita. Ĝi povas esti elŝutita de la GitHub-deponejo de la projekto. Ĝi estas instalita malpakante la arkivon respondan al via arkitekturo kaj aldonante stirilon al $PATH.

Notu: versio 3.0.0 de Helm estis publikigita lastatempe. Ĉar estis multaj ŝanĝoj al ĝi, la leganto konsilas atendi iom antaŭ ol uzi ĝin..

Aldonante fonton por Helm

La unua paŝo estas aldoni la deponejon "loki" per la sekva komando:

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

Post ĉi tio, vi povas serĉi pakaĵojn nomitajn "loki":

$ helm search loki

Rezulto:

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

Ĉi tiuj pakoj havas la jenajn funkciojn:

  • pako loki/loki kongruas nur kun Loki-servilo
  • pako loki/fluent-bit permesas vin disfaldi DaemonSet uzante fluent-bin por kolekti protokolojn anstataŭ Promtail
  • pako loki/promtail enhavas protokoldosierkolektan agenton
  • pako loki/loki-stako, permesas vin tuj deploji Lokion kune kun Promtail.

Instalante Lokion

Por deploji Lokion al Kubernetes, rulu la sekvan komandon en la "monitora" nomspaco:

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

Por konservi al disko, aldonu la parametron --set loki.persistence.enabled = true:

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

Notu: se vi volas deploji Grafana samtempe, tiam aldonu la parametron --set grafana.enabled = true

Kiam vi rulas ĉi tiun komandon, vi devus ricevi la sekvan eligon:

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.

Rigardante la staton de la podoj en la "monitora" nomspaco, ni povas vidi, ke ĉio estas deplojita:

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

Rezulto:

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

Ĉiuj balgoj funkcias. Nun estas tempo fari kelkajn provojn!

Konektante al Grafana

Por konektiĝi al Grafana sub Kubernetes, vi devas malfermi tunelon al ĝia pod. Malsupre estas la komando por malfermi la havenon 3000 por la Grafana pod:

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

Alia grava punkto estas la bezono reakiri la pasvorton de administranto Grafana. La pasvorto estas konservita sekreta loki-grafana en kampo .data.admin-user en formato base64.

Por restarigi ĝin, vi devas ruli la sekvan komandon:

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

Uzu ĉi tiun pasvorton kune kun la defaŭlta administra konto (administranto).

Difinante Loki-datumfonton en Grafana

Antaŭ ĉio, certigu, ke la datumfonto de Loki estas kreita (Agordo/Datufonto).
Jen ekzemplo:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Ekzemplo de starigo de datumfonto por Lokio

Alklakante "Testo" vi povas kontroli la konekton kun Lokio.

Farante petojn al Lokio

Nun iru al Grafana al la sekcio "Esplori". Ricevinte protokolojn de ujoj, Lokio aldonas metadatenojn de Kubernetes. Tiel, fariĝas eble vidi la protokolojn de specifa ujo.

Ekzemple, por elekti la promtail-ujo protokolojn, vi povas uzi la sekvan demandon: {container_name = "promtail"}.
Ĉi tie ankaŭ memoru elekti la Loki-datumfonton.

Ĉi tiu demando resendos konteneragadon jene:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Demandrezulto en Grafana

Aldonu al panelo

Komencante kun Grafana 6.4, vi povas meti protokolojn rekte sur la panelo. Post ĉi tio, la uzanto povos rapide ŝanĝi inter la nombro da petoj en sia retejo kaj aplikaj spuroj.

Malsupre estas ekzemplo de panelo kiu efektivigas ĉi tiun interagon:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Specimena instrumentpanelo kun Prometheus-metrikoj kaj Loki-protokoloj

Estonteco de Lokio

Mi komencis uzi Lokion en majo/junio kun versio 0.1. Hodiaŭ versio 1, kaj eĉ 1.1 kaj 1.2 jam estis publikigitaj.

Oni devas konfesi, ke versio 0.1 ne estis sufiĉe stabila. Sed 0.3 jam montris verajn signojn de matureco, kaj postaj versioj (0.4, poste 1.0) nur plifortigis ĉi tiun impreson.

Post 1.0.0, neniu povas havi ajnan pretekston por ne uzi ĉi tiun mirindan ilon.

Pliaj plibonigoj ne devus temi pri Lokio, sed prefere ĝia integriĝo kun la bonega Grafana. Fakte, Grafana 6.4 jam havas bonan integriĝon kun paneloj.

Grafana 6.5, kiu estis publikigita lastatempe, plu plibonigas ĉi tiun integriĝon aŭtomate rekonante protokolan enhavon en JSON-formato.

La suba video montras malgrandan ekzemplon de ĉi tiu mekanismo:

Lokio - ŝtipkolekto uzante la Prometheus-aliron
Uzante Loki-ŝnurojn elmontritajn en Grafana

Eblas uzi unu el la JSON-kampoj, ekzemple, por:

  • ligiloj al ekstera ilo
  • filtrante protokolan enhavon

Ekzemple, vi povas alklaki traceId por iri al Zipkin aŭ Jaeger.

Kiel kutime, ni antaŭĝojas viajn komentojn kaj invitas vin malferma retseminario, kie ni parolos pri kiel la industrio DevOps disvolviĝis dum 2019 kaj diskutos eblajn evoluajn vojojn por 2020.

fonto: www.habr.com