Саламатсыздарбы, Хабаровск шаарынын тургундары! Курска жаңы кабыл алуу башталышынын алдында Биз сиздер үчүн кызыктуу материалдын котормосун даярдадык.
Бул макала Локиге кыскача киришүү. Локи долбоору жана журналдарды борборлоштурулган чогултууга багытталган (серверлерден же контейнерлерден).
Локи үчүн негизги илхам болгон журналды башкаруу үчүн анын ыкмаларын колдонуу идеясы менен:
- маалыматтарды сактоо үчүн энбелгилерди колдонуу
- аз ресурстарды керектөө
Биз 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 панелдерин карагыла
- кызмат көрсөткүчтөрүн карап (мисалы, Prometheus)
- журналдын жазууларын караңыз (мисалы, Elasticsearchте)
- балким бөлүштүрүлгөн издерди карап көрүңүз (Jaeger, Zipkin, ж.
- жана акыры баштапкы көйгөйдү чечүү.
Бул жерде, Grafana + Prometheus + Elasticsearch + Zipkin стекинде сиз төрт түрдүү куралды колдонушуңуз керек болот. Убакытты кыскартуу үчүн, бул кадамдардын бардыгын бир куралды колдонуу менен аткарсаңыз жакшы болмок: Grafana. Белгилей кетчү нерсе, изилдөөгө мындай мамиле Grafana 6-версиясынан бери ишке ашырылып келет. Ошентип, Prometheus маалыматтарына түздөн-түз Grafanaдан кирүү мүмкүн болот.

Explorer экраны Prometheus жана Loki ортосунда бөлүнгөн
Бул экрандан сиз бөлүнгөн экран концепциясын колдонуу менен Prometheus метрикасына тиешелүү Loki журналдарын көрө аласыз. 6.5 версиясынан бери Grafana сизге Loki журналынын жазууларындагы трек идентификаторун талдап, сүйүктүү бөлүштүрүлгөн көзөмөлдөө куралдарына (Jaeger) шилтемелерди ээрчүүгө мүмкүндүк берет.
Жергиликтүү 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 ишке киргизилди. Жеткиликтүү компоненттерди көрүү үчүн, төмөнкү буйрукту аткарыңыз:
$ 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: Маалыматтарды борборлоштуруу Daemon
Классикалык инфраструктуранын бир бөлүгү катары (мисалы, виртуалдык машиналарга негизделген) 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 Loki серверине гана дал келет
- пакет loki/fluent-bit Promtailдин ордуна журналдарды чогултуу үчүн fluent-bin аркылуу DaemonSetти жайылтууга мүмкүндүк берет
- пакет loki/promtail журнал файлдарын чогултуу агентин камтыйт
- пакет loki/loki-стек, 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 астындагы Grafana менен туташуу үчүн, анын капчыгына туннелди ачуу керек. Төмөндө Grafana pod үчүн 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дагы суроонун натыйжасы
Куралдар тактасына кошуу
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 саптарын колдонуу
JSON талааларынын бирин колдонууга болот, мисалы:
- тышкы куралга шилтемелер
- журналдын мазмунун чыпкалоо
Мисалы, Zipkin же Jaegerге өтүү үчүн traceId баскычын чыкылдатсаңыз болот.
Адаттагыдай эле, биз сиздин комментарийлериңизди күтөбүз жана сизди чакырабыз , анда биз DevOps индустриясы 2019-жылы кандайча өнүгүп жаткандыгы жөнүндө сүйлөшөбүз жана 2020-жылга карата өнүгүү жолдорун талкуулайбыз.
Source: www.habr.com
