Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi

Saludo, mga residente sa Khabrovsk! Sa bisperas sa pagsugod sa usa ka bag-ong enrolment alang sa kurso "Mga gawi ug himan sa DevOps" Nag-andam kami usa ka paghubad sa makapaikag nga materyal alang kanimo.

Kini nga artikulo usa ka mubo nga pasiuna sa Loki. Proyekto Loki gisuportahan ni Grafana ug gitumong sa sentralisadong koleksyon sa mga troso (gikan sa mga server o mga sudlanan).

Ang nag-unang inspirasyon alang kang Loki mao Prometheus uban ang ideya sa pagpadapat sa iyang mga pamaagi sa pagdumala sa log:

  • gamit ang mga label sa pagtipig sa datos
  • konsumo sa pipila ka mga kapanguhaan

Mobalik kami kung giunsa ang Prometheus molihok ug maghatag pipila ka mga pananglitan sa paggamit niini sa konteksto sa Kubernetes.

Pipila ka mga pulong mahitungod sa Prometheus

Aron hingpit nga masabtan kung giunsa ang paglihok ni Loki, hinungdanon ang pag-atras ug paghinumdom gamay bahin sa Prometheus.

Usa sa mga lahi nga bahin sa Prometheus mao ang pagkuha sa mga sukatan gikan sa mga punto sa pagkolekta (pinaagi sa mga eksporter) ug pagtipig niini sa TSDB (Time Series Data Base), uban ang pagdugang sa metadata sa porma sa mga label.

Ngano nga kinahanglan kini

Bag-ohay lang, ang Prometheus nahimong de facto nga sumbanan sa kalibutan sa mga sudlanan ug Kubernetes: ang pag-instalar niini yano ra kaayo, ug ang Kubernetes cluster adunay usa ka lumad nga endpoint alang sa Prometheus. Mahimo usab nga makuha sa Prometheus ang mga sukatan gikan sa mga aplikasyon nga gipakatap sa usa ka sudlanan samtang gitipigan ang piho nga mga label. Busa, ang pag-monitor sa aplikasyon dali ra kaayo ipatuman.

Ikasubo, wala pa'y solusyon sa turnkey alang sa pagdumala sa log, ug kinahanglan nimo nga mangita usa ka solusyon alang sa imong kaugalingon:

  • gidumala nga serbisyo sa panganod alang sa pagsentro sa mga troso (AWS, Azure o Google)
  • serbisyo sa pagmonitor "pagmonitor isip usa ka serbisyo" (pananglitan, Datadog)
  • paghimo sa imong kaugalingon nga serbisyo sa pagkolekta sa log.

Alang sa ikatulo nga kapilian, tradisyonal nakong gigamit ang Elasticsearch, bisan pa sa kamatuoran nga dili ako kanunay nga malipayon niini (ilabi na ang kabug-at ug pagkakomplikado sa pagsumpo).

Gidisenyo ang Loki aron pasimplehon ang pagpatuman sumala sa mosunod nga mga prinsipyo:

  • mahimong yano sa pagsugod
  • konsumo sa pipila ka mga kapanguhaan
  • pagtrabaho nga independente nga wala’y espesyal nga pagmentinar
  • nagsilbing dugang sa Prometheus aron makatabang sa mga imbestigasyon sa bug

Bisan pa, kini nga kayano moabut sa gasto sa pipila nga mga pagkompromiso. Usa niini mao ang dili pag-indeks sa sulod. Busa, ang pagpangita sa teksto dili kaayo episyente o adunahan ug wala magtugot sa mga estadistika sa sulod sa teksto. Apan tungod kay gusto ni Loki nga mahimong katumbas sa grep ug usa ka komplemento sa Prometheus, dili kini usa ka disbentaha.

Imbestigasyon sa Insidente

Aron mas masabtan kung nganong wala magkinahanglan og pag-indeks si Loki, balikan nato ang pamaagi sa imbestigasyon sa insidente nga gigamit sa mga developer sa Loki:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Ayuhon!
(1 Warning → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fixing!)

Ang ideya mao nga makadawat kami usa ka matang sa alerto (Slack Notification, SMS, ug uban pa) ug pagkahuman:

  • tan-awa ang mga dashboard sa Grafana
  • tan-awa ang mga sukatan sa serbisyo (pananglitan, sa Prometheus)
  • tan-awa ang mga entry sa log (pananglitan, sa Elasticsearch)
  • tingali tan-awa ang gipang-apod-apod nga mga pagsubay (Jaeger, Zipkin, ug uban pa)
  • ug sa katapusan ayuhon ang orihinal nga problema.

Dinhi, sa kaso sa Grafana + Prometheus + Elasticsearch + Zipkin stack, kinahanglan nimong gamiton ang upat ka lainlaing mga himan. Aron makunhuran ang oras, maayo nga mahimo kining tanan nga mga lakang gamit ang usa ka himan: Grafana. Angay nga matikdan nga kini nga pamaagi sa panukiduki gipatuman sa Grafana sukad sa bersyon 6. Busa, nahimong posible nga ma-access ang datos sa Prometheus direkta gikan sa Grafana.

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Ang screen sa Explorer gibahin tali sa Prometheus ug Loki

Gikan niini nga screen mahimo nimong tan-awon ang mga Loki log nga may kalabutan sa Prometheus metrics gamit ang split screen concept. Sukad sa bersyon 6.5, gitugotan ka sa Grafana nga ma-parse ang trace id sa mga entry sa Loki log aron masundan ang mga link sa imong paborito nga gipang-apod-apod nga mga himan sa pagsubay (Jaeger).

Lokal nga pagsulay sa Loki

Ang labing kadali nga paagi sa pagsulay sa Loki sa lokal mao ang paggamit sa docker-compose. Ang docker-compose file nahimutang sa Loki repository. Makuha nimo ang repository gamit ang mosunod nga sugo git:

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

Unya kinahanglan nimo nga moadto sa direktoryo sa produksiyon:

$ cd production

Pagkahuman niini makuha nimo ang pinakabag-o nga bersyon sa mga imahe sa Docker:

$ docker-compose pull

Sa katapusan, ang stack sa Loki gilunsad uban ang mosunod nga sugo:

$ docker-compose up

Ang arkitektura sa Loki

Ania ang usa ka gamay nga diagram nga adunay arkitektura sa Loki:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Mga Prinsipyo sa Arkitektura sa Loki

Ang kliyente sa web nagpadagan sa mga aplikasyon sa server, ang Promtail nangolekta og mga troso ug gipadala kini sa Loki, ang kliyente sa web nagpadala usab og metadata sa Loki. Gihiusa ni Loki ang tanan ug gipasa kini sa Grafana.
Gilunsad ang Loki. Aron matan-aw ang magamit nga mga sangkap, pagdagan ang mosunud nga mando:

$ docker ps

Sa kaso sa usa ka bag-ong na-install nga Docker, ang mando kinahanglan nga ibalik ang mosunod nga resulta:

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

Atong makita ang mosunod nga mga sangkap:

  • Promtail: ahente nga responsable sa pagsentro sa mga troso
  • Grafana: usa ka bantog nga himan sa dashboard
  • Loki: Data Centralization Daemon

Isip kabahin sa usa ka klasiko nga imprastraktura (pananglitan, base sa mga virtual machine), ang ahente sa Promtail kinahanglan nga i-deploy sa matag makina. Ang Grafana ug Loki mahimong ma-install sa parehas nga makina.

Deployment sa Kubernetes

Ang pag-instalar sa mga sangkap sa Loki sa Kubernetes mao ang mosunod:

  • daemonSet alang sa pag-deploy sa ahente sa Promtail sa matag usa sa mga makina sa cluster sa server
  • Deployment Loki
  • ug ang katapusan mao ang pagpadala sa Grafana.

Suwerte, ang Loki magamit ingon usa ka pakete sa Helm, nga dali nga i-deploy.

Pag-instalar pinaagi sa Heml

Kinahanglan nga na-install na nimo ang Heml. Mahimo kini ma-download gikan sa GitHub repository sa proyekto. Gi-install kini pinaagi sa pag-unpack sa archive nga katumbas sa imong arkitektura ug pagdugang sa timon sa $PATH.

Mubo nga sulat: Ang bersyon 3.0.0 sa Helm gipagawas bag-o lang. Tungod kay adunay daghang mga pagbag-o niini, ang magbabasa gitambagan nga maghulat gamay sa dili pa kini gamiton..

Pagdugang og tinubdan alang sa Helm

Ang unang lakang mao ang pagdugang sa "loki" repository gamit ang mosunod nga sugo:

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

Pagkahuman niini, mahimo nimong pangitaon ang mga pakete nga ginganlag "loki":

$ helm search loki

Resulta:

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

Kini nga mga pakete adunay mga mosunod nga mga bahin:

  • ang package loki/loki katumbas sa server sa Loki lamang
  • ang package loki/fluent-bit nagtugot kanimo sa pag-deploy sa usa ka DaemonSet gamit ang fluent-bin aron mangolekta og mga troso imbes sa Promtail
  • ang package loki/promtail adunay usa ka ahente sa pagkolekta sa log file
  • ang package loki/loki-stack, nagtugot kanimo sa pag-deploy dayon sa Loki kauban ang Promtail.

Pag-instalar sa Loki

Aron i-deploy si Loki sa Kubernetes, padagana ang mosunod nga command sa "monitoring" namespace:

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

Aron makatipig sa disk, idugang ang parameter --set loki.persistence.enabled = true:

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

Mubo nga sulat: kung gusto nimo i-deploy ang Grafana sa parehas nga oras, unya idugang ang parameter --set grafana.enabled = true

Kung gipadagan nimo kini nga mando kinahanglan nimo makuha ang mosunud nga output:

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.

Sa pagtan-aw sa kahimtang sa mga pod sa "monitoring" namespace, atong makita nga ang tanan na-deploy:

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

Resulta:

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

Ang tanan nga mga pod nagdagan. Karon na ang panahon sa pagbuhat sa pipila ka mga pagsulay!

Pagkonektar sa Grafana

Aron makonektar sa Grafana sa ilawom sa Kubernetes, kinahanglan nimo nga ablihan ang usa ka tunel sa pod niini. Sa ubos mao ang sugo sa pag-abli sa port 3000 alang sa Grafana pod:

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

Ang laing importante nga punto mao ang panginahanglan sa pagbawi sa Grafana administrator password. Ang password gitago nga sekreto loki-grafana sa uma .data.admin-user sa base64 nga pormat.

Aron mapasig-uli kini, kinahanglan nimo nga ipadagan ang mosunud nga mando:

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

Gamita kini nga password kauban ang default administrator account (admin).

Paghubit sa usa ka tinubdan sa datos sa Loki sa Grafana

Una sa tanan, siguroha nga ang Loki data source nahimo na (Configuration/Datasource).
Ania ang usa ka pananglitan:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Pananglitan sa pag-set up sa usa ka tinubdan sa datos alang sa Loki

Pinaagi sa pag-klik sa "Pagsulay" mahimo nimong susihon ang koneksyon sa Loki.

Naghangyo kang Loki

Karon adto sa Grafana sa seksyon nga "Pag-usisa". Kung nakadawat mga troso gikan sa mga sudlanan, gidugang ni Loki ang metadata gikan sa Kubernetes. Sa ingon, nahimong posible ang pagtan-aw sa mga troso sa usa ka piho nga sudlanan.

Pananglitan, aron mapili ang promtail container logs, mahimo nimong gamiton ang mosunod nga pangutana: {container_name = "promtail"}.
Dinhi usab hinumdomi ang pagpili sa tinubdan sa datos sa Loki.

Kini nga pangutana magbalik sa kalihokan sa sudlanan sama sa mosunod:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Resulta sa pangutana sa Grafana

Idugang sa dashboard

Sugod sa Grafana 6.4, mahimo nimong ibutang ang impormasyon sa log direkta sa dashboard. Pagkahuman niini, ang tiggamit makahimo sa dali nga pagbalhin tali sa gidaghanon sa mga hangyo sa iyang site ug mga pagsubay sa aplikasyon.

Sa ubos usa ka pananglitan sa usa ka dashboard nga nagpatuman niini nga interaksyon:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Sample dashboard nga adunay Prometheus metrics ug Loki logs

Kaugmaon ni Loki

Nagsugod ko sa paggamit sa Loki balik sa Mayo / Hunyo nga adunay bersyon 0.1. Karon nga bersyon 1, ug bisan ang 1.1 ug 1.2 gipagawas na.

Kinahanglan nga dawaton nga ang bersyon 0.1 dili igo nga lig-on. Apan ang 0.3 nagpakita na sa tinuod nga mga timailhan sa pagkahamtong, ug ang misunod nga mga bersyon (0.4, unya 1.0) nagpalig-on lamang niini nga impresyon.

Pagkahuman sa 1.0.0, wala’y bisan kinsa nga adunay bisan unsang pasangil nga dili gamiton kining talagsaon nga himan.

Ang dugang nga mga pag-uswag dili kinahanglan bahin sa Loki, apan ang panagsama niini sa maayo kaayo nga Grafana. Sa tinuud, ang Grafana 6.4 adunay maayo nga panagsama sa mga dashboard.

Ang Grafana 6.5, nga gipagawas bag-o lang, dugang nga nagpauswag sa kini nga panagsama pinaagi sa awtomatikong pag-ila sa mga sulud sa log sa format nga JSON.

Ang video sa ubos nagpakita sa usa ka gamay nga pananglitan niini nga mekanismo:

Loki - pagkolekta sa log gamit ang Prometheus nga pamaagi
Gigamit ang mga string sa Loki nga gibutyag sa Grafana

Mahimong posible nga gamiton ang usa sa mga natad sa JSON, pananglitan, alang sa:

  • mga link sa eksternal nga himan
  • pagsala sa mga sulod sa log

Pananglitan, mahimo nimong i-klik ang traceId aron makaadto sa Zipkin o Jaeger.

Sama sa naandan, kami nagpaabut sa imong mga komento ug nagdapit kanimo sa bukas nga webinar, diin atong hisgutan kung giunsa ang industriya sa DevOps naugmad sa 2019 ug hisgutan ang posible nga mga agianan sa pag-uswag alang sa 2020.

Source: www.habr.com