Loki - casglu boncyffion gan ddefnyddio dull Prometheus

Cyfarchion, Khabrovites! Gan ragweld dechrau ymrestriad newydd ar gyfer y cwrs "Arferion ac offer DevOps" paratoi cyfieithiad o ddeunydd diddorol i chi.

Mae'r erthygl hon yn gyflwyniad byr i Loki. Prosiect Loki cefnogi gan Grafana ac mae wedi'i anelu at gasgliadau canolog o foncyffion (o weinyddion neu gynwysyddion).

Y prif ysbrydoliaeth i Loki oedd Prometheus gyda'r syniad o gymhwyso ei ddulliau o reoli logiau:

  • defnyddio labeli i storio data
  • defnydd isel o adnoddau

Byddwn yn dychwelyd at egwyddorion Prometheus ac yn rhoi rhai enghreifftiau o'i ddefnydd yng nghyd-destun Kubernetes.

Ychydig eiriau am Prometheus

Er mwyn deall yn iawn sut mae Loki yn gweithio, mae'n bwysig cymryd cam yn ôl ac ailymweld â Prometheus ychydig.

Un o nodweddion gwahaniaethol Prometheus yw echdynnu metrigau o fannau casglu (trwy allforwyr) a'u storio mewn TSDB (Cronfa Ddata Cyfres Amser, cronfa ddata cyfres amser) gan ychwanegu metadata ar ffurf labeli.

Pam ydych chi ei angen

Yn ddiweddar, mae Prometheus wedi dod yn safon de facto ym myd cynwysyddion a Kubernetes: mae ei osod yn syml iawn, ac mae gan glwstwr Kubernetes ddiweddbwynt i Prometheus i ddechrau. Gall Prometheus hefyd dynnu metrigau o gymwysiadau a ddefnyddir mewn cynhwysydd tra'n cynnal labeli penodol. Felly, mae monitro ceisiadau yn hawdd iawn i'w weithredu.

Yn anffodus, nid oes ateb un contractwr o hyd ar gyfer rheoli logiau, ac mae'n rhaid i chi ddod o hyd i ateb i chi'ch hun:

  • gwasanaeth cwmwl a reolir ar gyfer canoli logiau (AWS, Azure neu Google)
  • gwasanaeth monitro "monitro fel gwasanaeth" (er enghraifft, Datadog)
  • creu eich gwasanaeth casglu logiau eich hun.

Ar gyfer y trydydd opsiwn, rwyf wedi defnyddio Elasticsearch yn draddodiadol, er gwaethaf y ffaith nad oeddwn bob amser yn hapus ag ef (yn enwedig ei drymder a chymhlethdod y setup).

Dyluniwyd Loki i fod yn hawdd ei weithredu yn unol â'r egwyddorion canlynol:

  • fod yn hawdd i ddechrau
  • defnyddio ychydig o adnoddau
  • gweithio'n annibynnol heb unrhyw waith cynnal a chadw arbennig
  • gwasanaethu fel ychwanegiad i Prometheus i helpu gydag ymchwiliadau chwilod

Fodd bynnag, daw'r symlrwydd hwn ar draul rhai cyfaddawdau. Un ohonynt yw peidio â mynegeio'r cynnwys. Felly, nid yw chwilio testun yn effeithlon nac yn gyfoethog iawn ac nid yw'n caniatáu ichi gadw ystadegau ar gynnwys y testun. Ond gan fod Loki eisiau bod yn cyfateb i grep ac yn ategu Prometheus, nid yw hyn yn anfantais.

Ymchwiliad i ddigwyddiad

Er mwyn deall yn well pam nad oes angen mynegeio ar Loki, gadewch i ni fynd yn ôl at y dull ymchwilio i ddigwyddiadau a ddefnyddir gan ddatblygwyr Loki:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
1 Rhybudd → 2 Dangosfwrdd → 3 Ymholiad Adhoc → 4 Log Agregu → 5 Olrhain Dosbarthedig → 6 Trwsio!
(1 Rhybudd → 2 Dangosfwrdd → 3 Ymholiad Adhoc → 4 Log Agregu → 5 Olrhain Wedi'i Ddosbarthu → 6 Trwsio!)

Y syniad yw ein bod yn cael rhyw fath o rybudd (Hysbysiad Slack, SMS, ac ati) ac ar ôl hynny:

  • edrychwch ar ddangosfyrddau Grafana
  • edrych ar fetrigau gwasanaeth (er enghraifft, yn Prometheus)
  • edrych ar gofnodion log (er enghraifft, yn Elasticsearch)
  • efallai edrychwch ar olion gwasgaredig (Jaeger, Zipkin, ac ati)
  • ac yn olaf trwsio'r broblem wreiddiol.

Yma, yn achos stac Grafana + Prometheus + Elasticsearch + Zipkin, bydd yn rhaid i chi ddefnyddio pedwar teclyn gwahanol. Er mwyn arbed amser, byddai'n braf gallu gwneud yr holl gamau hyn gydag un offeryn: Grafana. Mae'n werth nodi bod y dull hwn o ymchwilio wedi'i roi ar waith yn Grafana ers fersiwn 6. Felly, mae'n dod yn bosibl cyrchu data Prometheus yn uniongyrchol o Grafana.

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Sgrin Explorer wedi'i hollti rhwng Prometheus a Loki

O'r sgrin hon, gallwch weld logiau yn Loki yn ymwneud â metrigau Prometheus gan ddefnyddio'r cysyniad sgrin hollt. Ers fersiwn 6.5, mae Grafana yn caniatáu ichi ddosrannu'r ID olrhain mewn cofnodion log Loki i ddilyn dolenni i'ch hoff offer olrhain dosbarthedig (Jaeger).

Prawf lleol Loki

Y ffordd hawsaf o brofi Loki yn lleol yw defnyddio docker-compose. Mae'r ffeil docker-compose wedi'i lleoli yn ystorfa Loki. Gallwch chi gael yr ystorfa gyda'r gorchymyn canlynol git:

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

Yna mae angen i chi newid i'r cyfeiriadur cynhyrchu:

$ cd production

Ar ôl hynny, gallwch chi gael y delweddau Docker diweddaraf:

$ docker-compose pull

Yn olaf, mae'r pentwr Loki yn cael ei gychwyn gyda'r gorchymyn canlynol:

$ docker-compose up

pensaernïaeth Loki

Dyma ddiagram bach gyda phensaernïaeth Loki:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Egwyddorion Pensaernïaeth Loki

Mae'r cleient gwe yn rhedeg ceisiadau ar y gweinydd, mae Promtail yn casglu logiau ac yn eu hanfon at Loki, mae'r cleient gwe hefyd yn anfon metadata i Loki. Mae Loki yn agregu popeth ac yn ei drosglwyddo i Grafana.
Mae Loki yn rhedeg. I weld y cydrannau sydd ar gael, rhedeg y gorchymyn canlynol:

$ docker ps

Yn achos Dociwr newydd ei osod, dylai'r gorchymyn ddychwelyd yr allbwn canlynol:

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

Rydym yn gweld y cydrannau canlynol:

  • Promtail: asiant sy'n gyfrifol am ganoli logiau
  • Grafana: yr offeryn dangosfwrdd enwog
  • Loki: daemon canoli data

Fel rhan o seilwaith clasurol (er enghraifft, yn seiliedig ar beiriannau rhithwir), rhaid defnyddio asiant Promtail ar bob peiriant. Gellir gosod Grafana a Loki ar yr un peiriant.

Anfon i Kubernetes

Bydd gosod cydrannau Loki yn Kubernetes fel a ganlyn:

  • daemonSet i ddefnyddio'r asiant Promtail ar bob un o'r peiriannau yn y clwstwr gweinydd
  • Defnydd Loki
  • a'r olaf yw defodiad Grafana.

Yn ffodus, mae Loki ar gael fel pecyn Helm, gan ei gwneud hi'n hawdd ei ddefnyddio.

Gosod trwy Heml

Dylech fod wedi gosod Heml eisoes. Gellir ei lawrlwytho o ystorfa GitHub y prosiect. Fe'i gosodir trwy echdynnu'r archif sy'n briodol i'ch pensaernïaeth ac ychwanegu llyw ato $PATH.

Nodyn: rhyddhawyd fersiwn 3.0.0 o Helm yn ddiweddar. Gan fod llawer o newidiadau wedi bod ynddo, cynghorir y darllenydd i aros ychydig cyn dechrau ei ddefnyddio..

Ychwanegu ffynhonnell ar gyfer Helm

Y cam cyntaf yw ychwanegu'r ystorfa "loki" gyda'r gorchymyn canlynol:

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

Ar ôl hynny, gallwch chwilio am becynnau o'r enw “loki”:

$ helm search loki

Canlyniad:

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

Mae gan y pecynnau hyn y nodweddion canlynol:

  • y pecyn loki/loki yn cyfateb i'r gweinydd Loki yn unig
  • y pecyn loki/did rhugl yn caniatáu i chi ddefnyddio DaemonSet gan ddefnyddio fluent-bin i gasglu logiau yn lle Promtail
  • y pecyn loki/promtail yn cynnwys asiant casglu boncyffion
  • y pecyn loki/loki-stack, yn eich galluogi i ddefnyddio Loki ar unwaith ynghyd â Promtail.

Gosod Loki

I ddefnyddio Loki i Kubernetes, rhedeg y gorchymyn canlynol yn y gofod enw “monitro”:

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

I arbed ar ddisg, ychwanegwch yr opsiwn --set loki.persistence.enabled = true:

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

Nodyn: os ydych chi am ddefnyddio Grafana ar yr un pryd, yna ychwanegwch y paramedr --set grafana.enabled = true

Pan fyddwch chi'n rhedeg y gorchymyn hwn, dylech gael yr allbwn canlynol:

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.

Wrth edrych ar gyflwr y codennau yn y gofod enwau “monitro”, gallwn weld bod popeth yn cael ei ddefnyddio:

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

Canlyniad:

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

Mae pob cod yn rhedeg. Nawr mae'n bryd gwneud rhai profion!

Cysylltu â Grafana

Er mwyn cysylltu â Grafana o dan Kubernetes, mae angen ichi agor twnnel i'w goden. Yn dilyn mae'r gorchymyn i agor porthladd 3000 ar gyfer pod Grafana:

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

Pwynt pwysig arall yw'r angen i adennill cyfrinair gweinyddwr Grafana. Cedwir y cyfrinair yn gyfrinachol loki-grafana yn y maes .data.admin-user mewn fformat base64.

Er mwyn ei adfer, mae angen i chi redeg y gorchymyn canlynol:

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

Defnyddiwch y cyfrinair hwn ar y cyd â'r cyfrif gweinyddwr rhagosodedig (gweinyddwr).

Diffiniad ffynhonnell ddata Loki yn Grafana

Yn gyntaf oll, gwnewch yn siŵr bod ffynhonnell ddata Loki (Configuration / Datasource) yn cael ei chreu.
Dyma enghraifft:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Enghraifft o sefydlu ffynhonnell ddata ar gyfer Loki

Trwy glicio ar “Test” gallwch chi brofi'r cysylltiad â Loki.

Gwneud ceisiadau i Loki

Nawr ewch i Grafana ac ewch i'r adran “Archwilio”. Wrth dderbyn logiau o gynwysyddion, mae Loki yn ychwanegu metadata o Kubernetes. Felly, mae'n bosibl gweld logiau cynhwysydd penodol.

Er enghraifft, i ddewis logiau cynhwysydd promtail, gallwch ddefnyddio'r ymholiad canlynol: {container_name = "promtail"}.
Peidiwch ag anghofio dewis ffynhonnell ddata Loki yma hefyd.

Bydd yr ymholiad hwn yn dychwelyd gweithgaredd cynhwysydd fel a ganlyn:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Canlyniad ymholiad yn Grafana

Ychwanegu at y dangosfwrdd

Gan ddechrau gyda Grafana 6.4, mae'n bosibl rhoi gwybodaeth log yn uniongyrchol ar y dangosfwrdd. Ar ôl hynny, bydd y defnyddiwr yn gallu newid yn gyflym rhwng nifer y ceisiadau ar ei wefan i olion cais.

Isod mae dangosfwrdd enghreifftiol sy'n gweithredu'r rhyngweithiad hwn:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Dangosfwrdd enghreifftiol gyda metrigau Prometheus a logiau Loki

Dyfodol Loki

Dechreuais ddefnyddio Loki yn ôl ym mis Mai / Mehefin gyda fersiwn 0.1. Mae fersiwn 1 eisoes wedi'i rhyddhau heddiw, a hyd yn oed 1.1 a 1.2.

Rhaid cyfaddef nad oedd fersiwn 0.1 yn ddigon sefydlog. Ond roedd 0.3 eisoes yn dangos arwyddion gwirioneddol o aeddfedrwydd, ac roedd y fersiynau nesaf (0.4, yna 1.0) yn atgyfnerthu'r argraff hon yn unig.

Ar ôl 1.0.0, ni all neb gael esgus i beidio â defnyddio'r offeryn gwych hwn.

Ni ddylai gwelliannau pellach ymwneud â Loki, ond yn hytrach ei integreiddio â'r Grafana rhagorol. Mewn gwirionedd, mae Grafana 6.4 eisoes wedi integreiddio'n dda â dangosfyrddau.

Mae Grafana 6.5, a ryddhawyd yn ddiweddar, yn gwella'r integreiddio hwn ymhellach trwy gydnabod cynnwys logiau yn fformat JSON yn awtomatig.

Mae'r fideo isod yn dangos enghraifft fach o'r mecanwaith hwn:

Loki - casglu boncyffion gan ddefnyddio dull Prometheus
Gan ddefnyddio tannau Loki wedi'u rendro yn Grafana

Mae'n dod yn bosibl defnyddio un o'r meysydd JSON, er enghraifft, i:

  • dolenni i declyn allanol
  • hidlo cynnwys log

Er enghraifft, gallwch glicio ar traceId i fynd i Zipkin neu Jaeger.

Yn ôl yr arfer, edrychwn ymlaen at eich sylwadau a'ch gwahodd i gweminar agored, lle byddwn yn siarad am sut mae'r diwydiant DevOps wedi datblygu yn ystod 2019 ac yn trafod llwybrau datblygu posibl ar gyfer 2020.

Ffynhonnell: hab.com