Локи - Прометей аргыг ашиглан бүртгэл цуглуулах

Сайн байцгаана уу, Хабаровскийн оршин суугчид! Сургалтын шинэ элсэлт эхлэхийн өмнөхөн "DevOps практик ба хэрэгслүүд" Бид танд сонирхолтой материалын орчуулгыг бэлдлээ.

Энэ нийтлэл нь Локигийн товч танилцуулга юм. Локи төсөл Графана дэмжсэн логуудыг (сервер эсвэл контейнерээс) төвлөрсөн цуглуулахад чиглэгддэг.

Локигийн гол урам зориг байсан Prometheus Бүртгэлийн менежментэд түүний арга барилыг ашиглах санаатай:

  • өгөгдлийг хадгалахын тулд шошго ашиглах
  • цөөн нөөцийн хэрэглээ

Бид Prometheus хэрхэн ажилладаг талаар эргэн харж, Kubernetes-ийн контекстэд ашиглах зарим жишээг өгөх болно.

Прометейгийн тухай хэдэн үг

Локи хэрхэн ажилладагийг бүрэн ойлгохын тулд нэг алхам ухарч, Прометейгийн талаар бага зэрэг санах нь чухал юм.

Prometheus-ийн нэг онцлог шинж чанар нь цуглуулах цэгүүдээс хэмжигдэхүүнүүдийг (экспортлогчоор дамжуулан) гаргаж аваад TSDB (Time Series Data Base) -д хадгалдаг бөгөөд шошго хэлбэрээр мета өгөгдлийг нэмдэг.

Яагаад хэрэгтэй юм бэ?

Саяхан Prometheus нь чингэлэг ба Кубернетын ертөнцөд де факто стандарт болсон: түүний суурилуулалт маш энгийн бөгөөд Kubernetes кластер нь Prometheus-д зориулсан үндсэн төгсгөлийн цэгтэй ирдэг. Prometheus мөн тодорхой шошгыг хадгалахын зэрэгцээ саванд байрлуулсан програмуудаас хэмжүүрүүдийг гаргаж авах боломжтой. Тиймээс програмын хяналтыг хэрэгжүүлэхэд маш хялбар байдаг.

Харамсалтай нь бүртгэлийн менежментийн түлхүүр гардуулах шийдэл хараахан гараагүй байгаа тул та өөрөө шийдлийг олох ёстой.

  • Бүртгэлийг төвлөрүүлэх удирддаг үүл үйлчилгээ (AWS, Azure эсвэл Google)
  • хяналтын үйлчилгээ "үйлчилгээ болгон хянах" (жишээ нь, Datadog)
  • өөрийн бүртгэл цуглуулах үйлчилгээг бий болгох.

Гурав дахь сонголтын хувьд би үргэлж сэтгэл хангалуун байдаггүй (ялангуяа түүний хүнд байдал, тохиргооны нарийн төвөгтэй байдал) байсан ч Elasticsearch-ийг уламжлалт байдлаар ашигласан.

Локи нь дараах зарчмуудын дагуу хэрэгжилтийг хялбарчлахад зориулагдсан болно.

  • эхлэхэд хялбар байх
  • цөөн нөөц хэрэглэдэг
  • тусгай засвар үйлчилгээгүйгээр бие даан ажиллах
  • алдааг илрүүлэхэд туслах Прометейд нэмэлтээр үйлчилнэ

Гэсэн хэдий ч, энэ энгийн байдал нь зарим буулт хийх зардлаар ирдэг. Тэдний нэг нь агуулгыг индексжүүлэхгүй байх явдал юм. Тиймээс текст хайлт нь тийм ч үр дүнтэй, баялаг биш бөгөөд текстийн агуулгын талаархи статистикийг зөвшөөрдөггүй. Гэхдээ Локи нь grep-тэй дүйцэхүйц, Прометейг нэмэлт болгохыг хүсдэг тул энэ нь сул тал биш юм.

Ослын мөрдөн байцаалт

Локи яагаад индексжүүлэх шаардлагагүйг илүү сайн ойлгохын тулд Локи хөгжүүлэгчид ашигласан ослыг судлах арга руу буцъя.

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
1 Анхааруулга → 2 Хяналтын самбар → 3 Түр зуурын асуулга → 4 Бүртгэлийн нэгтгэл → 5 Түгээмэл мөрдөх → 6 Засах!
(1 Анхааруулга → 2 Хяналтын самбар → 3 Түр зуурын асуулга → 4 Бүртгэлийн нэгтгэл → 5 Түгээмэл мөрдөх → 6 Засах!)

Гол санаа нь бид ямар нэгэн сэрэмжлүүлэг (Slack Notification, SMS гэх мэт) хүлээн авдаг бөгөөд үүний дараа:

  • Grafana хяналтын самбарыг харна уу
  • үйлчилгээний хэмжүүрийг харна уу (жишээ нь, Prometheus дээр)
  • бүртгэлийн оруулгуудыг харах (жишээлбэл, Elasticsearch дээр)
  • магадгүй тархсан ул мөрийг (Jaeger, Zipkin гэх мэт) харна уу.
  • эцэст нь анхны асуудлыг засах болно.

Энд, Grafana + Prometheus + Elasticsearch + Zipkin стекийн хувьд та дөрвөн өөр хэрэгслийг ашиглах хэрэгтэй болно. Цаг хугацааг багасгахын тулд эдгээр бүх алхмуудыг нэг хэрэглүүр ашиглан гүйцэтгэх боломжтой болох нь сайхан байх болно: Grafana. Судалгааны энэ аргыг Grafana-д 6-р хувилбараас хойш хэрэгжүүлсэн гэдгийг тэмдэглэх нь зүйтэй. Ингэснээр Prometheus-ийн өгөгдөлд шууд Grafana-аас хандах боломжтой болсон.

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Explorer дэлгэц Prometheus болон Loki хоёрын хооронд хуваагдсан

Энэ дэлгэцээс та хуваах дэлгэцийн концепцийг ашиглан Prometheus хэмжигдэхүүнтэй холбоотой Loki бүртгэлийг харах боломжтой. Хувилбар 6.5-аас хойш Grafana нь танд Loki бүртгэлийн оруулгууд дахь ул мөрийн id-г задлан шинжилж, өөрийн дуртай тараасан мөрдөх хэрэгслүүдийн (Jaeger) холбоосыг дагах боломжийг олгодог.

Орон нутгийн Loki тест

Loki-г дотооддоо турших хамгийн хялбар арга бол docker-compose ашиглах явдал юм. Docker-compose файл нь Loki репозиторт байрладаг. Та дараах тушаалыг ашиглан репозиторыг авч болно git:

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

Дараа нь та үйлдвэрлэлийн лавлах руу очих хэрэгтэй:

$ cd production

Үүний дараа та Docker зургийн хамгийн сүүлийн хувилбарыг авах боломжтой:

$ docker-compose pull

Эцэст нь Loki стекийг дараах тушаалаар ажиллуулна.

$ docker-compose up

Локи архитектур

Локи архитектуртай жижиг диаграмм энд байна:

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Локи архитектурын зарчим

Вэб клиент нь сервер дээр програмуудыг ажиллуулдаг, Promtail нь бүртгэлийг цуглуулж Локи руу илгээдэг, вэб клиент нь мөн Локи руу мета өгөгдлийг илгээдэг. Локи бүх зүйлийг нэгтгэж, Графана руу дамжуулдаг.
Loki худалдаанд гарсан байна. Боломжтой бүрэлдэхүүн хэсгүүдийг харахын тулд дараах тушаалыг ажиллуулна уу:

$ docker ps

Шинээр суулгасан Docker-ийн хувьд тушаал нь дараах үр дүнг буцаана.

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

Бид дараах бүрэлдэхүүн хэсгүүдийг харж байна.

  • Promtail: логуудыг төвлөрүүлэх үүрэгтэй агент
  • Графана: алдартай хяналтын самбарын хэрэгсэл
  • Локи: Өгөгдлийн төвлөрлийн дэмон

Сонгодог дэд бүтцийн нэг хэсэг болгон (жишээлбэл, виртуал машин дээр суурилсан) Promtail агентыг машин бүр дээр байрлуулах ёстой. Графана, Локи хоёрыг нэг машин дээр суулгаж болно.

Kubernetes-д байршуулах

Kubernetes дээр Loki бүрэлдэхүүн хэсгүүдийг суулгах нь дараах байдалтай байна.

  • daemonSet нь серверийн кластерт байгаа машин бүр дээр Promtail агентыг байрлуулахад зориулагдсан
  • Loki-г байршуулах
  • хамгийн сүүлчийнх нь Графанагийн байршуулалт юм.

Аз болоход Loki-г Helm багц хэлбэрээр ашиглах боломжтой бөгөөд үүнийг ашиглахад хялбар болгодог.

Heml-ээр дамжуулан суулгана

Та аль хэдийн Heml-г суулгасан байх ёстой. Үүнийг төслийн GitHub репозитороос татаж авч болно. Энэ нь таны архитектурт тохирох архивыг задалж, удирдлагыг нэмэх замаар суулгадаг $PATH.

Тайлбар: Helm-ийн 3.0.0 хувилбар саяхан гарсан. Үүнд олон өөрчлөлт орсон тул уншигч та үүнийг ашиглахаасаа өмнө жаахан хүлээхийг зөвлөж байна..

Helm-ийн эх сурвалжийг нэмж байна

Эхний алхам бол дараах тушаалыг ашиглан "loki" репозиторыг нэмэх явдал юм.

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

Үүний дараа та "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...

Эдгээр багцууд нь дараахь онцлог шинж чанартай байдаг.

  • багц локи/локи зөвхөн Loki сервертэй таарч байна
  • багц loki/fluent-bit Promtail-ийн оронд лог цуглуулахын тулд fluent-bin ашиглан DaemonSet суулгах боломжийг танд олгоно
  • багц loki/promtail лог файл цуглуулах агент агуулсан
  • багц локи/локи-стек, Loki-г Promtail-тэй хамт нэн даруй байрлуулах боломжийг танд олгоно.

Loki суулгаж байна

Loki-г Kubernetes-д байрлуулахын тулд "monitoring" нэрийн талбарт дараах тушаалыг ажиллуулна уу:

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

Дискэнд хадгалахын тулд параметрийг нэмнэ үү --set loki.persistence.enabled = true:

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

Тайлбар: Хэрэв та Grafana-г нэгэн зэрэг байрлуулахыг хүсвэл параметрийг нэмнэ үү --set grafana.enabled = true

Та энэ тушаалыг ажиллуулахдаа дараах гаралтыг авах ёстой.

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.

"Хянах" нэрийн талбар дахь хонгилын төлөвийг харахад бид бүх зүйл байрлуулсан болохыг харж болно:

$ 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

Бүх хонхорхойнууд ажиллаж байна. Одоо хэдэн тест хийх цаг боллоо!

Графана руу холбогдож байна

Кубернетес дор Графана руу холбогдохын тулд түүний хонгил руу хонгил нээх хэрэгтэй. Grafana pod-д зориулж 3000 портыг нээх тушаалыг доор харуулав.

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

Өөр нэг чухал зүйл бол Grafana администраторын нууц үгийг сэргээх хэрэгцээ юм. Нууц үг нь нууцлагдсан loki-grafana талбайд .data.admin-user base64 форматтай.

Үүнийг сэргээхийн тулд та дараах тушаалыг ажиллуулах хэрэгтэй.

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

Энэ нууц үгийг анхдагч администраторын бүртгэлтэй (админ) хамт ашиглаарай.

Графана дахь Локи мэдээллийн эх сурвалжийг тодорхойлох

Юуны өмнө Loki мэдээллийн эх сурвалж (Тохиргоо/Өгөгдлийн эх үүсвэр) үүсгэгдсэн эсэхийг шалгаарай.
Энэ жишээг харуулав.

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Loki-д зориулсан мэдээллийн эх сурвалжийг тохируулах жишээ

"Туршилт" дээр дарснаар та Loki-тэй холболтыг шалгаж болно.

Локид хүсэлт гаргаж байна

Одоо Графана руу "Судлах" хэсэгт очно уу. Локи нь савнаас лог хүлээн авахдаа Kubernetes-ээс мета өгөгдлийг нэмдэг. Тиймээс тодорхой савны бүртгэлийг үзэх боломжтой болно.

Жишээлбэл, promtail контейнерийн бүртгэлийг сонгохын тулд та дараах асуулгыг ашиглаж болно. {container_name = "promtail"}.
Энд мөн Loki мэдээллийн эх сурвалжийг сонгохоо санаарай.

Энэ асуулга нь контейнерийн үйл ажиллагааг дараах байдлаар буцаана:

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Графана дахь асуулгын үр дүн

Хяналтын самбарт нэмнэ үү

Grafana 6.4-аас эхлэн та бүртгэлийн мэдээллийг хяналтын самбар дээр шууд байрлуулж болно. Үүний дараа хэрэглэгч өөрийн сайт дээрх хүсэлтийн тоо болон програмын ул мөрийн хооронд хурдан шилжих боломжтой болно.

Энэ харилцан үйлчлэлийг хэрэгжүүлдэг хяналтын самбарын жишээг доор харуулав.

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Prometheus хэмжигдэхүүн болон Локи лог бүхий жишээ самбар

Локигийн ирээдүй

Би Loki-г 0.1/1-р сард 1.1 хувилбараар ашиглаж эхэлсэн. Өнөөдөр 1.2-р хувилбар, тэр ч байтугай XNUMX, XNUMX аль хэдийн гарсан байна.

0.1 хувилбар хангалттай тогтвортой биш байсан гэдгийг хүлээн зөвшөөрөх ёстой. Гэхдээ 0.3 нь боловсорч гүйцэх бодит шинж тэмдгүүдийг аль хэдийн харуулсан бөгөөд дараагийн хувилбарууд (0.4, дараа нь 1.0) зөвхөн энэ сэтгэгдлийг бэхжүүлсэн.

1.0.0-ээс хойш энэ гайхалтай хэрэгслийг ашиглахгүй байх шалтгаан хэнд ч байхгүй.

Цаашдын сайжруулалт нь Loki-ийн тухай биш харин түүнийг маш сайн Grafana-тай нэгтгэх ёстой. Үнэн хэрэгтээ Grafana 6.4 нь хяналтын самбартай сайн интеграцчилсан байдаг.

Саяхан гарсан Grafana 6.5 нь JSON формат дахь бүртгэлийн агуулгыг автоматаар таних замаар интеграцийг улам сайжруулдаг.

Доорх видео нь энэ механизмын жижиг жишээг харуулж байна:

Локи - Прометей аргыг ашиглан бүртгэл цуглуулах
Grafana-д ил гарсан Локи мөрүүдийг ашиглаж байна

JSON талбаруудын аль нэгийг ашиглах боломжтой болно, жишээ нь:

  • гадаад хэрэглүүрийн холбоосууд
  • бүртгэлийн агуулгыг шүүх

Жишээлбэл, та traceId дээр дарж Zipkin эсвэл Jaeger руу очих боломжтой.

Ердийнх шигээ бид таны сэтгэгдлийг тэсэн ядан хүлээж, таныг урьж байна нээлттэй вэбинар, бид 2019 онд DevOps салбар хэрхэн хөгжсөн талаар ярилцаж, 2020 оны хөгжлийн боломжит замуудын талаар ярилцах болно.

Эх сурвалж: www.habr.com