Selam Habrovsk sakinleri! Kursa yeni kayıtların başlamasının arifesinde
Bu makale Loki'ye kısa bir giriş niteliğindedir. Loki Projesi
Loki'nin ana ilham kaynağı
- verileri depolamak için etiketleri kullanma
- az kaynak tüketimi
Prometheus'un nasıl çalıştığına geri döneceğiz ve Kubernetes bağlamında kullanımına ilişkin bazı örnekler vereceğiz.
Prometheus hakkında birkaç söz
Loki'nin nasıl çalıştığını tam olarak anlamak için bir adım geriye çekilip Prometheus'u biraz hatırlamak önemli.
Prometheus'un ayırt edici özelliklerinden biri, metriklerin toplama noktalarından (ihracatçılar aracılığıyla) çıkarılması ve etiket biçiminde meta verilerin eklenmesiyle bunları TSDB'de (Zaman Serisi Veri Tabanı) saklamasıdır.
Neden bu gereklidir
Son zamanlarda Prometheus, konteynerler ve Kubernetes dünyasında fiili standart haline geldi: Kurulumu çok basit ve Kubernetes kümesi, Prometheus için yerel bir uç noktayla birlikte geliyor. Prometheus ayrıca belirli etiketleri saklarken bir konteynerde konuşlandırılan uygulamalardan da metrikler çıkarabilir. Bu nedenle uygulama izlemenin uygulanması çok kolaydır.
Ne yazık ki, günlük yönetimi için hala anahtar teslim bir çözüm yok ve kendiniz için bir çözüm bulmalısınız:
- Günlükleri merkezileştirmek için yönetilen bulut hizmeti (AWS, Azure veya Google)
- izleme hizmeti "hizmet olarak izleme" (örneğin, Datadog)
- kendi günlük toplama hizmetinizi oluşturma.
Üçüncü seçenek için, her zaman memnun olmasam da (özellikle de konfigürasyonunun ağırlığı ve karmaşıklığı) geleneksel olarak Elasticsearch'ü kullandım.
Loki, aşağıdaki ilkelere göre uygulamayı basitleştirmek için tasarlandı:
- başlamak basit olsun
- az kaynak tüketmek
- herhangi bir özel bakım gerektirmeden bağımsız olarak çalışır
- Hata araştırmalarına yardımcı olmak için Prometheus'a ek olarak hizmet eder
Ancak bu basitlik bazı tavizlerin pahasına geliyor. Bunlardan biri içeriği indekslememek. Bu nedenle metin araması çok verimli ve zengin değildir ve metnin içeriğine ilişkin istatistiklere izin vermez. Ancak Loki, grep'in eşdeğeri ve Prometheus'un tamamlayıcısı olmak istediğinden bu bir dezavantaj değil.
Olay araştırması
Loki'nin neden indekslenmeye ihtiyacı olmadığını daha iyi anlamak için Loki geliştiricilerinin kullandığı olay inceleme yöntemine geri dönelim:
1 Uyarı → 2 Kontrol Paneli → 3 Anlık Sorgu → 4 Günlük Toplama → 5 Dağıtılmış İzleme → 6 Düzeltme!
(1 Uyarı → 2 Kontrol Paneli → 3 Anlık Sorgu → 4 Günlük Toplama → 5 Dağıtılmış İzleme → 6 Düzeltme!)
Buradaki fikir, bir tür uyarı almamızdır (Gevşek Bildirim, SMS vb.) ve ardından:
- Grafana kontrol panellerine bakın
- hizmet ölçümlerine bakın (örneğin Prometheus'ta)
- günlük girişlerine bakın (örneğin, Elasticsearch'te)
- belki dağıtılmış izlere bir göz atabilirsiniz (Jaeger, Zipkin, vb.)
- ve nihayet orijinal sorunu çözdük.
Burada Grafana + Prometheus + Elasticsearch + Zipkin stack durumunda dört farklı araç kullanmanız gerekecek. Zamanı azaltmak için tüm bu adımları tek bir araç kullanarak gerçekleştirebilmek güzel olurdu: Grafana. Bu araştırma yaklaşımının Grafana'da sürüm 6'dan beri uygulandığını belirtmekte fayda var. Böylece Prometheus verilerine doğrudan Grafana'dan erişmek mümkün hale geliyor.
Explorer ekranı Prometheus ve Loki arasında bölünmüş
Bu ekrandan Prometheus metrikleriyle ilgili Loki loglarını bölünmüş ekran konseptini kullanarak görüntüleyebilirsiniz. Sürüm 6.5'ten bu yana Grafana, favori dağıtılmış izleme araçlarınıza (Jaeger) olan bağlantıları takip etmek için Loki günlük girişlerindeki izleme kimliğini ayrıştırmanıza olanak tanır.
Yerel Loki testi
Loki'yi yerel olarak test etmenin en kolay yolu docker-compose'u kullanmaktır. Docker-compose dosyası Loki deposunda bulunur. Aşağıdaki komutu kullanarak depoyu alabilirsiniz git
:
$ git clone https://github.com/grafana/loki.git
Daha sonra üretim dizinine gitmeniz gerekir:
$ cd production
Bundan sonra Docker görüntülerinin en son sürümünü alabilirsiniz:
$ docker-compose pull
Son olarak Loki yığını aşağıdaki komutla başlatılır:
$ docker-compose up
Loki mimarisi
İşte Loki mimarisine sahip küçük bir şema:
Loki Mimarlık Prensipleri
Web istemcisi sunucudaki uygulamaları çalıştırır, Promtail günlükleri toplar ve bunları Loki'ye gönderir, web istemcisi ayrıca meta verileri Loki'ye gönderir. Loki her şeyi toplar ve Grafana'ya iletir.
Loki başlatıldı. Mevcut bileşenleri görüntülemek için aşağıdaki komutu çalıştırın:
$ docker ps
Yeni kurulmuş bir Docker durumunda komut aşağıdaki sonucu döndürmelidir:
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ğıdaki bileşenleri görüyoruz:
- Promtail: günlüklerin merkezileştirilmesinden sorumlu aracı
- Grafana: ünlü bir kontrol paneli aracı
- Loki: Veri Merkezileştirme Programı
Klasik bir altyapının parçası olarak (örneğin, sanal makinelere dayalı olarak), Promtail aracısının her makineye dağıtılması gerekir. Grafana ve Loki aynı makineye kurulabilir.
Kubernetes'e Dağıtım
Loki bileşenlerinin Kubernetes'e kurulumu şu şekilde olacaktır:
- Promtail aracısını sunucu kümesindeki makinelerin her birine dağıtmak için daemonSet
- Loki'yi Dağıtım
- ve sonuncusu Grafana'nın konuşlandırılmasıdır.
Neyse ki Loki, Helm paketi olarak mevcut ve bu da dağıtımını kolaylaştırıyor.
Heml aracılığıyla kurulum
Heml'in zaten kurulu olması gerekir. Projenin GitHub deposundan indirilebilir. Mimarinize uygun arşivi açıp dümen ekleyerek kurulur. $PATH
.
Not: Helm'in 3.0.0 sürümü yakın zamanda yayınlandı. Üzerinde pek çok değişiklik olduğu için okuyucunun kullanmadan önce biraz beklemesi tavsiye edilir..
Helm için kaynak ekleme
İlk adım, aşağıdaki komutu kullanarak “loki” deposunu eklemektir:
$ helm add loki https://grafana.github.io/loki/charts
Bundan sonra “loki” adlı paketleri arayabilirsiniz:
$ helm search loki
Sonuç:
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 paketler aşağıdaki özelliklere sahiptir:
- paket loki/loki yalnızca Loki sunucusuyla eşleşir
- paket loki/akıcı-bit günlükleri toplamak için Promtail yerine fluent-bin kullanarak bir DaemonSet dağıtmanıza olanak tanır
- paket loki/promtail bir günlük dosyası toplama aracısı içerir
- paket loki/loki yığınıLoki'yi Promtail ile birlikte anında dağıtmanıza olanak tanır.
Loki'yi yükleme
Loki'yi Kubernetes'e dağıtmak için "monitoring" ad alanında aşağıdaki komutu çalıştırın:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Diske kaydetmek için parametreyi ekleyin --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Not: Grafana'yı aynı anda dağıtmak istiyorsanız parametreyi ekleyin
--set grafana.enabled = true
Bu komutu çalıştırdığınızda aşağıdaki çıktıyı 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.
"İzleme" ad alanındaki bölmelerin durumuna baktığımızda her şeyin konuşlandırıldığını görebiliriz:
$ kubectl -n monitoring get pods -l release=loki
Sonuç:
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
Tüm bölmeler çalışıyor. Şimdi bazı testler yapmanın zamanı geldi!
Grafana'ya bağlanma
Grafana'ya Kubernetes altında bağlanmak için bölmesine bir tünel açmanız gerekir. Aşağıda Grafana bölmesi için 3000 numaralı bağlantı noktasını açma komutu verilmiştir:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Bir diğer önemli nokta ise Grafana yönetici şifresinin kurtarılması gerekliliğidir. Şifre gizli tutulur loki-grafana
alanında .data.admin-user
base64 formatında.
Geri yüklemek için aşağıdaki komutu çalıştırmanız gerekir:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Bu parolayı varsayılan yönetici hesabıyla (yönetici) birlikte kullanın.
Grafana'da Loki veri kaynağı tanımlama
Öncelikle Loki veri kaynağının oluşturulduğundan emin olun (Yapılandırma/Veri Kaynağı).
İşte bir örnek:
Loki için veri kaynağı ayarlama örneği
“Test” seçeneğine tıklayarak Loki ile bağlantıyı kontrol edebilirsiniz.
Loki'ye istekte bulunmak
Şimdi Grafana'nın “Keşfet” bölümüne gidin. Loki, konteynerlerden günlük alırken Kubernetes'ten meta veriler ekler. Böylece belirli bir konteynerin loglarını görüntülemek mümkün hale geliyor.
Örneğin, promtail kapsayıcı günlüklerini seçmek için aşağıdaki sorguyu kullanabilirsiniz: {container_name = "promtail"}
.
Burada ayrıca Loki veri kaynağını seçmeyi unutmayın.
Bu sorgu konteyner etkinliğini aşağıdaki gibi döndürecektir:
Grafana'da sorgu sonucu
Kontrol paneline ekle
Grafana 6.4'ten itibaren günlük bilgilerini doğrudan kontrol paneline yerleştirebilirsiniz. Bundan sonra kullanıcı, sitesindeki istek sayısı ile uygulama izleri arasında hızlı bir şekilde geçiş yapabilecektir.
Aşağıda bu etkileşimi uygulayan bir kontrol paneli örneği verilmiştir:
Prometheus metrikleri ve Loki günlüklerini içeren örnek kontrol paneli
Loki'nin Geleceği
Loki'yi Mayıs/Haziran aylarında 0.1 sürümüyle kullanmaya başladım. Bugün sürüm 1 ve hatta 1.1 ve 1.2 zaten yayınlandı.
0.1 sürümünün yeterince kararlı olmadığını kabul etmek gerekir. Ancak 0.3 zaten gerçek olgunluk belirtileri gösterdi ve sonraki sürümler (0.4, ardından 1.0) yalnızca bu izlenimi güçlendirdi.
1.0.0'dan sonra hiç kimsenin bu harika aracı kullanmamak için hiçbir mazereti olamaz.
Daha fazla iyileştirme Loki ile ilgili değil, mükemmel Grafana ile entegrasyonuyla ilgili olmalıdır. Aslında Grafana 6.4'ün gösterge tablolarıyla zaten iyi bir entegrasyonu var.
Yakın zamanda piyasaya sürülen Grafana 6.5, JSON formatındaki günlük içeriklerini otomatik olarak tanıyarak bu entegrasyonu daha da geliştiriyor.
Aşağıdaki video bu mekanizmanın küçük bir örneğini göstermektedir:
Grafana'da gösterilen Loki dizelerini kullanma
JSON alanlarından birini kullanmak mümkün hale gelir, örneğin:
- harici araca bağlantılar
- günlük içeriğini filtreleme
Örneğin, Zipkin veya Jaeger'e gitmek için traceId'ye tıklayabilirsiniz.
Her zamanki gibi yorumlarınızı sabırsızlıkla bekliyor ve sizi davet ediyoruz.
Kaynak: habr.com