Loki - Прометей тәсілін қолданатын журналдар жинағы

Сәлем, Хабаровск тұрғындары! Курсқа жаңа жазылу басталу қарсаңында «DevOps тәжірибелері мен құралдары» Біз сіздерге қызықты материалдың аудармасын дайындадық.

Бұл мақала Локиге қысқаша кіріспе. Локи жобасы Grafana қолдады және журналдарды (серверлерден немесе контейнерлерден) орталықтандырылған жинауға бағытталған.

Локи үшін басты шабыт болды Прометей журналдарды басқаруға оның тәсілдерін қолдану идеясымен:

  • деректерді сақтау үшін белгілерді пайдалану
  • аз ресурстарды тұтыну

Біз Prometheus қалай жұмыс істейтініне ораламыз және оны Кубернетес контекстінде пайдаланудың кейбір мысалдарын келтіреміз.

Прометей туралы бірнеше сөз

Локи қалай жұмыс істейтінін толық түсіну үшін кері қадам жасап, Прометей туралы біраз есте сақтау маңызды.

Prometheus-тың айрықша ерекшеліктерінің бірі - көрсеткіштерді жинау нүктелерінен (экспорттаушылар арқылы) алу және оларды белгілер түріндегі метадеректерді қосу арқылы TSDB (Time Series Data Base) ішінде сақтау.

Неге бұл қажет?

Жақында Prometheus контейнерлер мен Кубернеттер әлемінде іс жүзінде стандартқа айналды: оны орнату өте қарапайым, ал Кубернетес кластері Prometheus үшін жергілікті соңғы нүктемен бірге келеді. Prometheus арнайы белгілерді сақтау кезінде контейнерде орналастырылған қолданбалардан көрсеткіштерді де шығара алады. Сондықтан қолданбалы мониторингті жүзеге асыру өте оңай.

Өкінішке орай, журналды басқарудың кілтті шешімі әлі жоқ және сіз өзіңіз үшін шешім табуыңыз керек:

  • журналдарды орталықтандыруға арналған басқарылатын бұлттық қызмет (AWS, Azure немесе Google)
  • мониторинг қызметі «қызмет ретінде бақылау» (мысалы, Datadog)
  • өзіңіздің журнал жинау қызметін жасау.

Үшінші нұсқа үшін мен Elasticsearch-ті дәстүрлі түрде қолдандым, оған әрқашан риза болмағаныма қарамастан (әсіресе оның ауырлығы мен конфигурациясының күрделілігі).

Loki келесі принциптерге сәйкес іске асыруды жеңілдету үшін жасалған:

  • бастау үшін қарапайым болыңыз
  • ресурстарды аз тұтынады
  • арнайы техникалық қызмет көрсетусіз дербес жұмыс істеу
  • қателерді зерттеуге көмектесу үшін Прометейге қосымша ретінде қызмет етеді

Дегенмен, бұл қарапайымдылық кейбір ымыраға келудің есебінен келеді. Олардың бірі - мазмұнды индекстеу емес. Сондықтан мәтінді іздеу өте тиімді немесе бай емес және мәтін мазмұны бойынша статистикаға мүмкіндік бермейді. Бірақ Локи grep-тің баламасы және Прометейге қосымша болғысы келетіндіктен, бұл кемшілік емес.

Оқиғаны тергеу

Локиге неге индекстеу қажет емес екенін жақсы түсіну үшін Loki әзірлеушілері пайдаланған оқиғаны зерттеу әдісіне оралайық:

Loki - Прометей тәсілін қолданатын журналдар жинағы
1 Ескерту → 2 Бақылау тақтасы → 3 Арнайы сұрау → 4 Журналды біріктіру → 5 Бөлінген бақылау → 6 Түзетіңіз!
(1 Ескерту → 2 Бақылау тақтасы → 3 Арнайы сұрау → 4 Журналды біріктіру → 5 Бөлінген бақылау → 6 Түзету!)

Идея мынада: біз қандай да бір ескерту (Slack Notification, SMS және т.б.) аламыз, содан кейін:

  • Grafana бақылау тақталарын қараңыз
  • қызмет көрсету көрсеткіштерін қараңыз (мысалы, Прометейде)
  • журнал жазбаларын қараңыз (мысалы, Elasticsearch ішінде)
  • таратылған іздерді (Jaeger, Zipkin және т.б.) қараңыз.
  • және соңында бастапқы мәселені шешу.

Мұнда Grafana + Prometheus + Elasticsearch + Zipkin стекі жағдайында төрт түрлі құралды қолдануға тура келеді. Уақытты қысқарту үшін осы қадамдардың барлығын бір құралды пайдаланып орындаған дұрыс: Grafana. Айта кету керек, зерттеуге бұл тәсіл Grafana-да 6-нұсқадан бастап енгізілген. Осылайша, Prometheus деректеріне тікелей Grafana-дан қол жеткізуге болады.

Loki - Прометей тәсілін қолданатын журналдар жинағы
Explorer экраны Prometheus және Loki арасында бөлінген

Бұл экраннан бөлінген экран тұжырымдамасын пайдаланып Prometheus көрсеткіштеріне қатысты Loki журналдарын көруге болады. 6.5 нұсқасынан бастап Grafana таңдаулы таратылған бақылау құралдарына (Jaeger) сілтемелерді орындау үшін Loki журнал жазбаларындағы бақылау идентификаторын талдауға мүмкіндік береді.

Жергілікті 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

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

Міне, Локи архитектурасы бар шағын диаграмма:

Loki - Прометей тәсілін қолданатын журналдар жинағы
Локи архитектурасының принциптері

Веб-клиент серверде қолданбаларды іске қосады, Promtail журналдарды жинайды және оларды Loki-ге жібереді, веб-клиент сонымен қатар метадеректерді Loki-ге жібереді. Локи барлығын жинақтап, Графанаға жібереді.
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 жүйесіне орналастыру

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/loki-стек, Promtail-пен бірге Loki-ді дереу орналастыруға мүмкіндік береді.

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 қосқышы үшін 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

Бұл құпия сөзді әдепкі әкімші тіркелгісімен (әкімші) бірге пайдаланыңыз.

Grafana ішіндегі Loki деректер көзін анықтау

Ең алдымен, Loki деректер көзі жасалғанын тексеріңіз (Конфигурация/Дереккөз).
Міне мысал:

Loki - Прометей тәсілін қолданатын журналдар жинағы
Loki үшін деректер көзін орнату мысалы

«Тестілеу» түймесін басу арқылы сіз Loki байланысын тексере аласыз.

Локиге сұрау салу

Енді Графанаға «Зерттеу» бөліміне өтіңіз. Контейнерлерден журналдарды алу кезінде Loki Kubernetes метадеректерін қосады. Осылайша, белгілі бір контейнердің журналдарын қарау мүмкін болады.

Мысалы, promtail контейнер журналдарын таңдау үшін келесі сұрауды пайдалануға болады: {container_name = "promtail"}.
Мұнда Loki деректер көзін таңдауды ұмытпаңыз.

Бұл сұрау контейнер әрекетін келесідей қайтарады:

Loki - Прометей тәсілін қолданатын журналдар жинағы
Графанадағы сұрау нәтижесі

Бақылау тақтасына қосыңыз

Grafana 6.4 нұсқасынан бастап журнал ақпаратын тікелей бақылау тақтасында орналастыруға болады. Осыдан кейін пайдаланушы өз сайтындағы сұраулар саны мен қолданба іздері арасында жылдам ауыса алады.

Төменде осы әрекеттесуді жүзеге асыратын бақылау тақтасының мысалы берілген:

Loki - Прометей тәсілін қолданатын журналдар жинағы
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-да ашылған Loki жолдарын пайдалану

JSON өрістерінің бірін пайдалану мүмкін болады, мысалы:

  • сыртқы құралға сілтемелер
  • журнал мазмұнын сүзу

Мысалы, Zipkin немесе Jaeger сайтына өту үшін traceId түймесін басуға болады.

Әдеттегідей, біз сіздің пікірлеріңізді күтеміз және сізді шақырамыз ашық вебинар, онда біз DevOps индустриясының 2019 жылы қалай дамығаны және 2020 жылға арналған ықтимал даму жолдарын талқылаймыз.

Ақпарат көзі: www.habr.com