Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması

Salam, Xabrovsk sakinləri! Kursa yeni qeydiyyat başlaması ərəfəsində "DevOps təcrübələri və alətləri" Biz sizin üçün maraqlı materialın tərcüməsini hazırlamışıq.

Bu məqalə Lokiyə qısa girişdir. Layihə Loki Grafana tərəfindən dəstəklənir və logların (serverlərdən və ya konteynerlərdən) mərkəzləşdirilmiş şəkildə toplanmasına yönəlib.

Loki üçün əsas ilham oldu Prometey yanaşmalarını logların idarə edilməsinə tətbiq etmək ideyası ilə:

  • məlumatların saxlanması üçün etiketlərdən istifadə
  • az resurs istehlakı

Prometeyin necə işlədiyinə qayıdacağıq və onun Kubernetes kontekstində istifadəsinə dair bəzi nümunələr verəcəyik.

Prometey haqqında bir neçə kəlmə

Lokinin necə işlədiyini tam başa düşmək üçün bir addım geri çəkilmək və Prometey haqqında bir az xatırlamaq vacibdir.

Prometheus-un fərqli xüsusiyyətlərindən biri, metriklərin toplama məntəqələrindən (ixracatçılar vasitəsilə) çıxarılması və etiketlər şəklində metadata əlavə edilməklə TSDB-də (Time Series Data Base) saxlanmasıdır.

Niyə lazımdır?

Bu yaxınlarda Prometheus konteynerlər və Kubernetes dünyasında faktiki standarta çevrildi: onun quraşdırılması çox sadədir və Kubernetes klasteri Prometheus üçün doğma son nöqtə ilə gəlir. Prometheus həmçinin xüsusi etiketləri saxlayarkən konteynerdə yerləşdirilmiş tətbiqlərdən ölçüləri çıxara bilər. Buna görə tətbiqin monitorinqini həyata keçirmək çox asandır.

Təəssüf ki, logların idarə edilməsi üçün hələ də açar təslim həll yoxdur və özünüz üçün bir həll tapmalısınız:

  • logların mərkəzləşdirilməsi üçün idarə olunan bulud xidməti (AWS, Azure və ya Google)
  • monitorinq xidməti “xidmət kimi monitorinq” (məsələn, Datadog)
  • öz log toplama xidmətinizi yaratmaq.

Üçüncü seçim üçün, həmişə ondan razı qalmamağıma baxmayaraq (xüsusilə də onun ağırlığı və konfiqurasiya mürəkkəbliyi) ənənəvi olaraq Elasticsearch-dan istifadə etdim.

Loki aşağıdakı prinsiplərə uyğun olaraq həyata keçirilməsini asanlaşdırmaq üçün hazırlanmışdır:

  • başlamaq üçün sadə olun
  • az resurs istehlak edir
  • heç bir xüsusi təmir olmadan müstəqil işləmək
  • səhv araşdırmalarına kömək etmək üçün Prometheus-a əlavə olaraq xidmət edir

Bununla belə, bu sadəlik bəzi kompromislər hesabına gəlir. Onlardan biri məzmunu indeksləşdirməməkdir. Buna görə də, mətn axtarışı çox səmərəli və ya zəngin deyil və mətnin məzmunu ilə bağlı statistikaya imkan vermir. Lakin Loki grep-in ekvivalenti və Prometeyin tamamlayıcısı olmaq istədiyi üçün bu, dezavantaj deyil.

Hadisənin araşdırılması

Loki-nin niyə indeksləşdirməyə ehtiyacı olmadığını daha yaxşı başa düşmək üçün Loki tərtibatçılarının istifadə etdiyi hadisənin araşdırılması metoduna qayıdaq:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
1 Xəbərdarlıq → 2 İdarə Paneli → 3 Adhoc Sorğu → 4 Qeydlərin Birləşdirilməsi → 5 Paylanmış İzləmə → 6 Düzəlt!
(1 Xəbərdarlıq → 2 İdarə Paneli → 3 Adhoc Sorğu → 4 Qeydlərin Birləşdirilməsi → 5 Paylanmış İzləmə → 6 Düzəliş!)

İdeya ondan ibarətdir ki, biz bir növ xəbərdarlıq alırıq (Slack Notification, SMS və s.) və bundan sonra:

  • Grafana tablosuna baxın
  • xidmət göstəricilərinə baxın (məsələn, Prometeydə)
  • jurnal girişlərinə baxın (məsələn, Elasticsearch-də)
  • bəlkə paylanmış izlərə nəzər salın (Jaeger, Zipkin və s.)
  • və nəhayət, orijinal problemi həll edir.

Burada Grafana + Prometheus + Elasticsearch + Zipkin yığını vəziyyətində dörd fərqli alətdən istifadə etməli olacaqsınız. Vaxtı azaltmaq üçün bütün bu addımları bir alətdən istifadə etməklə yerinə yetirmək yaxşı olardı: Grafana. Qeyd etmək lazımdır ki, tədqiqata bu yanaşma Grafana-da 6-cı versiyadan tətbiq edilir. Beləliklə, Prometheus məlumatlarına birbaşa Grafana-dan daxil olmaq mümkün olur.

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Explorer ekranı Prometey və Loki arasında bölündü

Bu ekrandan siz bölünmüş ekran konsepsiyasından istifadə edərək Prometheus göstəriciləri ilə bağlı Loki qeydlərinə baxa bilərsiniz. 6.5 versiyasından bəri Grafana sevimli paylanmış izləmə alətlərinə (Jaeger) keçidləri izləmək üçün Loki jurnalının qeydlərindəki iz id-ni təhlil etməyə imkan verir.

Yerli Loki testi

Loki-ni yerli olaraq sınamağın ən asan yolu docker-compose istifadə etməkdir. Docker-compose faylı Loki deposunda yerləşir. Aşağıdakı əmrdən istifadə edərək deponu əldə edə bilərsiniz git:

$ git clone https://github.com/grafana/loki.git

Sonra istehsal qovluğuna getməlisiniz:

$ cd production

Bundan sonra Docker şəkillərinin ən son versiyasını əldə edə bilərsiniz:

$ docker-compose pull

Nəhayət, Loki yığını aşağıdakı əmrlə işə salınır:

$ docker-compose up

Loki memarlığı

Budur Loki arxitekturası ilə kiçik bir diaqram:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Loki Memarlıq Prinsipləri

Veb müştəri serverdə proqramları idarə edir, Promtail jurnalları toplayır və onları Loki-yə göndərir, veb müştəri də Loki-yə metadata göndərir. Loki hər şeyi birləşdirir və Grafanaya ötürür.
Loki işə salındı. Mövcud komponentlərə baxmaq üçün aşağıdakı əmri yerinə yetirin:

$ docker ps

Təzə quraşdırılmış Docker vəziyyətində, komanda aşağıdakı nəticəni qaytarmalıdır:

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

Aşağıdakı komponentləri görürük:

  • Promtail: logların mərkəzləşdirilməsinə cavabdeh olan agent
  • Grafana: məşhur tablosuna alət
  • Loki: Məlumatların Mərkəzləşdirilməsi Daemon

Klassik infrastrukturun bir hissəsi kimi (məsələn, virtual maşınlar əsasında) Promtail agenti hər bir maşında yerləşdirilməlidir. Grafana və Loki eyni maşında quraşdırıla bilər.

Kubernetes-də yerləşdirmə

Kubernetes-də Loki komponentlərinin quraşdırılması aşağıdakı kimi olacaq:

  • server klasterindəki maşınların hər birində Promtail agentini yerləşdirmək üçün daemonSet
  • Yerləşdirmə Loki
  • və sonuncusu Grafana-nın yerləşdirilməsidir.

Xoşbəxtlikdən Loki, Helm paketi kimi mövcuddur və bu, yerləşdirməyi asanlaşdırır.

Heml vasitəsilə quraşdırma

Artıq Heml-i quraşdırmalısınız. Onu layihənin GitHub deposundan yükləmək olar. O, arxitekturanıza uyğun arxivi açaraq və ona sükan əlavə etməklə quraşdırılır $PATH.

Qeyd: Helm-in 3.0.0 versiyası bu yaxınlarda buraxıldı. Ona bir çox dəyişiklik edildiyi üçün oxucuya ondan istifadə etməzdən əvvəl bir az gözləmək tövsiyə olunur..

Helm üçün mənbə əlavə edilir

İlk addım aşağıdakı əmrdən istifadə edərək "loki" deposunu əlavə etməkdir:

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

Bundan sonra siz “loki” adlı paketləri axtara bilərsiniz:

$ helm search loki

Nəticə:

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

Bu paketlər aşağıdakı xüsusiyyətlərə malikdir:

  • paketi loki/loki yalnız Loki serverinə uyğun gəlir
  • paketi loki/fluent-bit Promtail əvəzinə logları toplamaq üçün fluent-bin istifadə edərək DaemonSet yerləşdirməyə imkan verir
  • paketi loki/promtail log faylı toplama agentini ehtiva edir
  • paketi loki/loki-stack, dərhal Loki-ni Promtail ilə birlikdə yerləşdirməyə imkan verir.

Loki quraşdırılır

Loki-ni Kubernetes-ə yerləşdirmək üçün “monitorinq” ad məkanında aşağıdakı əmri işlədin:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Diskdə saxlamaq üçün parametr əlavə edin --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

Qeyd: eyni zamanda Grafana yerləşdirmək istəyirsinizsə, parametr əlavə edin --set grafana.enabled = true

Bu əmri işlətdiyiniz zaman aşağıdakı nəticəni almalısınız:

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.

"Nəzarət" ad məkanındakı podların vəziyyətinə baxsaq, hər şeyin yerləşdirildiyini görə bilərik:

$ kubectl -n monitoring get pods -l release=loki

Nəticə:

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

Bütün podlar işləyir. İndi bəzi testlər etmək vaxtıdır!

Grafana qoşulur

Kubernetes altında Grafanaya qoşulmaq üçün onun poduna tunel açmalısınız. Aşağıda Grafana pod üçün 3000 portunu açmaq əmri verilmişdir:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Digər vacib məqam Grafana administrator parolunu bərpa etmək ehtiyacıdır. Şifrə gizli saxlanılır loki-grafana sahədə .data.admin-user base64 formatında.

Onu bərpa etmək üçün aşağıdakı əmri yerinə yetirməlisiniz:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Bu parolu standart administrator hesabı (admin) ilə birlikdə istifadə edin.

Grafana-da Loki məlumat mənbəyinin müəyyən edilməsi

Əvvəlcə Loki məlumat mənbəyinin yaradıldığından əmin olun (Konfiqurasiya/Məlumat mənbəyi).
Bir nümunə:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Loki üçün məlumat mənbəyinin qurulması nümunəsi

“Sınaq” üzərinə klikləməklə siz Loki ilə əlaqəni yoxlaya bilərsiniz.

Lokiyə sorğu göndərmək

İndi Grafana'ya keçin və "Kəşf et" bölməsinə keçin. Konteynerlərdən qeydləri qəbul edərkən Loki Kubernetes-dən metadata əlavə edir. Beləliklə, müəyyən bir konteynerin jurnallarına baxmaq mümkün olur.

Məsələn, promtail konteyner qeydlərini seçmək üçün aşağıdakı sorğudan istifadə edə bilərsiniz: {container_name = "promtail"}.
Burada Loki məlumat mənbəyini də seçməyi unutmayın.

Bu sorğu konteyner fəaliyyətini aşağıdakı kimi qaytaracaq:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Grafana-da sorğunun nəticəsi

İdarə panelinə əlavə edin

Grafana 6.4-dən başlayaraq, log məlumatlarını birbaşa tablosuna yerləşdirə bilərsiniz. Bundan sonra istifadəçi öz saytındakı sorğuların sayı ilə tətbiq izləri arasında sürətlə keçid edə biləcək.

Aşağıda bu qarşılıqlı əlaqəni həyata keçirən idarə panelinə bir nümunə verilmişdir:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Prometheus ölçüləri və Loki qeydləri ilə nümunə panel

Lokinin gələcəyi

Mən Loki-dən may/iyun aylarında 0.1 versiyası ilə istifadə etməyə başladım. Bu gün 1-ci versiya, hətta 1.1 və 1.2 artıq buraxılmışdır.

Etiraf etmək lazımdır ki, 0.1 versiyası kifayət qədər stabil deyildi. Lakin 0.3 artıq real yetkinlik əlamətlərini göstərdi və sonrakı versiyalar (0.4, sonra 1.0) yalnız bu təəssüratı gücləndirdi.

1.0.0-dan sonra heç kimin bu gözəl alətdən istifadə etməmək üçün heç bir bəhanəsi ola bilməz.

Əlavə təkmilləşdirmələr Loki ilə bağlı deyil, onun əla Grafana ilə inteqrasiyası olmalıdır. Əslində, Grafana 6.4 artıq idarə panelləri ilə yaxşı inteqrasiyaya malikdir.

Bu yaxınlarda buraxılmış Grafana 6.5 JSON formatında log məzmununu avtomatik tanıyaraq bu inteqrasiyanı daha da təkmilləşdirir.

Aşağıdakı video bu mexanizmin kiçik bir nümunəsini göstərir:

Loki - Prometey yanaşmasından istifadə edərək jurnalların toplanması
Grafana-da ifşa olunan Loki simlərindən istifadə

JSON sahələrindən birini istifadə etmək mümkün olur, məsələn:

  • xarici alətə keçidlər
  • log məzmununun filtrlənməsi

Məsələn, Zipkin və ya Jaeger-ə getmək üçün traceId üzərinə klikləyə bilərsiniz.

Həmişə olduğu kimi, şərhlərinizi gözləyirik və sizi dəvət edirik açıq vebinar, burada DevOps sənayesinin 2019-cu ildə necə inkişaf etdiyi və 2020-ci il üçün mümkün inkişaf yollarını müzakirə edəcəyik.

Mənbə: www.habr.com