Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus

Салом, хабровиён! Дар интизори оғози қабули нав барои курс "Амалҳо ва асбобҳои DevOps" тарчумаи материали шавковарро барои шумо тайёр кард.

Ин мақола як муқаддимаи мухтасар ба Локи аст. Лоиҳаи Локи аз ҷониби Grafana дастгирӣ карда мешавад ва барои ҷамъоварии мутамаркази гузоришҳо (аз серверҳо ё контейнерҳо) нигаронида шудааст.

Илҳоми асосии Локи буд Prometheus бо идеяи татбиқи равишҳои худ дар идоракунии гузоришҳо:

  • бо истифода аз тамғакоғазҳо барои нигоҳ доштани маълумот
  • сарфи ками ресурсхо

Мо ба принсипҳои Прометей бармегардем ва чанд мисоли истифодаи онро дар заминаи Кубернетес меорем.

Якчанд сухан дар бораи Прометей

Барои пурра фаҳмидани он, ки чӣ тавр Loki кор мекунад, муҳим аст, ки як қадам қафо гузоред ва каме аз Prometheus боздид кунед.

Яке аз хусусиятҳои фарқкунандаи Prometheus ин истихроҷи ченакҳо аз нуқтаҳои ҷамъоварӣ (тавассути содиркунандагон) ва нигоҳ доштани онҳо дар TSDB (Time Series Data Base, базаи силсилаи вақтҳо) бо илова кардани метамаълумот дар шакли тамғакоғазҳо мебошад.

Чаро ин лозим аст

Ба наздикӣ, Prometheus ба стандарти воқеӣ дар ҷаҳони контейнерҳо ва Кубернетҳо табдил ёфт: насби он хеле содда аст ва кластери Кубернетес дар аввал нуқтаи ниҳоии Prometheus дорад. Prometheus инчунин метавонад аз барномаҳои дар контейнер ҷойгиршуда ҳангоми нигоҳ доштани тамғакоғазҳои мушаххас ченакҳоро истихроҷ кунад. Аз ин рӯ, мониторинги барномаро амалӣ кардан хеле осон аст.

Мутаассифона, то ҳол ҳалли калидии идоракунии гузоришҳо вуҷуд надорад ва шумо бояд барои худ як роҳи ҳалли худро пайдо кунед:

  • хидмати абрии идорашаванда барои марказонидани гузоришҳо (AWS, Azure ё Google)
  • хидмати мониторинги "мониторинг ҳамчун хидмат" (масалан, Datadog)
  • эҷод кардани хидмати ҷамъоварии гузоришҳои шахсии худ.

Барои варианти сеюм, ман ба таври анъанавӣ Elasticsearch-ро истифода мебурдам, гарчанде ки ман на ҳамеша аз он қаноатманд будам (хусусан вазнинӣ ва мураккабии насби он).

Loki тарҳрезӣ шудааст, ки мувофиқи принсипҳои зерин амалӣ карда шавад:

  • оғоз кардан осон бошад
  • кам ресурсро сарф мекунанд
  • бе ягон таъмири махсус мустакилона кор мекунанд
  • ҳамчун илова ба Prometheus барои кӯмак дар таҳқиқи хатогиҳо хидмат кунед

Аммо, ин соддагӣ аз ҳисоби баъзе созишҳо ба вуҷуд меояд. Яке аз онҳо индексатсия накардани мундариҷа мебошад. Аз ин рӯ, ҷустуҷӯи матн чандон муассир ва бой нест ва имкон намедиҳад, ки омори мундариҷаи матн нигоҳ дошта шавад. Аммо азбаски Локи мехоҳад муодили grep бошад ва ба Прометей мукаммал бошад, ин камбудӣ нест.

Тафтиши ҳодиса

Барои беҳтар фаҳмидани он ки чаро Loki ба индексатсия ниёз надорад, биёед ба усули таҳқиқи ҳодисае, ки таҳиягарони Loki истифода мебаранд, баргардем:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
1 Огоҳӣ → 2 Панели идоракунӣ → 3 Дархости махсус → 4 Ҷамъоварии гузоришҳо → 5 Пайгирии тақсимшуда → 6 Ислоҳ!
(1 Огоҳӣ → 2 Панели идоракунӣ → 3 Дархости махсус → 4 Ҷамъоварии гузориш → 5 Пайгирии тақсимшуда → 6 Ислоҳ!)

Идеяи он аст, ки мо як навъ огоҳӣ мегирем (Огоҳии суст, SMS ва ғайра) ва баъд аз он:

  • ба панелҳои графикии Grafana нигаред
  • ба ченакҳои хидмат нигаред (масалан, дар Prometheus)
  • ба сабтҳои журнал нигаред (масалан, дар Elasticsearch)
  • шояд ба пайҳои тақсимшуда назар андозед (Jaeger, Zipkin ва ғайра)
  • ва дар ниҳоят мушкилоти аслиро ислоҳ кунед.

Дар ин ҷо, дар мавриди Grafana + Prometheus + Elasticsearch + Zipkin, шумо бояд чор асбоби гуногунро истифода баред. Барои сарфаи вақт, хуб мебуд, ки ҳамаи ин қадамҳоро бо як асбоб иҷро кунед: Grafana. Қобили зикр аст, ки ин равиш ба тадқиқот дар Grafana аз версияи 6 амалӣ карда мешавад. Ҳамин тариқ, дастрасии мустақим ба маълумоти Prometheus аз Grafana имконпазир мегардад.

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Экрани Explorer байни Prometheus ва Loki тақсим карда мешавад

Аз ин экран, шумо метавонед бо истифода аз консепсияи экрани тақсимшуда гузоришҳоро дар Loki, ки ба ченакҳои Prometheus марбутанд, бубинед. Аз версияи 6.5, Grafana ба шумо имкон медиҳад, ки ID-и пайгирӣ дар сабтҳои журнали Loki-ро таҳлил кунед, то истинодҳоро ба абзорҳои пайгирии тақсимшудаи дӯстдоштаи худ (Jaeger) пайгирӣ кунед.

Санҷиши маҳаллии Локи

Роҳи осонтарини санҷиши 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

Меъмории Локи

Ин як диаграммаи хурд бо меъмории Loki аст:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Принсипҳои меъмории Локи

Мизоҷи веб барномаҳоро дар сервер иҷро мекунад, 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: агенти масъул барои мутамарказкунии гузоришҳо
  • Grafana: асбоби машҳури панели идоракунӣ
  • Loki: демони мутамарказкунии маълумот

Ҳамчун як қисми инфрасохтори классикӣ (масалан, дар асоси мошинҳои виртуалӣ), агенти Promtail бояд дар ҳар як мошин ҷойгир карда шавад. Grafana ва Loki-ро дар як мошин насб кардан мумкин аст.

Ҷойгиркунӣ ба Kubernetes

Насб кардани ҷузъҳои Loki дар Kubernetes чунин хоҳад буд:

  • daemonSet барои ҷойгир кардани агенти Promtail дар ҳар як мошин дар кластери сервер
  • Ҷойгиркунии Loki
  • ва охиринаш ҷойгиркунии Grafana мебошад.

Хушбахтона, Loki ҳамчун бастаи Helm дастрас аст, ки ҷойгиркунии онро осон мекунад.

Насб тавассути Heml

Шумо бояд аллакай Heml насб карда бошед. Онро аз анбори GitHub лоиҳа зеркашӣ кардан мумкин аст. Он тавассути истихроҷи бойгонии барои меъмории шумо мувофиқ ва илова кардани руль насб карда мешавад $PATH.

Эзоҳ: версияи 3.0.0-и Helm ба наздикӣ бароварда шуд. Азбаски дар он тағйиротҳои зиёд ба амал омадаанд, ба хонанда тавсия дода мешавад, ки пеш аз оғози истифодаи он каме интизор шавад..

Илова кардани манбаъ барои 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 ба шумо имкон медиҳад, ки DaemonSet-ро бо истифодаи fluent-bin барои ҷамъоварии гузоришҳо ба ҷои Promtail ҷойгир кунед
  • пакет loki/promtail дорои агенти ҷамъоварии гузоришҳо мебошад
  • пакет loki/loki-stack, ба шумо имкон медиҳад, ки фавран Loki-ро якҷоя бо Promtail ҷойгир кунед.

Насб кардани Loki

Барои ҷойгиркунии Loki ба Kubernetes, фармони зеринро дар фазои номи "мониторинг" иҷро кунед:

$ 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

Барои пайваст шудан ба Grafana зери Kubernetes, шумо бояд нақберо ба поди он кушоед. Дар зер фармон барои кушодани порти 3000 барои pod Grafana оварда шудааст:

$ 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 дар Grafana

Пеш аз ҳама, боварӣ ҳосил кунед, ки манбаи маълумоти Loki (Танзимот / Сарчашмаи маълумот) сохта шудааст.
Ана як мисол:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Намунаи таъсиси манбаи маълумот барои Loki

Бо пахш кардани "Санҷиш" шумо метавонед пайвастшавиро бо Loki санҷед.

Пешниҳоди дархостҳо ба Локи

Акнун ба Grafana равед ва ба бахши "Таҳқиқ" гузаред. Ҳангоми гирифтани гузоришҳо аз контейнерҳо, Loki метамаълумотро аз Kubernetes илова мекунад. Ҳамин тариқ, дидани гузоришҳои як контейнери мушаххас имконпазир мегардад.

Масалан, барои интихоби гузоришҳои контейнерии promtail, шумо метавонед дархости зеринро истифода баред: {container_name = "promtail"}.
Фаромӯш накунед, ки манбаи маълумоти Loki-ро дар ин ҷо интихоб кунед.

Ин дархост фаъолияти контейнерро ба таври зерин бармегардонад:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Натиҷаи пурсиш дар Grafana

Илова ба панели идоракунӣ

Аз Grafana 6.4 сар карда, мумкин аст, ки маълумоти гузоришро мустақиман дар панели идоракунӣ ҷойгир кунед. Пас аз ин, корбар метавонад зуд байни шумораи дархостҳои сайти худ ба пайгирии барномаҳо гузарад.

Дар зер як панели намунавӣ, ки ин муомиларо амалӣ мекунад, оварда шудааст:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Панели намунавӣ бо ченакҳои Prometheus ва гузоришҳои Loki

Ояндаи Локи

Ман истифодаи Loki-ро дар моҳи май / июн бо версияи 0.1 оғоз кардам. Версияи 1 аллакай имрӯз ва ҳатто 1.1 ва 1.2 бароварда шудааст.

Бояд эътироф кард, ки версияи 0.1 ба қадри кофӣ устувор набуд. Аммо 0.3 аллакай аломатҳои воқеии камолотро нишон дод ва версияҳои оянда (0.4, баъд 1.0) танҳо ин таассуротро тақвият доданд.

Пас аз 1.0.0, ҳеҷ кас наметавонад баҳонае дошта бошад, ки ин асбоби аҷибро истифода набарад.

Такмили минбаъда набояд дар бораи Loki бошад, балки ҳамгироии он бо Grafana аъло. Дар асл, Grafana 6.4 аллакай бо панелҳои идоракунӣ ҳамгироии хуб дорад.

Grafana 6.5, ки ба наздикӣ бароварда шуд, ин ҳамгироиро тавассути эътирофи худкор мундариҷаи гузоришҳо дар формати JSON такмил медиҳад.

Дар видеои зер намунаи хурди ин механизм нишон дода шудааст:

Loki - ҷамъоварии гузоришҳо бо истифода аз равиши Prometheus
Истифодаи сатрҳои Loki, ки дар Grafana дода шудаанд

Истифодаи яке аз майдонҳои JSON имконпазир мегардад, масалан, барои:

  • пайвандҳо ба воситаи беруна
  • филтри мундариҷаи сабт

Масалан, шумо метавонед traceId -ро клик кунед, то ба Zipkin ё Jaeger равед.

Мисли маъмул, мо интизори шарҳҳои шумо ва шуморо даъват мекунем вебинар кушод, ки дар он мо дар бораи чӣ гуна рушди саноати DevOps дар давоми соли 2019 сӯҳбат мекунем ва роҳҳои имконпазири рушдро барои соли 2020 муҳокима хоҳем кард.

Манбаъ: will.com