Loki - kumpulan log ngagunakeun pendekatan Prometheus

Salam, warga Khabrovsk! Dina wengi mimiti enrollment anyar pikeun kursus "Praktik sareng alat DevOps" Kami parantos nyiapkeun tarjamahan tina bahan anu pikaresepeun pikeun anjeun.

Artikel ieu mangrupa bubuka pondok pikeun Loki. Proyék Loki dirojong ku Grafana sareng ditujukeun pikeun ngumpulkeun log terpusat (tina server atanapi wadah).

Inspirasi utama pikeun Loki éta Prometheus kalayan ide pikeun nerapkeun pendekatan na pikeun ngatur log:

  • ngagunakeun labél pikeun nyimpen data
  • konsumsi sababaraha sumberdaya

Urang bakal balik deui ka kumaha Prometheus jalan sareng masihan sababaraha conto panggunaanana dina konteks Kubernetes.

Sababaraha kecap ngeunaan Prometheus

Pikeun pinuh ngartos kumaha Loki jalan, hal anu penting pikeun nyandak undak mundur tur inget saeutik ngeunaan Prometheus.

Salah sahiji ciri has Prometheus nyaéta ékstraksi métrik tina titik kempelan (via eksportir) sareng nyimpenna dina TSDB (Time Series Data Base), ditambah metadata dina bentuk labél.

Naha kunaon diperyogikeun

Anyar-anyar ieu, Prometheus parantos janten standar de facto di dunya wadah sareng Kubernetes: pamasanganna saderhana pisan, sareng klaster Kubernetes hadir sareng titik akhir asli pikeun Prometheus. Prometheus ogé tiasa ékstrak métrik tina aplikasi anu dipasang dina wadah bari nyimpen labél khusus. Ku alatan éta, ngawaskeun aplikasi gampang pisan pikeun dilaksanakeun.

Hanjakalna, masih teu aya solusi turnkey pikeun manajemén log, sareng anjeun kedah milarian solusi pikeun diri anjeun:

  • jasa awan junun pikeun log sentralisasi (AWS, Azure atanapi Google)
  • jasa ngawaskeun "monitoring salaku jasa" (contona, Datadog)
  • nyieun jasa ngumpulkeun log anjeun sorangan.

Pikeun pilihan katilu, kuring tradisional dipaké Elasticsearch, sanajan kanyataan yén kuring teu salawasna senang jeung eta (utamana heaviness sarta pajeulitna konfigurasi).

Loki dirancang pikeun nyederhanakeun palaksanaan dumasar kana prinsip-prinsip ieu:

  • janten basajan pikeun ngamimitian
  • meakeun sababaraha sumber
  • dianggo sacara mandiri tanpa pangropéa khusus
  • ngawula salaku tambahan pikeun Prometheus pikeun mantuan kalawan investigations bug

Sanajan kitu, kesederhanaan ieu asalna di expense sababaraha compromises. Salah sahijina nyaéta henteu indéks eusi. Ku alatan éta, pilarian téks teu pisan efisien atawa euyeub tur teu ngidinan statistik dina eusi téks. Tapi saprak Loki hayang jadi sarua grep sarta pelengkap Prometheus, ieu teu disadvantage a.

Investigation Kajadian

Pikeun langkung ngartos naha Loki henteu peryogi indéks, hayu urang balik deui ka metode panyelidikan kajadian anu dianggo ku pamekar Loki:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
1 Waspada → 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!)

Gagasanna nyaéta yén kami nampi sababaraha jinis waspada (Slack Notification, SMS, jsb) sareng saatosna:

  • tingali dina dasbor Grafana
  • tingali metrik jasa (contona, dina Prometheus)
  • tingali éntri log (contona, dina Elasticsearch)
  • meureun nyandak katingal dina ngambah disebarkeun (Jaeger, Zipkin, jsb)
  • sarta tungtungna ngalereskeun masalah aslina.

Di dieu, dina kasus tumpukan Grafana + Prometheus + Elasticsearch + Zipkin, anjeun kedah nganggo opat alat anu béda. Pikeun ngirangan waktos, langkung saé tiasa ngalaksanakeun sagala léngkah ieu nganggo hiji alat: Grafana. Eta sia noting yén pendekatan ieu panalungtikan geus dilaksanakeun dina Grafana saprak versi 6. Ku kituna, éta mungkin pikeun ngakses data Prometheus langsung ti Grafana.

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Pamisah layar Explorer antara Prometheus sareng Loki

Tina layar ieu anjeun tiasa ningali log Loki anu aya hubunganana sareng métrik Prometheus nganggo konsép layar pamisah. Kusabab vérsi 6.5, Grafana ngamungkinkeun anjeun nga-parse id jejak dina éntri log Loki pikeun nuturkeun tautan kana alat palacak anu disebarkeun karesep anjeun (Jaeger).

tés Loki lokal

Cara panggampangna pikeun nguji Loki sacara lokal nyaéta ngagunakeun docker-compose. Docker-compose file aya dina gudang Loki. Anjeun tiasa kéngingkeun gudang nganggo paréntah di handap ieu git:

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

Teras anjeun kedah angkat ka diréktori produksi:

$ cd production

Saatos ieu anjeun tiasa nampi versi panganyarna tina gambar Docker:

$ docker-compose pull

Tungtungna, tumpukan Loki diluncurkeun ku paréntah di handap ieu:

$ docker-compose up

Arsitéktur Loki

Ieu diagram leutik sareng arsitéktur Loki:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Prinsip Arsitéktur Loki

Klién wéb ngajalankeun aplikasi dina server, Promtail ngumpulkeun log sareng ngirim ka Loki, klien wéb ogé ngirim metadata ka Loki. Loki aggregates sagalana jeung transmits ka Grafana.
Loki dibuka. Pikeun ningali komponén anu sayogi, jalankeun paréntah di handap ieu:

$ docker ps

Dina kasus Docker anu nembé dipasang, paréntahna kedah uih deui hasil ieu:

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

Urang ningali komponén di handap ieu:

  • Promtail: agén jawab centralizing log
  • Grafana: alat dasbor anu kasohor
  • Loki: Daemon Sentralisasi Data

Salaku bagian tina infrastruktur Palasik (Contona, dumasar kana mesin virtual), agén Promtail kudu deployed on unggal mesin. Grafana sareng Loki tiasa dipasang dina mesin anu sami.

Panyebaran ka Kubernetes

Masang komponén Loki dina Kubernetes bakal kieu:

  • daemonSet pikeun nyebarkeun agén Promtail dina unggal mesin dina kluster server
  • Panyebaran Loki
  • sareng anu terakhir nyaéta panyebaran Grafana.

Kabeneran, Loki sayogi salaku pakét Helm, sahingga gampang disebarkeun.

Pamasangan via Heml

Anjeun kedahna parantos dipasang Heml. Éta tiasa diunduh tina gudang GitHub proyék. Éta dipasang ku ngabongkar arsip anu cocog sareng arsitéktur anjeun sareng nambihan helm $PATH.

Catetan: Vérsi 3.0.0 Helm dirilis anyar. Kusabab aya seueur parobihan kana éta, pamaca disarankan pikeun ngantosan sakedik sateuacan dianggo..

Nambahkeun sumber pikeun Helm

Léngkah munggaran nyaéta nambihan gudang "loki" nganggo paréntah di handap ieu:

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

Saatos ieu, anjeun tiasa milarian bungkusan anu namina "loki":

$ helm search loki

Hasil:

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 ieu ngagaduhan fitur ieu:

  • bungkusan loki/loki cocog server Loki wungkul
  • bungkusan loki / béntés-bit ngidinan Anjeun pikeun nyebarkeun DaemonSet maké béntés-bin pikeun ngumpulkeun log tinimbang Promtail
  • bungkusan loki / promtail ngandung agén kumpulan file log
  • bungkusan loki / loki-tumpukan, ngamungkinkeun anjeun langsung nyebarkeun Loki sareng Promtail.

Masang Loki

Pikeun nyebarkeun Loki ka Kubernetes, jalankeun paréntah di handap ieu dina ruang ngaran "monitoring":

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

Pikeun nyimpen kana disk, tambahkeun parameter --set loki.persistence.enabled = true:

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

Catetan: upami anjeun hoyong nyebarkeun Grafana dina waktos anu sami, teras tambahkeun parameter --set grafana.enabled = true

Nalika anjeun ngajalankeun paréntah ieu anjeun kedah nampi kaluaran ieu:

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.

Ningali kaayaan pods dina "monitoring" namespace, urang tiasa ningali yén sadayana disebarkeun:

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

Hasil:

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

Kabéh pods ngajalankeun. Ayeuna waktuna pikeun ngalakukeun sababaraha tés!

Nyambung ka Grafana

Pikeun nyambung ka Grafana handapeun Kubernetes, anjeun kedah muka torowongan kana pod na. Di handap ieu paréntah pikeun muka port 3000 pikeun pod Grafana:

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

Titik penting anu sanés nyaéta kabutuhan pikeun ngabalikeun sandi administrator Grafana. Sandi dirahasiakeun loki-grafana di sawah .data.admin-user dina format base64.

Pikeun mulangkeunana, anjeun kedah ngajalankeun paréntah di handap ieu:

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

Anggo sandi ieu babarengan sareng akun administrator standar (admin).

Nangtukeun sumber data Loki di Grafana

Anu mimiti, pastikeun yén sumber data Loki geus dijieun (Konfigurasi / Sumber Data).
Ieu conto:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Conto nyetel sumber data pikeun Loki

Ku ngaklik "Test" anjeun tiasa pariksa sambungan sareng Loki.

Nyieun requests ka Loki

Ayeuna angkat ka Grafana ka bagian "Jelajah". Nalika nampi log tina wadahna, Loki nambihan metadata ti Kubernetes. Ku kituna, janten mungkin pikeun nempo log tina wadahna husus.

Contona, pikeun milih log wadah promtail, anjeun tiasa nganggo pamundut ieu: {container_name = "promtail"}.
Di dieu ogé émut pikeun milih sumber data Loki.

Paménta ieu bakal mulangkeun kagiatan wadah sapertos kieu:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Hasil pamundut di Grafana

Tambahkeun ka dasbor

Dimimitian ku Grafana 6.4, anjeun tiasa nempatkeun inpormasi log langsung dina dasbor. Saatos ieu, pangguna bakal tiasa gancang ngalih antara jumlah pamundut dina situs sareng ngambah aplikasi na.

Di handap ieu conto dasbor anu ngalaksanakeun interaksi ieu:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Sampel dasbor sareng métrik Prometheus sareng log Loki

Kahareup Loki

Kuring mimiti ngagunakeun Loki deui dina Méi / Juni kalawan versi 0.1. Dinten ayeuna versi 1, komo 1.1 sareng 1.2 parantos dileupaskeun.

Ieu kudu ngaku yen versi 0.1 teu cukup stabil. Tapi 0.3 geus némbongkeun tanda nyata kematangan, sarta versi saterusna (0.4, lajeng 1.0) ngan strengthened gambaran ieu.

Saatos 1.0.0, teu aya anu tiasa gaduh alesan pikeun henteu nganggo alat anu saé ieu.

Perbaikan salajengna henteu kedah ngeunaan Loki, tapi integrasina sareng Grafana anu saé. Nyatana, Grafana 6.4 parantos ngagaduhan integrasi anu saé sareng dasbor.

Grafana 6.5, anu dileupaskeun anyar-anyar ieu, ningkatkeun integrasi ieu ku cara otomatis ngenalkeun eusi log dina format JSON.

Video di handap ieu nunjukkeun conto leutik mékanisme ieu:

Loki - kumpulan log ngagunakeun pendekatan Prometheus
Ngagunakeun string Loki kakeunaan dina Grafana

Janten mungkin ngagunakeun salah sahiji widang JSON, contona, pikeun:

  • Tumbu ka alat éksternal
  • nyaring eusi log

Contona, anjeun tiasa klik traceId pikeun muka Zipkin atanapi Jaeger.

Sakumaha biasa, kami ngarepkeun koméntar anjeun sareng ngajak anjeun muka webinar, dimana urang bakal ngobrol ngeunaan kumaha industri DevOps dikembangkeun salami 2019 sareng ngabahas kamungkinan jalur pangwangunan pikeun 2020.

sumber: www.habr.com