Pagpupugay, mga residente ng Khabrovsk! Sa bisperas ng pagsisimula ng isang bagong pagpapatala para sa kurso
Ang artikulong ito ay isang maikling panimula kay Loki. Proyekto Loki
Ang pangunahing inspirasyon para kay Loki ay
- gamit ang mga label upang mag-imbak ng data
- pagkonsumo ng kaunting mapagkukunan
Babalik tayo sa kung paano gumagana ang Prometheus at magbibigay ng ilang halimbawa ng paggamit nito sa konteksto ng Kubernetes.
Ang ilang mga salita tungkol sa Prometheus
Upang lubos na maunawaan kung paano gumagana ang Loki, mahalagang tumalikod at maalala nang kaunti ang tungkol sa Prometheus.
Ang isa sa mga natatanging tampok ng Prometheus ay ang pagkuha ng mga sukatan mula sa mga punto ng koleksyon (sa pamamagitan ng mga exporter) at pag-iimbak ng mga ito sa TSDB (Time Series Data Base), kasama ang pagdaragdag ng metadata sa anyo ng mga label.
Bakit kailangan mo ito
Kamakailan, ang Prometheus ay naging de facto na pamantayan sa mundo ng mga container at Kubernetes: ang pag-install nito ay napakasimple, at ang Kubernetes cluster ay may katutubong endpoint para sa Prometheus. Maaari ding kunin ng Prometheus ang mga sukatan mula sa mga application na naka-deploy sa isang container habang nag-iimbak ng mga partikular na label. Samakatuwid, ang pagsubaybay sa aplikasyon ay napakadaling ipatupad.
Sa kasamaang palad, wala pa ring solusyon sa turnkey para sa pamamahala ng log, at dapat kang makahanap ng solusyon para sa iyong sarili:
- pinamamahalaang serbisyo sa cloud para sa pagsentral ng mga log (AWS, Azure o Google)
- serbisyo sa pagsubaybay "pagsubaybay bilang isang serbisyo" (halimbawa, Datadog)
- paglikha ng iyong sariling serbisyo sa pagkolekta ng log.
Para sa pangatlong opsyon, tradisyonal kong ginamit ang Elasticsearch, sa kabila ng katotohanan na hindi ako palaging masaya dito (lalo na ang bigat at pagiging kumplikado ng pagsasaayos nito).
Ang Loki ay idinisenyo upang gawing simple ang pagpapatupad ayon sa mga sumusunod na prinsipyo:
- maging simple sa pagsisimula
- kumonsumo ng kaunting mapagkukunan
- magtrabaho nang nakapag-iisa nang walang anumang espesyal na pagpapanatili
- nagsisilbing karagdagan sa Prometheus upang tumulong sa mga pagsisiyasat ng bug
Gayunpaman, ang pagiging simple na ito ay nagmumula sa kapinsalaan ng ilang mga kompromiso. Isa sa mga ito ay ang hindi pag-index ng nilalaman. Samakatuwid, ang paghahanap ng teksto ay hindi masyadong mahusay o mayaman at hindi pinapayagan ang mga istatistika sa nilalaman ng teksto. Ngunit dahil gusto ni Loki na maging katumbas ng grep at pandagdag sa Prometheus, hindi ito kawalan.
Pagsisiyasat ng Insidente
Para mas maunawaan kung bakit hindi kailangan ni Loki ng pag-index, bumalik tayo sa paraan ng pagsisiyasat ng insidente na ginamit ng mga developer ng Loki:
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Ayusin!
(1 Babala → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fixing!)
Ang ideya ay nakakatanggap kami ng ilang uri ng alerto (Slack Notification, SMS, atbp.) at pagkatapos nito:
- tingnan ang mga dashboard ng Grafana
- tingnan ang mga sukatan ng serbisyo (halimbawa, sa Prometheus)
- tingnan ang mga entry sa log (halimbawa, sa Elasticsearch)
- baka tingnan ang mga ipinamamahaging bakas (Jaeger, Zipkin, atbp.)
- at sa wakas ay inaayos ang orihinal na problema.
Dito, sa kaso ng Grafana + Prometheus + Elasticsearch + Zipkin stack, kakailanganin mong gumamit ng apat na magkakaibang tool. Upang mabawasan ang oras, mainam na magawa ang lahat ng mga hakbang na ito gamit ang isang tool: Grafana. Kapansin-pansin na ang pamamaraang ito sa pananaliksik ay ipinatupad sa Grafana mula noong bersyon 6. Kaya, nagiging posible na ma-access ang data ng Prometheus nang direkta mula sa Grafana.
Explorer screen split sa pagitan ng Prometheus at Loki
Mula sa screen na ito maaari mong tingnan ang mga Loki log na nauugnay sa Prometheus metrics gamit ang split screen concept. Mula noong bersyon 6.5, pinapayagan ka ng Grafana na i-parse ang trace id sa mga entry ng Loki log upang sundan ang mga link sa iyong mga paboritong distributed tracing tool (Jaeger).
Lokal na pagsubok sa Loki
Ang pinakamadaling paraan upang subukan ang Loki nang lokal ay ang paggamit ng docker-compose. Ang docker-compose file ay matatagpuan sa Loki repository. Makukuha mo ang repositoryo gamit ang sumusunod na command git
:
$ git clone https://github.com/grafana/loki.git
Pagkatapos ay kailangan mong pumunta sa direktoryo ng produksyon:
$ cd production
Pagkatapos nito maaari mong makuha ang pinakabagong bersyon ng mga larawan ng Docker:
$ docker-compose pull
Sa wakas, ang Loki stack ay inilunsad gamit ang sumusunod na command:
$ docker-compose up
Arkitektura ng Loki
Narito ang isang maliit na diagram na may arkitektura ng Loki:
Mga Prinsipyo ng Arkitektura ng Loki
Ang web client ay nagpapatakbo ng mga application sa server, ang Promtail ay nangongolekta ng mga log at ipinapadala ang mga ito sa Loki, ang web client ay nagpapadala din ng metadata sa Loki. Pinagsasama-sama ni Loki ang lahat at ipinadala ito sa Grafana.
Inilunsad si Loki. Upang tingnan ang mga magagamit na bahagi, patakbuhin ang sumusunod na command:
$ docker ps
Sa kaso ng isang bagong naka-install na Docker, dapat ibalik ng command ang sumusunod na resulta:
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
Nakikita namin ang mga sumusunod na sangkap:
- Promtail: ahente na responsable para sa sentralisasyon ng mga log
- Grafana: isang sikat na tool sa dashboard
- Loki: Data Centralization Daemon
Bilang bahagi ng isang klasikong imprastraktura (halimbawa, batay sa mga virtual machine), dapat na i-deploy ang ahente ng Promtail sa bawat makina. Maaaring mai-install ang Grafana at Loki sa parehong makina.
Deployment sa Kubernetes
Ang pag-install ng mga bahagi ng Loki sa Kubernetes ay ang mga sumusunod:
- daemonSet para sa pag-deploy ng ahente ng Promtail sa bawat isa sa mga makina sa cluster ng server
- Deployment Loki
- at ang huli ay ang deployment ng Grafana.
Sa kabutihang palad, ang Loki ay magagamit bilang isang pakete ng Helm, na ginagawang madali itong i-deploy.
Pag-install sa pamamagitan ng Heml
Dapat ay na-install mo na ang Heml. Maaari itong ma-download mula sa GitHub repository ng proyekto. Ito ay naka-install sa pamamagitan ng pag-unpack ng archive na naaayon sa iyong arkitektura at pagdaragdag ng timon sa $PATH
.
Tandaan: Ang bersyon 3.0.0 ng Helm ay inilabas kamakailan. Dahil maraming pagbabago dito, pinapayuhan ang mambabasa na maghintay ng kaunti bago ito gamitin..
Pagdaragdag ng source para sa Helm
Ang unang hakbang ay idagdag ang "loki" na repository gamit ang sumusunod na command:
$ helm add loki https://grafana.github.io/loki/charts
Pagkatapos nito, maaari kang maghanap para sa mga pakete na pinangalanang "loki":
$ helm search loki
Resulta:
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...
Ang mga paketeng ito ay may mga sumusunod na tampok:
- pakete loki/loki tumutugma lamang sa server ng Loki
- pakete loki/fluent-bit nagbibigay-daan sa iyo na mag-deploy ng DaemonSet gamit ang fluent-bin upang mangolekta ng mga log sa halip na Promtail
- pakete loki/promtail naglalaman ng ahente ng koleksyon ng log file
- pakete loki/loki-stack, ay nagbibigay-daan sa iyong agad na i-deploy ang Loki kasama ng Promtail.
Pag-install ng Loki
Upang i-deploy ang Loki sa Kubernetes, patakbuhin ang sumusunod na command sa namespace na "monitoring":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Upang i-save sa disk, idagdag ang parameter --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Tandaan: kung gusto mong i-deploy ang Grafana sa parehong oras, pagkatapos ay idagdag ang parameter
--set grafana.enabled = true
Kapag pinatakbo mo ang utos na ito dapat mong makuha ang sumusunod na output:
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.
Sa pagtingin sa estado ng mga pod sa "monitoring" namespace, makikita natin na ang lahat ay na-deploy:
$ kubectl -n monitoring get pods -l release=loki
Resulta:
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
Ang lahat ng mga pod ay tumatakbo. Ngayon ay oras na upang gumawa ng ilang mga pagsubok!
Kumokonekta sa Grafana
Para kumonekta sa Grafana sa ilalim ng Kubernetes, kailangan mong magbukas ng tunnel sa pod nito. Nasa ibaba ang command upang buksan ang port 3000 para sa Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Ang isa pang mahalagang punto ay ang pangangailangan na mabawi ang password ng administrator ng Grafana. Ang password ay pinananatiling lihim loki-grafana
sa bukid .data.admin-user
sa base64 na format.
Upang maibalik ito, kailangan mong patakbuhin ang sumusunod na command:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Gamitin ang password na ito kasabay ng default na administrator account (admin).
Pagtukoy ng isang Loki data source sa Grafana
Una sa lahat, siguraduhin na ang Loki data source ay nagawa na (Configuration/Datasource).
Narito ang isang halimbawa:
Halimbawa ng pag-set up ng data source para sa Loki
Sa pamamagitan ng pag-click sa "Pagsubok" maaari mong suriin ang koneksyon sa Loki.
Gumagawa ng mga kahilingan kay Loki
Ngayon pumunta sa Grafana sa seksyong "I-explore". Kapag tumatanggap ng mga log mula sa mga container, nagdaragdag si Loki ng metadata mula sa Kubernetes. Kaya, nagiging posible na tingnan ang mga log ng isang partikular na lalagyan.
Halimbawa, upang piliin ang mga promtail container log, maaari mong gamitin ang sumusunod na query: {container_name = "promtail"}
.
Dito rin tandaan na piliin ang Loki data source.
Ibabalik ng query na ito ang aktibidad ng container gaya ng sumusunod:
Resulta ng query sa Grafana
Idagdag sa dashboard
Simula sa Grafana 6.4, maaari kang maglagay ng impormasyon ng log nang direkta sa dashboard. Pagkatapos nito, magagawa ng user na mabilis na lumipat sa pagitan ng bilang ng mga kahilingan sa kanyang site at mga bakas ng aplikasyon.
Nasa ibaba ang isang halimbawa ng isang dashboard na nagpapatupad ng pakikipag-ugnayang ito:
Sample dashboard na may Prometheus metrics at Loki logs
Kinabukasan ni Loki
Sinimulan kong gamitin ang Loki noong Mayo/Hunyo na may bersyon 0.1. Ngayon ang bersyon 1, at maging ang 1.1 at 1.2 ay inilabas na.
Dapat aminin na ang bersyon 0.1 ay hindi sapat na matatag. Ngunit ang 0.3 ay nagpakita na ng tunay na mga palatandaan ng kapanahunan, at ang mga kasunod na bersyon (0.4, pagkatapos ay 1.0) ay nagpalakas lamang sa impression na ito.
Pagkatapos ng 1.0.0, walang sinuman ang maaaring magkaroon ng anumang dahilan upang hindi gamitin ang kahanga-hangang tool na ito.
Ang mga karagdagang pagpapabuti ay hindi dapat tungkol sa Loki, ngunit sa halip ang pagsasama nito sa mahusay na Grafana. Sa katunayan, ang Grafana 6.4 ay mayroon nang mahusay na pagsasama sa mga dashboard.
Ang Grafana 6.5, na pinakawalan kamakailan, ay higit na pinapabuti ang pagsasamang ito sa pamamagitan ng awtomatikong pagkilala sa mga nilalaman ng log sa JSON na format.
Ang video sa ibaba ay nagpapakita ng isang maliit na halimbawa ng mekanismong ito:
Gamit ang mga Loki string na nakalantad sa Grafana
Nagiging posible na gamitin ang isa sa mga field ng JSON, halimbawa, para sa:
- mga link sa panlabas na tool
- pag-filter ng mga nilalaman ng log
Halimbawa, maaari kang mag-click sa traceId upang pumunta sa Zipkin o Jaeger.
Gaya ng dati, inaasahan namin ang iyong mga komento at iniimbitahan ka
Pinagmulan: www.habr.com