Локи - собирање на дневници користејќи го пристапот Прометеј

Поздрав, жители на Хабровск! Во пресрет на почетокот на нови уписи за курсот „Практики и алатки на DevOps“ За вас подготвивме превод на интересен материјал.

Оваа статија е краток вовед за Локи. Проект Локи поддржан од Графана и е насочена кон централизирано собирање на дневници (од сервери или контејнери).

Главната инспирација за Локи била Прометеј со идеја да ги примени неговите пристапи за управување со дневници:

  • користење на етикети за складирање податоци
  • потрошувачка на малку ресурси

Ќе се вратиме на тоа како функционира Прометеј и ќе дадеме неколку примери за неговата употреба во контекст на Кубернет.

Неколку зборови за Прометеј

За целосно да разберете како функционира Локи, важно е да направите чекор назад и да се потсетите малку за Прометеј.

Една од карактеристичните карактеристики на Prometheus е извлекувањето на метрика од собирните места (преку извозниците) и нивното складирање во TSDB (Time Series Data Base), со додавање на метаподатоци во форма на етикети.

Зошто е тоа потребно

Неодамна, Prometheus стана де факто стандард во светот на контејнерите и Kubernetes: неговата инсталација е многу едноставна, а кластерот Kubernetes доаѓа со домашна крајна точка за Prometheus. Prometheus исто така може да извлече метрика од апликации распоредени во контејнер додека складира специфични етикети. Затоа, мониторингот на апликациите е многу лесен за имплементација.

За жал, сè уште нема решение за управување со дневници со клуч на рака, и мора да најдете решение за себе:

  • управувана облак услуга за централизација на дневници (AWS, Azure или Google)
  • мониторинг услуга „мониторинг како услуга“ (на пример, Datadog)
  • создавање на сопствена услуга за собирање дневници.

За третата опција, традиционално користев Elasticsearch, и покрај фактот што не бев секогаш задоволен со него (особено неговата тежина и сложеност на конфигурацијата).

Локи беше дизајниран да ја поедностави имплементацијата според следниве принципи:

  • бидете едноставни за почеток
  • троши малку ресурси
  • работат самостојно без посебно одржување
  • служи како додаток на Прометеј за да помогне во истрагите за грешки

Сепак, оваа едноставност доаѓа на сметка на некои компромиси. Еден од нив е да не се индексира содржината. Затоа, пребарувањето на текст не е многу ефикасно или богато и не дозволува статистика за содржината на текстот. Но, бидејќи Локи сака да биде еквивалент на греп и дополнување на Прометеј, ова не е недостаток.

Истрага на инциденти

За подобро да разбереме зошто на Локи не му треба индексирање, да се вратиме на методот за истрага на инциденти што го користеа програмерите на Локи:

Локи - собирање на дневници користејќи го пристапот Прометеј
1 Предупредување → 2 Контролна табла → 3 Адхок барање → 4 Агрегација на дневници → 5 Дистрибуирано следење → 6 Поправи!
(1 Предупредување → 2 Контролна табла → 3 Адхок барање → 4 Агрегација на дневници → 5 Дистрибуирано следење → 6 Поправање!)

Идејата е да добиваме некаков вид на предупредување (Slack Notification, SMS, итн.) и после тоа:

  • погледнете ги контролните табли на Графана
  • погледнете ја метриката на услугата (на пример, во Прометеј)
  • погледнете ги записите во дневникот (на пример, во Elasticsearch)
  • можеби погледнете ги дистрибуираните траги (Јегер, Зипкин, итн.)
  • и конечно да се поправи оригиналниот проблем.

Овде, во случајот со стекот Grafana + Prometheus + Elasticsearch + Zipkin, ќе треба да користите четири различни алатки. За да го намалите времето, би било убаво да можете да ги извршите сите овие чекори користејќи една алатка: Grafana. Вреди да се напомене дека овој пристап на истражување е имплементиран во Графана уште од верзијата 6. Така, станува возможно да се пристапи до податоците на Прометеј директно од Графана.

Локи - собирање на дневници користејќи го пристапот Прометеј
Екранот на Explorer поделен помеѓу Прометеј и Локи

Од овој екран можете да ги видите дневниците на Loki поврзани со метриката на Прометеј користејќи го концептот на поделен екран. Од верзијата 6.5, Grafana ви овозможува да го анализирате идентификаторот за трага во записите во дневникот на Loki за да ги следите врските до вашите омилени алатки за дистрибуирано следење (Jaeger).

Локален Локи тест

Најлесен начин да се тестира Локи локално е да се користи 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, веб-клиентот исто така испраќа метаподатоци до 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 мора да биде распореден на секоја машина. Графана и Локи може да се инсталираат на иста машина.

Распоредување во Кубернетес

Инсталирањето на Loki компонентите на Kubernetes ќе биде како што следува:

  • daemonSet за распоредување на агентот Promtail на секоја од машините во кластерот на сервери
  • Распоредување Локи
  • а последното е распоредувањето на Графана.

За среќа, Loki е достапен како пакет Helm, што го олеснува распоредувањето.

Инсталација преку Heml

Веќе треба да имате инсталирано Heml. Може да се преземе од складиштето GitHub на проектот. Се инсталира со отпакување на архивата што одговара на вашата архитектура и додавање на кормилото $PATH.

Забелешка: Неодамна беше објавена верзијата 3.0.0 на Helm. Бидејќи има многу промени во него, на читателот му се препорачува да почека малку пред да го користи..

Додавање извор за Helm

Првиот чекор е да го додадете складиштето „loki“ користејќи ја следнава команда:

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

По ова, можете да пребарувате за пакети со име „локи“:

$ 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...

Овие пакети ги имаат следните карактеристики:

  • пакетот локи/локи одговара само на серверот Локи
  • пакетот локи/флуент-бит ви овозможува да распоредите DaemonSet користејќи fluent-bin за собирање логови наместо Promtail
  • пакетот локи/промтаил содржи агент за собирање на датотеки од дневници
  • пакетот локи/локи-оџак, ви овозможува веднаш да го распоредите 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 под Kubernetes, треба да отворите тунел до неговиот pod. Подолу е командата за отворање на портата 3000 за Grafana pod:

$ 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

Со кликнување на „Тест“ можете да ја проверите врската со Локи.

Поставување барања до Локи

Сега одете во Графана во делот „Истражи“. Кога прима дневници од контејнери, Локи додава метаподатоци од Kubernetes. Така, станува возможно да се прегледаат дневниците на одреден контејнер.

На пример, за да ги изберете дневниците на контејнерите на promtail, можете да го користите следново барање: {container_name = "promtail"}.
Тука, исто така, не заборавајте да го изберете изворот на податоци на Loki.

Ова барање ќе ја врати активноста на контејнерот на следниов начин:

Локи - собирање на дневници користејќи го пристапот Прометеј
Резултат на барањето во Графана

Додај во контролната табла

Почнувајќи со Grafana 6.4, можете да поставите информации за дневникот директно на контролната табла. По ова, корисникот ќе може брзо да се префрла помеѓу бројот на барања на неговата страница и трагите на апликацијата.

Подолу е пример за контролна табла што ја спроведува оваа интеракција:

Локи - собирање на дневници користејќи го пристапот Прометеј
Примерок на контролната табла со метрика на Прометеј и логови на Локи

Иднината на Локи

Почнав да го користам Loki уште во мај/јуни со верзија 0.1. Денес верзијата 1, па дури и 1.1 и 1.2 веќе се објавени.

Мора да се признае дека верзијата 0.1 не беше доволно стабилна. Но, 0.3 веќе покажа вистински знаци на зрелост, а следните верзии (0.4, потоа 1.0) само го зајакнаа овој впечаток.

По 1.0.0, никој не може да има изговор да не ја користи оваа прекрасна алатка.

Понатамошните подобрувања не треба да се однесуваат на Локи, туку на неговата интеграција со одличната Графана. Всушност, Grafana 6.4 веќе има добра интеграција со контролните табли.

Grafana 6.5, која беше објавена неодамна, дополнително ја подобрува оваа интеграција со автоматско препознавање на содржината на дневникот во JSON формат.

Видеото подолу покажува мал пример за овој механизам:

Локи - собирање на дневници користејќи го пристапот Прометеј
Користење на жици на Локи изложени во Графана

Станува возможно да се користи едно од полињата JSON, на пример, за:

  • линкови до надворешна алатка
  • филтрирање на содржината на дневникот

На пример, можете да кликнете на traceId за да отидете на Zipkin или Jaeger.

Како и обично, со нетрпение ги очекуваме вашите коментари и ве покануваме отворен вебинар, каде што ќе зборуваме за тоа како се развиваше индустријата DevOps во текот на 2019 година и ќе разговараме за можните патеки за развој за 2020 година.

Извор: www.habr.com