Сәлем, Хабаровск тұрғындары! Курсқа жаңа жазылу басталу қарсаңында
Бұл мақала Локиге қысқаша кіріспе. Локи жобасы
Локи үшін басты шабыт болды
- деректерді сақтау үшін белгілерді пайдалану
- аз ресурстарды тұтыну
Біз Prometheus қалай жұмыс істейтініне ораламыз және оны Кубернетес контекстінде пайдаланудың кейбір мысалдарын келтіреміз.
Прометей туралы бірнеше сөз
Локи қалай жұмыс істейтінін толық түсіну үшін кері қадам жасап, Прометей туралы біраз есте сақтау маңызды.
Prometheus-тың айрықша ерекшеліктерінің бірі - көрсеткіштерді жинау нүктелерінен (экспорттаушылар арқылы) алу және оларды белгілер түріндегі метадеректерді қосу арқылы TSDB (Time Series Data Base) ішінде сақтау.
Неге бұл қажет?
Жақында Prometheus контейнерлер мен Кубернеттер әлемінде іс жүзінде стандартқа айналды: оны орнату өте қарапайым, ал Кубернетес кластері Prometheus үшін жергілікті соңғы нүктемен бірге келеді. Prometheus арнайы белгілерді сақтау кезінде контейнерде орналастырылған қолданбалардан көрсеткіштерді де шығара алады. Сондықтан қолданбалы мониторингті жүзеге асыру өте оңай.
Өкінішке орай, журналды басқарудың кілтті шешімі әлі жоқ және сіз өзіңіз үшін шешім табуыңыз керек:
- журналдарды орталықтандыруға арналған басқарылатын бұлттық қызмет (AWS, Azure немесе Google)
- мониторинг қызметі «қызмет ретінде бақылау» (мысалы, Datadog)
- өзіңіздің журнал жинау қызметін жасау.
Үшінші нұсқа үшін мен Elasticsearch-ті дәстүрлі түрде қолдандым, оған әрқашан риза болмағаныма қарамастан (әсіресе оның ауырлығы мен конфигурациясының күрделілігі).
Loki келесі принциптерге сәйкес іске асыруды жеңілдету үшін жасалған:
- бастау үшін қарапайым болыңыз
- ресурстарды аз тұтынады
- арнайы техникалық қызмет көрсетусіз дербес жұмыс істеу
- қателерді зерттеуге көмектесу үшін Прометейге қосымша ретінде қызмет етеді
Дегенмен, бұл қарапайымдылық кейбір ымыраға келудің есебінен келеді. Олардың бірі - мазмұнды индекстеу емес. Сондықтан мәтінді іздеу өте тиімді немесе бай емес және мәтін мазмұны бойынша статистикаға мүмкіндік бермейді. Бірақ Локи grep-тің баламасы және Прометейге қосымша болғысы келетіндіктен, бұл кемшілік емес.
Оқиғаны тергеу
Локиге неге индекстеу қажет емес екенін жақсы түсіну үшін 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-дан қол жеткізуге болады.
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
Локи архитектурасы
Міне, Локи архитектурасы бар шағын диаграмма:
Локи архитектурасының принциптері
Веб-клиент серверде қолданбаларды іске қосады, 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 Kubernetes метадеректерін қосады. Осылайша, белгілі бір контейнердің журналдарын қарау мүмкін болады.
Мысалы, promtail контейнер журналдарын таңдау үшін келесі сұрауды пайдалануға болады: {container_name = "promtail"}
.
Мұнда Loki деректер көзін таңдауды ұмытпаңыз.
Бұл сұрау контейнер әрекетін келесідей қайтарады:
Графанадағы сұрау нәтижесі
Бақылау тақтасына қосыңыз
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 пішіміндегі журнал мазмұнын автоматты түрде тану арқылы осы интеграцияны одан әрі жақсартады.
Төмендегі бейнеде осы механизмнің шағын мысалы көрсетілген:
Grafana-да ашылған Loki жолдарын пайдалану
JSON өрістерінің бірін пайдалану мүмкін болады, мысалы:
- сыртқы құралға сілтемелер
- журнал мазмұнын сүзу
Мысалы, Zipkin немесе Jaeger сайтына өту үшін traceId түймесін басуға болады.
Әдеттегідей, біз сіздің пікірлеріңізді күтеміз және сізді шақырамыз
Ақпарат көзі: www.habr.com