Loki - koleksi log nggunakake pendekatan Prometheus

Salam, warga Khabrovsk! Ing Kawa saka wiwitan enrollment anyar kanggo mesthi "Praktik lan alat DevOps" Kita wis nyiapake terjemahan materi sing menarik kanggo sampeyan.

Artikel iki minangka introduksi singkat kanggo Loki. Proyek Loki didhukung dening Grafana lan ngarahake koleksi log terpusat (saka server utawa wadhah).

Inspirasi utama kanggo Loki yaiku Prometheus kanthi ide kanggo ngetrapake pendekatan kanggo manajemen log:

  • nggunakake label kanggo nyimpen data
  • konsumsi sawetara sumber daya

Kita bakal bali menyang cara kerja Prometheus lan menehi sawetara conto panggunaan ing konteks Kubernetes.

Sawetara tembung babagan Prometheus

Kanggo ngerti kanthi lengkap babagan cara kerja Loki, penting kanggo mundur lan ngelingi babagan Prometheus.

Salah siji fitur khas Prometheus yaiku ekstraksi metrik saka titik koleksi (liwat eksportir) lan nyimpen ing TSDB (Time Series Data Base), kanthi tambahan metadata ing wangun label.

Napa perlu

Bubar, Prometheus wis dadi standar de facto ing donya kontaner lan Kubernetes: instalasi banget prasaja, lan kluster Kubernetes nerangake karo endpoint native kanggo Prometheus. Prometheus uga bisa ngekstrak metrik saka aplikasi sing dipasang ing wadhah nalika nyimpen label tartamtu. Mulane, ngawasi aplikasi gampang banget kanggo dileksanakake.

Sayange, isih ora ana solusi turnkey kanggo manajemen log, lan sampeyan kudu nemokake solusi dhewe:

  • layanan awan sing ngatur kanggo log sentralisasi (AWS, Azure utawa Google)
  • layanan ngawasi "monitoring minangka layanan" (contone, Datadog)
  • nggawe layanan koleksi log dhewe.

Kanggo pilihan katelu, aku nggunakake tradisional Elasticsearch, senadyan kasunyatan sing aku ora tansah seneng karo (utamané abot lan kerumitan konfigurasi).

Loki dirancang kanggo nyederhanakake implementasine miturut prinsip ing ngisor iki:

  • dadi prasaja kanggo miwiti
  • nggunakake sawetara sumber daya
  • makarya kanthi mandiri tanpa pangopènan khusus
  • dadi tambahan kanggo Prometheus kanggo bantuan karo investigasi bug

Nanging, kesederhanaan iki nyebabake sawetara kompromi. Salah sijine yaiku ora ngindeks isi. Mulane, panelusuran teks ora banget efisien utawa sugih lan ora ngidini statistik babagan isi teks. Nanging amarga Loki pengin dadi padha karo grep lan nglengkapi Prometheus, iki ora dadi kerugian.

Investigasi kedadean

Kanggo luwih ngerti kenapa Loki ora mbutuhake indeksasi, ayo bali menyang metode investigasi kedadeyan sing digunakake para pangembang Loki:

Loki - koleksi log nggunakake pendekatan Prometheus
1 Lansiran → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 Warning → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fixing!)

Ide kasebut yaiku yen kita nampa sawetara jinis tandha (Kabar Slack, SMS, lsp) lan sawise iku:

  • katon ing dashboard Grafana
  • deleng metrik layanan (contone, ing Prometheus)
  • deleng entri log (contone, ing Elasticsearch)
  • bisa uga ndeleng jejak sing disebarake (Jaeger, Zipkin, lsp.)
  • lan pungkasanipun ndandani masalah asli.

Ing kene, ing kasus tumpukan Grafana + Prometheus + Elasticsearch + Zipkin, sampeyan kudu nggunakake papat alat sing beda. Kanggo nyuda wektu, luwih becik bisa nindakake kabeh langkah kasebut kanthi nggunakake siji alat: Grafana. Wigati dicathet menawa pendekatan riset iki wis dileksanakake ing Grafana wiwit versi 6. Mangkono, dadi bisa ngakses data Prometheus langsung saka Grafana.

Loki - koleksi log nggunakake pendekatan Prometheus
Pamisah layar Explorer antarane Prometheus lan Loki

Saka layar iki sampeyan bisa ndeleng log Loki sing ana gandhengane karo metrik Prometheus nggunakake konsep layar pamisah. Wiwit versi 6.5, Grafana ngidini sampeyan ngurai id jejak ing entri log Loki kanggo ngetutake pranala menyang alat tracing sing disebarake (Jaeger).

Tes Loki lokal

Cara paling gampang kanggo nyoba Loki sacara lokal yaiku nggunakake docker-compose. File docker-compose dumunung ing repositori Loki. Sampeyan bisa entuk repositori nggunakake printah ing ngisor iki git:

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

Banjur sampeyan kudu pindhah menyang direktori produksi:

$ cd production

Sawise iki, sampeyan bisa entuk versi paling anyar saka gambar Docker:

$ docker-compose pull

Pungkasan, tumpukan Loki diluncurake kanthi printah ing ngisor iki:

$ docker-compose up

arsitektur Loki

Punika diagram cilik kanthi arsitektur Loki:

Loki - koleksi log nggunakake pendekatan Prometheus
Prinsip Arsitektur Loki

Klien web mbukak aplikasi ing server, Promtail ngumpulake log lan dikirim menyang Loki, klien web uga ngirim metadata menyang Loki. Loki aggregates kabeh lan ngirim menyang Grafana.
Loki diluncurake. Kanggo ndeleng komponen sing kasedhiya, jalanake printah ing ngisor iki:

$ docker ps

Ing kasus Docker sing anyar diinstal, printah kasebut kudu ngasilake asil ing ngisor iki:

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

Kita ndeleng komponen ing ngisor iki:

  • Promtail: agen sing tanggung jawab kanggo log sentralisasi
  • Grafana: alat dashboard sing misuwur
  • Loki: Daemon Sentralisasi Data

Minangka bagéan saka infrastruktur klasik (contone, adhedhasar mesin virtual), agen Promtail kudu disebarake ing saben mesin. Grafana lan Loki bisa diinstal ing mesin sing padha.

Penyebaran menyang Kubernetes

Nginstal komponen Loki ing Kubernetes bakal kaya ing ngisor iki:

  • daemonSet kanggo masang agen Promtail ing saben mesin ing kluster server
  • Penyebaran Loki
  • lan sing pungkasan yaiku penyebaran Grafana.

Untunge, Loki kasedhiya minangka paket Helm, supaya gampang disebarake.

Instalasi liwat Heml

Sampeyan kudu wis diinstal Heml. Bisa diundhuh saka repositori GitHub proyek. Iki diinstal kanthi mbongkar arsip sing cocog karo arsitektur sampeyan lan nambah setir $PATH.

Wigati: versi 3.0.0 saka Helm dirilis bubar. Amarga ana akeh owah-owahan, sing maca disaranake ngenteni sawetara sadurunge nggunakake..

Nambahake sumber kanggo Helm

Langkah pisanan kanggo nambah repositori "loki" nggunakake printah ing ngisor iki:

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

Sawise iki, sampeyan bisa nggoleki paket sing jenenge "loki":

$ helm search loki

Asil:

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

Paket kasebut duwe fitur ing ngisor iki:

  • paket loki/loki cocog server Loki mung
  • paket loki / lancar-bit ngijini sampeyan kanggo masang DaemonSet nggunakake fluent-bin kanggo ngumpulake log tinimbang Promtail
  • paket loki/promtail ngemot agen koleksi file log
  • paket loki / loki-tumpukan, ngidini sampeyan langsung masang Loki bebarengan karo Promtail.

Nginstal Loki

Kanggo masang Loki menyang Kubernetes, jalanake printah ing ngisor iki ing ruang jeneng "monitoring":

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

Kanggo nyimpen menyang disk, nambah parameter --set loki.persistence.enabled = true:

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

Wigati: yen sampeyan pengin masang Grafana ing wektu sing padha, banjur tambahake parameter kasebut --set grafana.enabled = true

Nalika sampeyan mbukak printah iki, sampeyan kudu entuk output ing ngisor iki:

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.

Deleng kahanan polong ing ruang jeneng "ngawasi", kita bisa ndeleng manawa kabeh wis dipasang:

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

Asil:

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

Kabeh polong mlaku. Saiki wektune kanggo nindakake sawetara tes!

Nyambung menyang Grafana

Kanggo nyambung menyang Grafana ing Kubernetes, sampeyan kudu mbukak trowongan menyang pod. Ing ngisor iki prentah kanggo mbukak port 3000 kanggo pod Grafana:

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

Titik penting liyane yaiku kudu mbalekake sandhi administrator Grafana. Sandi dirahasiakake loki-grafana ing lapangan .data.admin-user ing format base64.

Kanggo mulihake, sampeyan kudu mbukak printah ing ngisor iki:

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

Gunakake sandhi iki bebarengan karo akun administrator standar (admin).

Nemtokake sumber data Loki ing Grafana

Kaping pisanan, priksa manawa sumber data Loki wis digawe (Konfigurasi / Sumber Data).
Punika conto:

Loki - koleksi log nggunakake pendekatan Prometheus
Conto nyetel sumber data kanggo Loki

Kanthi ngeklik "Test" sampeyan bisa mriksa sambungan karo Loki.

Nggawe panjalukan kanggo Loki

Saiki pindhah menyang Grafana menyang bagean "Jelajahi". Nalika nampa log saka wadhah, Loki nambah metadata saka Kubernetes. Mangkono, dadi bisa kanggo ndeleng log saka wadhah tartamtu.

Contone, kanggo milih log wadhah promtail, sampeyan bisa nggunakake pitakon ing ngisor iki: {container_name = "promtail"}.
Kene uga elinga kanggo milih sumber data Loki.

Pitakonan iki bakal ngasilake aktivitas wadah kaya ing ngisor iki:

Loki - koleksi log nggunakake pendekatan Prometheus
Asil pitakon ing Grafana

Tambah ing dashboard

Miwiti karo Grafana 6.4, sampeyan bisa nyelehake informasi log langsung ing dashboard. Sawise iki, pangguna bakal bisa kanthi cepet ngalih ing antarane jumlah panjalukan ing situs lan jejak aplikasi.

Ing ngisor iki conto dashboard sing ngetrapake interaksi iki:

Loki - koleksi log nggunakake pendekatan Prometheus
Dasbor conto karo metrik Prometheus lan log Loki

Masa depan Loki

Aku miwiti nggunakake Loki bali ing Mei / Juni karo versi 0.1. Dina iki versi 1, malah 1.1 lan 1.2 wis dirilis.

Sampeyan kudu ngakoni manawa versi 0.1 ora cukup stabil. Nanging 0.3 wis nuduhake pratandha nyata kadewasan, lan versi sakteruse (0.4, banjur 1.0) mung nguatake kesan iki.

Sawise 1.0.0, ora ana sing bisa duwe alesan kanggo ora nggunakake alat sing apik iki.

Dandan luwih ora kudu babagan Loki, nanging integrasi karo Grafana sing apik banget. Nyatane, Grafana 6.4 wis duwe integrasi sing apik karo dasbor.

Grafana 6.5, sing dirilis bubar, nambah integrasi iki kanthi otomatis ngenali isi log ing format JSON.

Video ing ngisor iki nuduhake conto cilik mekanisme iki:

Loki - koleksi log nggunakake pendekatan Prometheus
Nggunakake strings Loki kapapar ing Grafana

Sampeyan bisa nggunakake salah sawijining lapangan JSON, contone, kanggo:

  • pranala menyang alat external
  • nyaring isi log

Contone, sampeyan bisa ngeklik traceId kanggo pindhah menyang Zipkin utawa Jaeger.

Kaya biasane, kita ngarepake komentar lan ngajak sampeyan mbukak webinar, ing ngendi kita bakal ngomong babagan carane industri DevOps berkembang ing taun 2019 lan ngrembug kemungkinan dalan pangembangan kanggo 2020.

Source: www.habr.com