Saluton, Ĥabrovskanoj! Antaŭtagmeze de la komenco de nova aliĝo al la kurso
Ĉi tiu artikolo estas mallonga enkonduko al Lokio. Projekto Lokio
La ĉefa inspiro por Lokio estis
- 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:
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.
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:
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:
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:
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:
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:
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
fonto: www.habr.com