Салом, хабровиён! Дар интизори оғози қабули нав барои курс
Ин мақола як муқаддимаи мухтасар ба Локи аст. Лоиҳаи Локи
Илҳоми асосии Локи буд
- бо истифода аз тамғакоғазҳо барои нигоҳ доштани маълумот
- сарфи ками ресурсхо
Мо ба принсипҳои Прометей бармегардем ва чанд мисоли истифодаи онро дар заминаи Кубернетес меорем.
Якчанд сухан дар бораи Прометей
Барои пурра фаҳмидани он, ки чӣ тавр Loki кор мекунад, муҳим аст, ки як қадам қафо гузоред ва каме аз Prometheus боздид кунед.
Яке аз хусусиятҳои фарқкунандаи Prometheus ин истихроҷи ченакҳо аз нуқтаҳои ҷамъоварӣ (тавассути содиркунандагон) ва нигоҳ доштани онҳо дар TSDB (Time Series Data Base, базаи силсилаи вақтҳо) бо илова кардани метамаълумот дар шакли тамғакоғазҳо мебошад.
Чаро ин лозим аст
Ба наздикӣ, Prometheus ба стандарти воқеӣ дар ҷаҳони контейнерҳо ва Кубернетҳо табдил ёфт: насби он хеле содда аст ва кластери Кубернетес дар аввал нуқтаи ниҳоии Prometheus дорад. Prometheus инчунин метавонад аз барномаҳои дар контейнер ҷойгиршуда ҳангоми нигоҳ доштани тамғакоғазҳои мушаххас ченакҳоро истихроҷ кунад. Аз ин рӯ, мониторинги барномаро амалӣ кардан хеле осон аст.
Мутаассифона, то ҳол ҳалли калидии идоракунии гузоришҳо вуҷуд надорад ва шумо бояд барои худ як роҳи ҳалли худро пайдо кунед:
- хидмати абрии идорашаванда барои марказонидани гузоришҳо (AWS, Azure ё Google)
- хидмати мониторинги "мониторинг ҳамчун хидмат" (масалан, Datadog)
- эҷод кардани хидмати ҷамъоварии гузоришҳои шахсии худ.
Барои варианти сеюм, ман ба таври анъанавӣ Elasticsearch-ро истифода мебурдам, гарчанде ки ман на ҳамеша аз он қаноатманд будам (хусусан вазнинӣ ва мураккабии насби он).
Loki тарҳрезӣ шудааст, ки мувофиқи принсипҳои зерин амалӣ карда шавад:
- оғоз кардан осон бошад
- кам ресурсро сарф мекунанд
- бе ягон таъмири махсус мустакилона кор мекунанд
- ҳамчун илова ба Prometheus барои кӯмак дар таҳқиқи хатогиҳо хидмат кунед
Аммо, ин соддагӣ аз ҳисоби баъзе созишҳо ба вуҷуд меояд. Яке аз онҳо индексатсия накардани мундариҷа мебошад. Аз ин рӯ, ҷустуҷӯи матн чандон муассир ва бой нест ва имкон намедиҳад, ки омори мундариҷаи матн нигоҳ дошта шавад. Аммо азбаски Локи мехоҳад муодили grep бошад ва ба Прометей мукаммал бошад, ин камбудӣ нест.
Тафтиши ҳодиса
Барои беҳтар фаҳмидани он ки чаро Loki ба индексатсия ниёз надорад, биёед ба усули таҳқиқи ҳодисае, ки таҳиягарони Loki истифода мебаранд, баргардем:
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 имконпазир мегардад.
Экрани 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 аст:
Принсипҳои меъмории Локи
Мизоҷи веб барномаҳоро дар сервер иҷро мекунад, 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
Бо пахш кардани "Санҷиш" шумо метавонед пайвастшавиро бо Loki санҷед.
Пешниҳоди дархостҳо ба Локи
Акнун ба Grafana равед ва ба бахши "Таҳқиқ" гузаред. Ҳангоми гирифтани гузоришҳо аз контейнерҳо, Loki метамаълумотро аз Kubernetes илова мекунад. Ҳамин тариқ, дидани гузоришҳои як контейнери мушаххас имконпазир мегардад.
Масалан, барои интихоби гузоришҳои контейнерии promtail, шумо метавонед дархости зеринро истифода баред: {container_name = "promtail"}
.
Фаромӯш накунед, ки манбаи маълумоти Loki-ро дар ин ҷо интихоб кунед.
Ин дархост фаъолияти контейнерро ба таври зерин бармегардонад:
Натиҷаи пурсиш дар Grafana
Илова ба панели идоракунӣ
Аз Grafana 6.4 сар карда, мумкин аст, ки маълумоти гузоришро мустақиман дар панели идоракунӣ ҷойгир кунед. Пас аз ин, корбар метавонад зуд байни шумораи дархостҳои сайти худ ба пайгирии барномаҳо гузарад.
Дар зер як панели намунавӣ, ки ин муомиларо амалӣ мекунад, оварда шудааст:
Панели намунавӣ бо ченакҳои 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, ки дар Grafana дода шудаанд
Истифодаи яке аз майдонҳои JSON имконпазир мегардад, масалан, барои:
- пайвандҳо ба воситаи беруна
- филтри мундариҷаи сабт
Масалан, шумо метавонед traceId -ро клик кунед, то ба Zipkin ё Jaeger равед.
Мисли маъмул, мо интизори шарҳҳои шумо ва шуморо даъват мекунем
Манбаъ: will.com