Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen

Tervehdys, habrovskilaiset! Uuden kurssille ilmoittautumisen alkamisen aattona "DevOps-käytännöt ja -työkalut" Olemme laatineet sinulle käännöksen mielenkiintoisesta materiaalista.

Tämä artikkeli on lyhyt johdatus Lokiin. Projekti Loki tukee Grafana ja se on tarkoitettu lokien keskitettyyn keräämiseen (palvelimista tai säiliöistä).

Lokin tärkein inspiraatio oli Prometheus ajatuksena soveltaa hänen lähestymistapojaan lokinhallintaan:

  • käyttämällä tarroja tietojen tallentamiseen
  • kuluttaa vähän resursseja

Palaamme Prometheuksen toimintaan ja annamme esimerkkejä sen käytöstä Kubernetesin yhteydessä.

Muutama sana Prometheuksesta

Ymmärtääksesi täysin, miten Loki toimii, on tärkeää ottaa askel taaksepäin ja muistaa hieman Prometheusta.

Yksi Prometheuksen erityispiirteistä on mittareiden poimiminen keräyspisteistä (viejien kautta) ja niiden tallentaminen TSDB:hen (Time Series Database) sekä metatietojen lisääminen tarrojen muodossa.

Miksi tarvitset sitä

Viime aikoina Prometheuksesta on tullut de facto standardi konttien ja Kubernetes-maailmassa: sen asennus on hyvin yksinkertaista, ja Kubernetes-klusteri sisältää Prometheuksen alkuperäisen päätepisteen. Prometheus voi myös poimia mittareita säilössä olevista sovelluksista ja samalla tallentaa tiettyjä tarroja. Siksi sovellusten valvonta on erittäin helppo toteuttaa.

Valitettavasti lokinhallintaan ei vieläkään ole avaimet käteen -ratkaisua, vaan sinun on löydettävä ratkaisu itsellesi:

  • hallittu pilvipalvelu lokien keskittämiseen (AWS, Azure tai Google)
  • seurantapalvelu "seuranta palveluna" (esim. Datadog)
  • oman lokinkeräyspalvelun luominen.

Kolmannessa vaihtoehdossa käytin perinteisesti Elasticsearchia huolimatta siitä, etten aina ollut tyytyväinen siihen (etenkin sen raskauteen ja kokoonpanon monimutkaisuuteen).

Loki on suunniteltu yksinkertaistamaan käyttöönottoa seuraavien periaatteiden mukaisesti:

  • olla helppo aloittaa
  • kuluttaa vähän resursseja
  • työskennellä itsenäisesti ilman erityisiä huoltotoimenpiteitä
  • toimii Prometheuksen lisänä auttamaan vikatutkimuksissa

Tämä yksinkertaisuus tapahtuu kuitenkin joidenkin kompromissien kustannuksella. Yksi niistä on olla indeksoimatta sisältöä. Siksi tekstihaku ei ole kovin tehokasta tai rikasta, eikä se salli tekstin sisällön tilastointia. Mutta koska Loki haluaa olla grepin vastine ja Prometheuksen täydennys, tämä ei ole haitta.

Tapahtuman tutkinta

Ymmärtääksemme paremmin, miksi Loki ei tarvitse indeksointia, palataan tapausten tutkintamenetelmään, jota Lokin kehittäjät käyttivät:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 varoitus → 2 kojelauta → 3 Adhoc-kysely → 4 lokin yhdistäminen → 5 hajautettu jäljitys → 6 korjaus!)

Ajatuksena on, että saamme jonkinlaisen hälytyksen (Slack Notification, SMS jne.) ja sen jälkeen:

  • katso Grafanan kojelaudat
  • katso palvelumittareita (esimerkiksi Prometheuksessa)
  • katso lokimerkintöjä (esimerkiksi Elasticsearchissa)
  • ehkä katso jaettuja jälkiä (Jaeger, Zipkin jne.)
  • ja lopulta korjata alkuperäinen ongelma.

Grafana + Prometheus + Elasticsearch + Zipkin -pinon tapauksessa sinun on käytettävä neljää eri työkalua. Ajan lyhentämiseksi olisi mukavaa pystyä suorittamaan kaikki nämä vaiheet yhdellä työkalulla: Grafana. On syytä huomata, että tämä lähestymistapa tutkimukseen on otettu käyttöön Grafanassa versiosta 6 lähtien. Näin on mahdollista päästä Prometheus-dataan suoraan Grafanasta.

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Explorer-näyttö jaettu Prometheuksen ja Lokin välillä

Tältä näytöltä voit tarkastella Prometheus-mittauksiin liittyviä Loki-lokeja jaetun näytön konseptilla. Versiosta 6.5 lähtien Grafana sallii sinun jäsentää jäljitystunnuksen Loki-lokimerkinnöissä, jotta voit seurata linkkejä suosikkihajautettuihin jäljitystyökaluihisi (Jaeger).

Paikallinen Loki testi

Helpoin tapa testata Lokia paikallisesti on käyttää docker-composea. Docker-compose-tiedosto sijaitsee Loki-arkistossa. Voit saada arkiston seuraavalla komennolla git:

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

Sitten sinun täytyy mennä tuotantohakemistoon:

$ cd production

Tämän jälkeen saat uusimman version Docker-kuvista:

$ docker-compose pull

Lopuksi Loki-pino käynnistetään seuraavalla komennolla:

$ docker-compose up

Loki arkkitehtuuri

Tässä on pieni kaavio Loki-arkkitehtuurista:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Loki-arkkitehtuurin periaatteet

Web-asiakas ajaa sovelluksia palvelimella, Promtail kerää lokit ja lähettää ne Lokille, web-asiakas lähettää myös metatietoja Lokille. Loki kokoaa kaiken ja lähettää sen Grafanalle.
Loki on käynnistetty. Voit tarkastella käytettävissä olevia komponentteja suorittamalla seuraavan komennon:

$ docker ps

Juuri asennetun Dockerin tapauksessa komennon pitäisi palauttaa seuraava tulos:

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

Näemme seuraavat komponentit:

  • Promtail: agentti, joka vastaa lokien keskittämisestä
  • Grafana: kuuluisa kojelautatyökalu
  • Loki: Data Centralization Daemon

Osana klassista infrastruktuuria (esimerkiksi virtuaalikoneiden pohjalta) Promtail-agentti on otettava käyttöön jokaisessa koneessa. Grafana ja Loki voidaan asentaa samalle koneelle.

Käyttöönotto Kubernetesiin

Loki-komponenttien asentaminen Kubernetesiin tapahtuu seuraavasti:

  • daemonSet Promtail-agentin käyttöönottamiseksi jokaisessa palvelinklusterin koneessa
  • Käyttöönotto Loki
  • ja viimeinen on Grafanan käyttöönotto.

Onneksi Loki on saatavana Helm-pakettina, mikä tekee sen käyttöönoton helpoksi.

Asennus Hemlin kautta

Sinulla pitäisi olla jo asennettuna Heml. Sen voi ladata projektin GitHub-arkistosta. Se asennetaan purkamalla arkkitehtuuriasi vastaava arkisto ja lisäämällä siihen ruori $PATH.

Huom: Helmin versio 3.0.0 julkaistiin äskettäin. Koska siihen on tehty monia muutoksia, lukijaa kehotetaan odottamaan hetki ennen sen käyttöä..

Lisätään lähde Helmille

Ensimmäinen askel on lisätä loki-arkisto seuraavalla komennolla:

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

Tämän jälkeen voit etsiä paketteja nimeltä "loki":

$ helm search loki

Результат:

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

Näissä paketeissa on seuraavat ominaisuudet:

  • paketti loki/loki vastaa vain Loki-palvelinta
  • paketti loki/fluent-bit voit ottaa DaemonSetin käyttöön käyttämällä fluent-biniä lokien keräämiseen Promtailin sijaan
  • paketti loki/promtail sisältää lokitiedostojen keräysagentin
  • paketti loki/loki-stack, voit ottaa Lokin käyttöön välittömästi yhdessä Promtailin kanssa.

Lokin asennus

Ota Loki käyttöön Kubernetesiin suorittamalla seuraava komento "monitoring"-nimiavaruudessa:

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

Tallenna levylle lisäämällä parametri --set loki.persistence.enabled = true:

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

Huom: jos haluat ottaa Grafanan käyttöön samanaikaisesti, lisää parametri --set grafana.enabled = true

Kun suoritat tämän komennon, sinun pitäisi saada seuraava tulos:

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.

Tarkasteltaessa podien tilaa "seuranta"-nimiavaruudessa, voimme nähdä, että kaikki on otettu käyttöön:

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

Результат:

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

Kaikki kynät ovat käynnissä. Nyt on aika tehdä testejä!

Yhdistetään Grafanaan

Jotta voit muodostaa yhteyden Grafanaan Kubernetesin alla, sinun on avattava tunneli sen koteloon. Alla on komento avata portti 3000 Grafana podille:

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

Toinen tärkeä kohta on tarve palauttaa Grafana-järjestelmänvalvojan salasana. Salasana pidetään salassa loki-grafana kentällä .data.admin-user base64-muodossa.

Palauta se suorittamalla seuraava komento:

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

Käytä tätä salasanaa oletusjärjestelmänvalvojan tilin (admin) kanssa.

Loki-tietolähteen määrittäminen Grafanassa

Ensinnäkin, varmista, että Loki-tietolähde on luotu (Configuration/Datasource).
Tässä on esimerkki:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Esimerkki tietolähteen määrittämisestä Lokiin

Klikkaamalla ”Testaa” voit tarkistaa yhteyden Lokiin.

Pyyntöjen tekeminen Lokille

Siirry nyt Grafanaan "Tutki"-osioon. Vastaanottaessaan lokeja säilöistä Loki lisää metatiedot Kubernetesista. Näin on mahdollista tarkastella tietyn kontin lokeja.

Voit esimerkiksi valita promtail-säilön lokit käyttämällä seuraavaa kyselyä: {container_name = "promtail"}.
Muista myös tässä valita Loki-tietolähde.

Tämä kysely palauttaa säilötoiminnan seuraavasti:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Kyselyn tulos Grafanassa

Lisää kojelautaan

Grafana 6.4:stä alkaen voit sijoittaa lokitiedot suoraan kojelautaan. Tämän jälkeen käyttäjä voi nopeasti vaihtaa sivustonsa pyyntöjen määrän ja sovellusjälkien välillä.

Alla on esimerkki hallintapaneelista, joka toteuttaa tämän vuorovaikutuksen:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Esimerkki kojetaulusta Prometheus-mittareilla ja Loki-lokeilla

Lokin tulevaisuus

Aloitin Lokin käytön touko-kesäkuussa versiolla 0.1. Tänään versio 1 ja jopa 1.1 ja 1.2 on jo julkaistu.

On myönnettävä, että versio 0.1 ei ollut tarpeeksi vakaa. Mutta 0.3 osoitti jo todellisia kypsyyden merkkejä, ja myöhemmät versiot (0.4, sitten 1.0) vain vahvistivat tätä vaikutelmaa.

1.0.0:n jälkeen kenelläkään ei voi olla mitään tekosyytä olla käyttämättä tätä upeaa työkalua.

Lisäparannuksien ei pitäisi koskea Lokia, vaan pikemminkin sen integrointia erinomaiseen Grafanaan. Itse asiassa Grafana 6.4:ssä on jo hyvä integrointi kojelautaan.

Äskettäin julkaistu Grafana 6.5 parantaa tätä integraatiota edelleen tunnistamalla lokin sisällön automaattisesti JSON-muodossa.

Alla oleva video näyttää pienen esimerkin tästä mekanismista:

Loki - tukkikeräys Prometheus-lähestymistapaa käyttäen
Grafanassa paljastettujen Loki-kielien käyttö

On mahdollista käyttää yhtä JSON-kentistä esimerkiksi seuraaviin:

  • linkit ulkoiseen työkaluun
  • lokin sisällön suodatus

Voit esimerkiksi napsauttaa traceId-painiketta siirtyäksesi Zipkiniin tai Jaegeriin.

Kuten tavallista, odotamme kommenttejasi ja kutsumme sinut siihen avoin webinaari, jossa keskustelemme DevOps-toimialan kehityksestä vuonna 2019 ja keskustelemme mahdollisista kehityspoluista vuodelle 2020.

Lähde: will.com