Поздрави, хабровци! В очакване на началото на ново записване за курса
Тази статия е кратко въведение в Локи. Проект Локи
Основното вдъхновение за Локи беше
- използване на етикети за съхраняване на данни
- консумация на малко ресурси
Ще се върнем към принципите на Prometheus и ще дадем някои примери за използването му в контекста на Kubernetes.
Няколко думи за Прометей
За да разберете напълно как работи Локи, важно е да направите крачка назад и да прегледате малко Прометей.
Една от отличителните характеристики на Prometheus е извличането на показатели от точки за събиране (чрез износители) и съхраняването им в TSDB (база данни за времеви редове, база данни за времеви редове) с добавяне на метаданни под формата на етикети.
Защо е необходимо
Наскоро Prometheus се превърна в де факто стандарт в света на контейнерите и Kubernetes: инсталирането му е много просто и Kubernetes клъстер първоначално има крайна точка за Prometheus. Prometheus може също така да извлича показатели от приложения, разположени в контейнер, като същевременно поддържа специфични етикети. Следователно мониторингът на приложенията е много лесен за изпълнение.
За съжаление, все още няма готово решение за управление на регистрационни файлове и вие трябва да намерите решение за себе си:
- управлявана облачна услуга за централизиране на регистрационни файлове (AWS, Azure или Google)
- услуга за мониторинг "мониторинг като услуга" (например Datadog)
- създаване на ваша собствена услуга за събиране на регистрационни файлове.
За третия вариант традиционно използвах Elasticsearch, въпреки факта, че не винаги бях доволен от него (особено неговата тежест и сложност на настройка).
Loki е проектиран да бъде лесен за изпълнение съгласно следните принципи:
- да бъде лесен за стартиране
- консумират малко ресурси
- работят самостоятелно без специална поддръжка
- служат като добавка към Prometheus, за да помогнат при разследване на грешки
Тази простота обаче идва за сметка на някои компромиси. Една от тях е да не се индексира съдържанието. Следователно търсенето на текст не е много ефективно или богато и не ви позволява да поддържате статистика за съдържанието на текста. Но тъй като Локи иска да бъде еквивалентът на grep и допълнение към Prometheus, това не е недостатък.
Разследване на инцидента
За да разберем по-добре защо Loki не се нуждае от индексиране, нека се върнем към метода за разследване на инциденти, използван от разработчиците на Loki:
1 Предупреждение → 2 Табло → 3 Adhoc заявка → 4 Агрегиране на регистрационни файлове → 5 Разпределено проследяване → 6 Поправка!
(1 Предупреждение → 2 Табло → 3 Adhoc заявка → 4 Агрегиране на регистрационни файлове → 5 Разпределено проследяване → 6 Поправка!)
Идеята е да получим някакъв вид предупреждение (Slack Notification, SMS и т.н.) и след това:
- погледнете таблата за управление на Grafana
- погледнете показателите за обслужване (например в Prometheus)
- прегледайте записите в регистрационния файл (например в Elasticsearch)
- може би погледнете разпределените следи (Jaeger, Zipkin и т.н.)
- и най-накрая да коригира първоначалния проблем.
Тук, в случая на стека Grafana + Prometheus + Elasticsearch + Zipkin, ще трябва да използвате четири различни инструмента. За да спестите време, би било хубаво да можете да правите всички тези стъпки с един инструмент: Grafana. Струва си да се отбележи, че този подход за изследване е приложен в Grafana от версия 6. По този начин става възможен достъп до данните на Prometheus директно от Grafana.
Екранът на Explorer е разделен между Prometheus и Loki
От този екран можете да видите регистрационни файлове на Loki, свързани с показателите на Prometheus, като използвате концепцията за разделен екран. От версия 6.5 Grafana ви позволява да анализирате идентификатора на проследяване в записите в дневника на 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, уеб клиентът също изпраща метаданни на 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: известният инструмент за табло
- Локи: демон за централизация на данни
Като част от класическа инфраструктура (например базирана на виртуални машини), агентът Promtail трябва да бъде внедрен на всяка машина. Grafana и Loki могат да бъдат инсталирани на една и съща машина.
Внедряване в Kubernetes
Инсталирането на компонентите на Loki в Kubernetes ще бъде както следва:
- daemonSet за внедряване на агента Promtail на всяка от машините в сървърния клъстер
- Разгръщане на Локи
- и последното е внедряването на Grafana.
За щастие, Loki се предлага като пакет Helm, което го прави лесен за внедряване.
Инсталиране чрез Heml
Трябва вече да имате инсталиран Heml. Може да бъде изтеглен от хранилището на GitHub на проекта. Инсталира се чрез извличане на архива, подходящ за вашата архитектура и добавяне на helm $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 в 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, трябва да отворите тунел към неговия под. Следва командата за отваряне на порт 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
Използвайте тази парола заедно с администраторския акаунт по подразбиране (admin).
Дефиниция на източник на данни Loki в Grafana
Първо се уверете, че източникът на данни Loki (Configuration / Datasource) е създаден.
Ето един пример:
Пример за настройка на източник на данни за Loki
Като щракнете върху „Тест“, можете да тествате връзката с Loki.
Отправяне на молби към Локи
Сега отидете на Графана в секцията „Изследване“. Когато получава регистрационни файлове от контейнери, 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.
Както обикновено, очакваме вашите коментари и ви каним
Източник: www.habr.com