Tervehdys, habrovskilaiset! Uuden kurssille ilmoittautumisen alkamisen aattona
Tämä artikkeli on lyhyt johdatus Lokiin. Projekti Loki
Lokin tärkein inspiraatio oli
- 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:
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.
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-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:
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:
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:
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:
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
Lähde: will.com