Поздрав, жители на Хабровск! Во пресрет на почетокот на нови уписи за курсот
Оваа статија е краток вовед за Локи. Проект Локи
Главната инспирација за Локи била
- користење на етикети за складирање податоци
- потрошувачка на малку ресурси
Ќе се вратиме на тоа како функционира Прометеј и ќе дадеме неколку примери за неговата употреба во контекст на Кубернет.
Неколку зборови за Прометеј
За целосно да разберете како функционира Локи, важно е да направите чекор назад и да се потсетите малку за Прометеј.
Една од карактеристичните карактеристики на 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.
Како и обично, со нетрпение ги очекуваме вашите коментари и ве покануваме
Извор: www.habr.com