DOKS Kümesinde Olay Saklama için Events Explorer Kurulumu
Giriş
Bulut tabanlı modern uygulamalar, genellikle Kubernetes gibi konteyner orkestrasyon platformları üzerinde çalışır. Bu platformlar, uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini kolaylaştırırken, aynı zamanda karmaşıklıklarını da beraberinde getirir. Bir Kubernetes kümesinde meydana gelen olaylar (events), kümenin sağlığı, kaynak kullanımı, uygulama davranışları ve potansiyel sorunlar hakkında kritik bilgiler sağlar. Pod’ların neden başlatılamadığı, bir servisin neden erişilemez olduğu veya bir birimin neden sürekli yeniden başlatıldığı gibi soruların cevapları genellikle bu olay günlüklerinde gizlidir. Ancak, varsayılan Kubernetes olay saklama süresi genellikle çok kısadır (çoğu durumda sadece bir saat), bu da geçmiş sorunları teşhis etmeyi veya uzun vadeli eğilimleri analiz etmeyi imkansız hale getirir. İşte tam da bu noktada, “Events Explorer” konsepti ve uzun süreli olay saklama ihtiyacı devreye girer.
Bu makale, DigitalOcean Kubernetes Service (DOKS) kümesinde olayların uzun süreli saklanması ve keşfedilmesi için kapsamlı bir “Events Explorer” çözümünün nasıl kurulacağını detaylandıracaktır. Events Explorer, Kubernetes olaylarını toplamak, merkezi bir yerde depolamak, sorgulamak ve görselleştirmek için kullanılan bir dizi araç ve mimarinin genel adıdır. Bu çözüm, DOKS ortamında karşılaşılabilecek sorunları daha hızlı teşhis etmenize, kümenizin davranışını daha iyi anlamanıza ve genel operasyonel verimliliğinizi artırmanıza olanak tanıyacaktır. Odak noktamız, açık kaynaklı ve yaygın olarak kullanılan Fluent Bit, Loki ve Grafana üçlüsü ile bir çözüm oluşturmak olacaktır. Bu mimari, maliyet etkinliği, ölçeklenebilirlik ve esneklik sunarak DOKS kullanıcıları için ideal bir seçimdir.
Kubernetes Olayları ve Neden Saklamalıyız?
Kubernetes olayları, küme içindeki kaynakların (Pod’lar, Deployments, Services vb.) yaşam döngüsü boyunca meydana gelen durum değişikliklerini ve önemli eylemleri kaydeden mesajlardır. Bu olaylar, kubectl get events komutu ile görüntülenebilir ve genellikle bir kaynakla ilgili kritik bilgileri (örneğin, bir Pod’un neden Pending durumda kaldığı veya bir Deployment’ın neden güncellenemediği) içerir. Her olay, bir kaynak (Source), bir neden (Reason), bir mesaj (Message) ve bir zaman damgası (Timestamp) gibi temel bilgilere sahiptir.
Olaylar iki ana kategoriye ayrılabilir:
* Normal Olaylar: Başarılı durum değişikliklerini veya beklenen eylemleri gösterir (örneğin, Pod’un başarıyla oluşturulması, Image’ın çekilmesi).
* Warning Olaylar: Sorunları veya beklenmedik durumları işaret eder (örneğin, CrashLoopBackOff, FailedScheduling, FailedMount).
Bu olaylar, küme yöneticileri ve geliştiriciler için paha biçilmez bir hata ayıklama ve sorun giderme aracıdır. Ancak, Kubernetes API sunucusu bu olayları varsayılan olarak yalnızca kısa bir süre (genellikle 1 saat) saklar. Bu geçicilik, aşağıdaki durumlarda ciddi sınırlamalar yaratır:
* Geçmiş Sorunları Teşhis Etme: Bir sorun saatler veya günler sonra fark edildiğinde, ilgili olaylar çoktan silinmiş olabilir. Bu durum, kök neden analizi yapmayı son derece zorlaştırır.
* Hata Modellerini Anlama: Belirli bir hatanın zaman içinde ne sıklıkla meydana geldiğini veya belirli bir Pod’un neden sürekli olarak çöktüğünü anlamak için uzun vadeli olay verilerine ihtiyaç vardır.
* Sistem Davranışını İzleme: Küme genelindeki eğilimleri, kaynak tahsis sorunlarını veya uygulama dağıtım sorunlarını izlemek için olayların zaman içindeki dağılımını görmek önemlidir.
* Güvenlik Denetimi: Kimin ne zaman hangi kaynak üzerinde işlem yaptığını veya şüpheli etkinlikleri takip etmek için olay günlükleri bir denetim izi görevi görebilir.
* Performans Optimizasyonu: Belirli olayların sıklığı veya zamanlaması, performans darboğazlarını veya verimsiz yapılandırmaları ortaya çıkarabilir.
Bu nedenlerle, Kubernetes olaylarını uzun süreli ve merkezi bir şekilde saklamak, modern bir DOKS kümesi yönetiminin temel bir bileşenidir. Events Explorer, bu ihtiyacı karşılamak için tasarlanmış bir çözümdür.
Events Explorer Nedir?
Events Explorer, Kubernetes olaylarını toplamak, depolamak, sorgulamak ve görselleştirmek için kullanılan entegre bir sistemdir. Tek bir ürün olmaktan ziyade, belirli bir amaca hizmet eden çeşitli araçların bir araya gelmesiyle oluşan bir mimaridir. Temel amacı, Kubernetes’in kısa ömürlü olaylarını kalıcı hale getirmek ve kullanıcıların bu verilere kolayca erişmesini sağlamaktır.
Bir Events Explorer mimarisi genellikle şu bileşenleri içerir:
1. Olay Toplayıcı (Event Collector): Kubernetes API’sinden olayları dinleyen ve bunları bir sonraki aşamaya ileten bir araç (örneğin, Fluent Bit, kube-event-exporter).
2. Olay Depolayıcı (Event Storage): Toplanan olayları uzun süreli ve sorgulanabilir bir şekilde saklayan bir veritabanı veya depolama sistemi (örneğin, Loki, Elasticsearch, DigitalOcean Spaces).
3. Olay Sorgulayıcı ve Görselleştirici (Event Query & Visualizer): Depolanan olayları sorgulamak, filtrelemek, analiz etmek ve görsel panolar halinde sunmak için kullanılan bir arayüz (örneğin, Grafana, Kibana).
Neden Events Explorer’a ihtiyacımız var? Varsayılan Kubernetes olay saklama mekanizması, anlık sorun giderme için yeterli olabilir, ancak geçmişe dönük analiz, trend takibi, güvenlik denetimi ve karmaşık sorunların kök neden analizi için yetersizdir. Events Explorer, bu boşluğu doldurarak küme yöneticilerine ve geliştiricilere daha derinleşimli bir görünürlük sunar.
DigitalOcean, DOKS için doğrudan “Events Explorer” adında bir hizmet sunmasa da, kullanıcılar açık kaynaklı araçları kullanarak kendi çözümlerini kolayca kurabilirler. Bu makalede ele alacağımız Fluent Bit, Loki ve Grafana kombinasyonu, DOKS üzerinde Events Explorer kurmak için popüler, güçlü ve maliyet etkin bir yaklaşımdır.
DOKS Kümesinde Events Explorer Kurulumu İçin Ön Gereksinimler
Events Explorer kurulumuna başlamadan önce, aşağıdaki ön koşulların yerine getirildiğinden emin olmalısınız:
* Aktif Bir DOKS Kümesi: DigitalOcean hesabınızda en az bir adet çalışan Kubernetes kümesi bulunmalıdır. Bu kümenin yeterli kaynaklara (CPU, RAM, Disk) sahip olduğundan emin olun, özellikle Loki gibi depolama bileşenleri için.
* kubectl Erişimi: Yerel makinenizde kubectl komut satırı aracının kurulu ve DOKS kümenize erişim için yapılandırılmış olması gerekmektedir. Küme yapılandırma dosyasını DigitalOcean kontrol panelinden indirerek ~/.kube/config dosyasına ekleyebilirsiniz.
* Helm Kurulumu: Kubernetes paket yöneticisi Helm, Events Explorer bileşenlerini DOKS kümenize kolayca dağıtmak için kullanılacaktır. Helm’in yerel makinenizde kurulu ve yapılandırılmış olması gerekmektedir.
* DigitalOcean API Token (İsteğe Bağlı ama Önerilir): Bazı durumlarda (örneğin, DigitalOcean Block Storage veya Spaces gibi hizmetleri doğrudan entegre etmek için), DigitalOcean API token’ına ihtiyacınız olabilir. Bu token’ı DigitalOcean kontrol panelinden oluşturabilirsiniz.
* Depolama Çözümü Seçimi: Bu makalede Loki’yi depolama çözümü olarak kullanacağız. Loki’nin kalıcı veri depolaması için DigitalOcean Block Storage kullanılacaktır.
Events Explorer Mimarisi (Örnek: Fluent Bit, Loki, Grafana)
DOKS üzerinde Events Explorer kurmak için kullanacağımız mimari, üç ana bileşenden oluşur:
a. Olay Toplama (Event Collection): Fluent Bit
* Fluent Bit: Hafif, yüksek performanslı ve ölçeklenebilir bir log işlemcisi ve ileticisidir. Kubernetes ortamında logları ve olayları toplamak için genellikle DaemonSet olarak dağıtılır. Fluent Bit, doğrudan Kubernetes API’sinden olayları çekebilen özel bir kubernetes_events input eklentisine sahiptir. Bu eklenti, her bir Kubernetes olayını bir log kaydına dönüştürerek Fluent Bit’in diğer eklentileri (filtreler ve çıktılar) aracılığıyla işlenmesini sağlar.
* Dağıtım Şekli: Fluent Bit, DOKS kümesindeki her bir worker node’da çalışan bir DaemonSet olarak dağıtılacaktır. Bu sayede her node’daki olaylar toplanabilir.
* Yapılandırma: Fluent Bit, topladığı olayları belirli etiketlerle (örneğin, küme adı, namespace, olay nedeni) zenginleştirecek ve ardından bunları depolama çözümüne (Loki) iletecek şekilde yapılandırılacaktır.
b. Olay Depolama (Event Storage): Loki
* Loki: Grafana Labs tarafından geliştirilen, Prometheus’tan ilham alan bir log toplama sistemidir. Logları, Prometheus’un metrikleri depoladığı gibi etiketler (labels) kullanarak depolar. Loki, log içeriğini indekslemek yerine sadece etiketleri indekslediği için oldukça maliyet etkin ve ölçeklenebilir bir depolama çözümüdür. Özellikle Kubernetes olayları gibi yapılandırılmış loglar için çok uygundur.
* Kalıcılık: DOKS kümesinde Loki’nin verilerini kalıcı olarak saklamak için DigitalOcean Block Storage kullanılacaktır. Bu, Loki pod’ları yeniden başlatılsa veya taşınsa bile olay verilerinin kaybolmamasını sağlar.
* Ölçeklenebilirlik: Loki, bileşenlerini (ingester, querier, distributor) bağımsız olarak ölçeklendirme yeteneğine sahiptir, bu da onu büyük ölçekli DOKS kümeleri için uygun hale getirir.
c. Olay Görselleştirme ve Sorgulama (Event Visualization & Querying): Grafana
* Grafana: Metrikleri, logları ve olayları görselleştirmek için kullanılan popüler bir açık kaynaklı analiz ve izleme platformudur. Loki ile doğal bir entegrasyona sahiptir ve LogQL (Loki Query Language) kullanarak depolanan olayları sorgulamak, filtrelemek ve panolar oluşturmak için idealdir.
* Veri Kaynağı Entegrasyonu: Grafana, bir veri kaynağı olarak Loki’ye bağlanacak ve böylece Loki’deki olay verilerine erişebilecektir.
* Panolar ve Uyarılar: Grafana’da, belirli olay türlerini, sıklıklarını veya kritik uyarıları gösteren özel panolar oluşturulabilir. Ayrıca, belirli koşullar sağlandığında bildirim göndermek için uyarı kuralları da tanımlanabilir.
Bu mimari, olayların uçtan uca toplanmasını, güvenli bir şekilde depolanmasını ve güçlü bir şekilde sorgulanıp görselleştirilmesini sağlar.
DOKS Kümesinde Adım Adım Kurulum (Fluent Bit + Loki + Grafana)
Şimdi, bu mimariyi DOKS kümenize adım adım nasıl kuracağımızı inceleyelim.
a. Loki Kurulumu
Loki, Helm ile DOKS kümenize kolayca dağıtılabilir. Helm chart’ı, Loki’nin tüm bileşenlerini (ingester, querier, distributor, gateway) ve bağımlılıklarını (örneğin, boltdb-shipper veya object storage için yapılandırma) içerir.
1. Loki Helm Repository’sini Ekleme:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
2. Loki İçin Değerler Dosyası Oluşturma (loki-values.yaml):
Loki’nin kalıcı depolama kullanabilmesi için persistence ayarlarını yapılandırmamız gerekir. DigitalOcean Block Storage, Kubernetes’in ReadWriteOnce erişim modunu destekler ve Loki için uygun bir seçenektir.
# loki-values.yaml
loki:
# Loki'nin kendisi için persistence ayarları
# production modunda birden fazla replica çalıştırırken, object storage kullanmak daha iyidir.
# Basit kurulum için tek replica ve block storage kullanabiliriz.
persistence:
enabled: true
size: 50Gi # Olay boyutuna göre ayarlanabilir
storageClassName: do-block-storage # DigitalOcean Block Storage sınıfı
# Loki'nin boltdb-shipper'ı için persistence ayarları
# Bu kısım, Loki'nin index verilerini saklaması için kullanılır.
# Eğer object storage kullanılıyorsa bu kısım genellikle devre dışı bırakılır.
# Basit kurulumda, ingester'ın yerel diski yeterli olabilir.
# Ancak uzun vadeli ve HA için object storage (S3 uyumlu, Spaces gibi) önerilir.
# Bu örnekte, basit bir kurulum için persistence etkinleştirilmiştir.
# Daha büyük ölçekler için DigitalOcean Spaces gibi S3 uyumlu bir depolama kullanmak daha iyi olacaktır.
# Bunun için Loki'nin loki.config.chunk_store_config.aws veya gcs ayarları yapılandırılmalıdır.
# Bu makalede basitlik adına tek ingester ve block storage varsayılmıştır.
# Eğer HA bir kurulum istenirse, aşağıdaki persistence ayarları yerine object storage kullanılmalıdır.
# Örneğin, DigitalOcean Spaces için:
# loki:
# config:
# chunk_store_config:
# aws:
# s3: s3:///
# s3forcepathstyle: true
# s3endpoint: https://.digitaloceanspaces.com
# s3accesskeyid:
# s3secretaccesskey:
# persistence:
# enabled: false # Object storage kullanıldığında persistence gerekmez
singleBinary:
persistence:
enabled: true
size: 50Gi
storageClassName: do-block-storage
# Eğer tek bir replica ile çalışıyorsanız, bu ayar genellikle yeterlidir.
# Production ortamlarında HA için birden fazla ingester replica ve object storage önerilir.
Önemli Not: Yukarıdaki loki-values.yaml dosyası, Loki’yi tek bir Pod olarak ve DigitalOcean Block Storage kullanarak çalıştırır. Bu, küçük ve orta ölçekli kümeler için uygun olabilir. Ancak, yüksek kullanılabilirlik (HA) ve daha büyük veri hacimleri için, Loki’yi DigitalOcean Spaces gibi S3 uyumlu bir object storage ile yapılandırmak daha iyidir. Bu durumda, persistence ayarları devre dışı bırakılır ve Loki’nin chunk_store_config ayarları Spaces kimlik bilgileriyle doldurulur. Bu makalenin kapsamını basitleştirmek adına, Block Storage ile tek Pod’lu kurulumu ele alacağız.
3. Loki’yi Dağıtma:
helm install loki grafana/loki -n loki --create-namespace -f loki-values.yaml
Bu komut, loki ad alanında Loki’yi kuracak ve belirttiğiniz kalıcı depolama alanını kullanacaktır.
b. Grafana Kurulumu
Grafana da Helm ile kolayca kurulabilir.
1. Grafana İçin Değerler Dosyası Oluşturma (grafana-values.yaml):
Grafana’ya dışarıdan erişebilmek için bir LoadBalancer servisi kullanabilir ve varsayılan kullanıcı adı/parolasını ayarlayabiliriz. Ayrıca, Loki’yi bir veri kaynağı olarak önceden yapılandırabiliriz.
# grafana-values.yaml
admin:
user: admin
password: your_secure_password # Güvenli bir parola ile değiştirin!
service:
type: LoadBalancer # Dışarıdan erişim için LoadBalancer servisi
port: 80
# Loki'yi varsayılan veri kaynağı olarak ekle
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
url: http://loki.loki.svc.cluster.local:3100 # Loki servis adresi
isDefault: true
2. Grafana’yı Dağıtma:
helm install grafana grafana/grafana -n grafana --create-namespace -f grafana-values.yaml
Kurulum tamamlandıktan sonra, kubectl get svc -n grafana komutuyla Grafana LoadBalancer servisinin dış IP adresini alabilirsiniz. Bu IP adresini kullanarak web tarayıcınızdan Grafana’ya erişebilirsiniz (admin kullanıcı adı ve belirlediğiniz parola ile).
c. Fluent Bit Kurulumu ve Yapılandırması
Fluent Bit, Kubernetes olaylarını doğrudan Kubernetes API’sinden toplayacak ve bunları Loki’ye gönderecek şekilde yapılandırılacaktır.
1. Fluent Bit Helm Repository’sini Ekleme:
helm repo add fluent https://fluent.github.io/helm-charts
helm repo update
2. Fluent Bit İçin Değerler Dosyası Oluşturma (fluentbit-values.yaml):
Bu dosyada, Fluent Bit’in kubernetes_events input eklentisini etkinleştirecek ve çıktıyı Loki’ye yönlendirecek şekilde yapılandıracağız.
# fluentbit-values.yaml
config:
inputs: |
[INPUT]
Name kubernetes_events
Tag kube.events
Interval_Sec 10 # Her 10 saniyede bir olayları kontrol et
Kube_URL https://kubernetes.default.svc:443
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Buffer_Chunk_Size 2M
Buffer_Max_Size 10M
# Daha fazla olay meta verisi eklemek için:
# Kube_Meta_Cache_TTL 5m
# Kube_Meta_Namespace_Cache_TTL 5m
# Kube_Meta_Pod_Cache_TTL 5m
# Kube_Meta_Container_Cache_TTL 5m
filters: |
[FILTER]
Name kubernetes
Match kube.events
Kube_URL https://kubernetes.default.svc:443
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Merge_Log On
Merge_Log_Key log_processed
K8S-Logging.Parser On
K8S-Logging.Exclude Off
# Bu filtre, olaylara Kubernetes meta verilerini ekler (Pod adı, namespace vb.).
outputs: |
[OUTPUT]
Name loki
Match kube.events
Host loki.loki.svc.cluster.local # Loki servis adresi
Port 3100
Labels job=kube-events,namespace=$kubernetes['namespace_name'],pod=$kubernetes['pod_name']
# Olayları Loki'ye gönderirken eklenecek etiketler
# Bu etiketler, Grafana'da sorgulama yaparken kullanılır.
# Örneğin, bir namespace'deki tüm olayları filtrelemek için.
Label_Keys reason,type,involvedObject.kind,involvedObject.name,involvedObject.namespace
# Olay içeriğindeki hangi alanların etiket olarak ekleneceğini belirler
BatchWait 1s
BatchSize 1MB
Buffer_Chunk_Size 2M
Buffer_Max_Size 10M
# Http_User # Eğer Loki kimlik doğrulaması gerektiriyorsa
# Http_Passwd
Bu yapılandırma, Fluent Bit’in Kubernetes olaylarını toplamasını, onlara Kubernetes meta verileri eklemesini ve ardından bunları job=kube-events etiketiyle Loki’ye göndermesini sağlar. Label_Keys ile olay içeriğinden alınan belirli alanları da etiket olarak ekleyerek sorgulama yeteneğini artırıyoruz.
3. Fluent Bit’i Dağıtma:
helm install fluent-bit fluent/fluent-bit -n fluent-bit --create-namespace -f fluentbit-values.yaml
Bu komut, fluent-bit ad alanında Fluent Bit’i DaemonSet olarak dağıtacak ve her worker node’da çalışmasını sağlayacaktır.
Kurulum tamamlandıktan sonra, Fluent Bit pod’larının çalıştığını ve herhangi bir hata vermediğini kubectl get pods -n fluent-bit ve kubectl logs -n fluent-bit komutlarıyla kontrol edebilirsiniz.
Yapılandırma Detayları ve İpuçları
Kurulumu yaptıktan sonra, sistemin verimli ve güvenli çalışmasını sağlamak için bazı ek yapılandırma detayları ve ipuçları:
* Saklama Politikaları (Retention Policies): Loki’de varsayılan olarak loglar sonsuza kadar saklanır. Ancak bu, maliyet ve depolama alanı açısından sorun yaratabilir. Loki’nin table_manager veya compactor bileşenlerini yapılandırarak belirli bir süre sonra eski olayları silme (TTL – Time To Live) politikaları belirleyebilirsiniz. Bu, loki-values.yaml dosyasında loki.config.table_manager.retention_deletes_enabled ve loki.config.table_manager.retention_period ayarlarıyla yapılır.
* Kaynak Tüketimi Optimizasyonu: Fluent Bit ve Loki, özellikle yoğun olay trafiği olan kümelerde önemli miktarda CPU, bellek ve disk kaynağı tüketebilir.
* Fluent Bit: Buffer_Chunk_Size, Buffer_Max_Size gibi tampon ayarlarını ve Interval_Sec gibi toplama aralıklarını ayarlayarak kaynak kullanımını optimize edebilirsiniz. Ayrıca, resources limitlerini ve isteklerini uygun şekilde ayarlayın.
* Loki: singleBinary yerine bileşen bazında dağıtım (ingester, querier, distributor) yaparak ve her bir bileşenin kaynaklarını ayrı ayrı optimize ederek daha iyi performans elde edebilirsiniz. Object storage kullanımı, ingester’ların yerel disk kullanımını azaltır.
* Güvenlik:
* Erişim Kontrolleri: Grafana’ya erişimi kısıtlamak için Ingress Controller ile kimlik doğrulama (OAuth, LDAP) entegrasyonu yapın. Varsayılan admin:admin parolasını değiştirmeyi unutmayın.
* TLS/SSL: Grafana ve Loki arasındaki iletişimi ve dışarıdan erişimi TLS/SSL ile şifreleyin. Bu genellikle bir Ingress Controller (örneğin, NGINX Ingress) ve Let’s Encrypt gibi bir sertifika yöneticisi (Cert-Manager) kullanılarak yapılır.
* Kubernetes RBAC: Fluent Bit’in Kubernetes API’sine erişimi için kullanılan Service Account’ın yalnızca gerekli izinlere sahip olduğundan emin olun (read-only erişim yeterlidir).
* Ölçeklenebilirlik:
* Loki: Yüksek hacimli olaylar için Loki’yi birden fazla ingester ve querier replikası ile dağıtabilirsiniz. DigitalOcean Spaces gibi bir object storage kullanarak ingester’ların durumsuz olmasını sağlayabilir ve yatay ölçeklendirmeyi kolaylaştırabilirsiniz.
* Fluent Bit: DaemonSet olduğu için, yeni bir worker node eklendiğinde otomatik olarak ölçeklenir.
* Maliyet Optimizasyonu:
* DigitalOcean Block Storage/Spaces: Doğru boyutta depolama alanı seçmek ve retention politikalarıyla gereksiz veri saklamaktan kaçınmak maliyetleri düşürür. DigitalOcean Spaces, büyük veri hacimleri için genellikle Block Storage’dan daha uygun maliyetli olabilir.
* Node Boyutları: DOKS kümenizdeki node’ların boyutlarını, Fluent Bit, Loki ve Grafana’nın yanı sıra uygulamalarınızın da kaynak ihtiyaçlarını karşılayacak şekilde optimize edin.
* Yüksek Erişilebilirlik (HA): Loki’yi üretim ortamında HA modunda çalıştırmak için birden fazla ingester replikası ve object storage (DigitalOcean Spaces) kullanmak önemlidir. Bu, bir ingester pod’unun çökmesi durumunda veri kaybını önler ve sorgu performansını artırır.
Olayları Sorgulama ve Analiz Etme
Grafana’ya eriştikten sonra, sol menüden “Explore” bölümüne gidin. Burada, varsayılan veri kaynağı olarak yapılandırdığınız Loki’yi seçin. LogQL (Loki Query Language) kullanarak olayları sorgulayabilirsiniz.
Örnek Sorgular:
* Tüm Kubernetes olaylarını görmek için:
{job="kube-events"}
* Belirli bir namespace‘deki olayları filtrelemek için:
{job="kube-events", namespace="my-app-namespace"}
* CrashLoopBackOff olaylarını bulmak için:
{job="kube-events"} |= "CrashLoopBackOff"
Veya daha spesifik olarak reason etiketini kullanarak:
{job="kube-events", reason="CrashLoopBackOff"}
* Belirli bir Pod’dan gelen olayları görmek için:
{job="kube-events", pod="my-pod-name-xxxx"}
* Uyarı (Warning) türündeki olayları filtrelemek için:
{job="kube-events", type="Warning"}
* Son 1 saatteki olayların dağılımını görmek için:
sum by (reason) (count_over_time({job="kube-events"}[1h]))
Bu sorgu, son bir saat içinde her bir olay nedeninin kaç kez meydana geldiğini gösterir.
Dashboard Oluşturma:
Grafana’da, bu sorguları kullanarak özel panolar (dashboards) oluşturabilirsiniz. Örneğin:
* En sık görülen olay nedenlerini gösteren bir pasta grafik.
* Zaman içindeki uyarı olaylarının sayısını gösteren bir çizgi grafik.
* Belirli bir Pod veya namespace için tüm olayları listeleyen bir tablo.
Uyarı Kuralları (Alerting):
Grafana’nın uyarı mekanizmasını kullanarak, belirli bir eşiği aşan olaylar için bildirimler (e-posta, Slack, PagerDuty vb.) alabilirsiniz. Örneğin, “son 5 dakika içinde 10’dan fazla CrashLoopBackOff olayı meydana gelirse uyar” gibi kurallar tanımlayabilirsiniz.
Sık Karşılaşılan Sorunlar ve Çözümleri
Kurulum ve kullanım sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve olası çözümleri:
* Olayların Toplanamaması:
* Sorun: Grafana’da hiç olay görünmüyor veya eksik olaylar var.
* Çözüm: Fluent Bit pod’larının çalıştığından emin olun ve loglarını kontrol edin. Fluent Bit’in Kubernetes API’sine erişim izinlerini (ServiceAccount ve ClusterRole/ClusterRoleBinding) kontrol edin. Fluent Bit yapılandırma dosyasındaki (fluentbit-values.yaml) kubernetes_events input ve loki output ayarlarının doğru olduğundan emin olun. Loki pod’larının çalıştığından ve sağlıklı olduğundan emin olun.
* Depolama Sorunları:
* Sorun: Loki pod’u Pending durumda kalıyor veya disk dolu hatası veriyor.
* Çözüm: DigitalOcean Block Storage PersistentVolumeClaim (PVC) ve PersistentVolume (PV) durumlarını kontrol edin (kubectl get pvc,pv -n loki). Block Storage’ın yeterli alana sahip olduğundan emin olun. Eğer object storage (Spaces) kullanıyorsanız, kimlik bilgilerinin doğru olduğundan ve erişim izinlerinin mevcut olduğundan emin olun.
* Performans Darboğazları:
* Sorun: Grafana’da sorgular yavaş çalışıyor veya Loki pod’ları yüksek CPU/bellek tüketiyor.
* Çözüm: Loki ve Fluent Bit için kaynak limitlerini ve isteklerini artırın. Loki’yi object storage ile HA modunda (birden fazla ingester replikası) dağıtmayı düşünün. Fluent Bit’in BatchSize ve BatchWait ayarlarını optimize edin. Grafana sorgularını daha spesifik hale getirerek ve daha az veri taramasını sağlayarak performansı artırın.
* Erişim Problemleri:
* Sorun: Grafana’ya web tarayıcısından erişilemiyor.
* Çözüm: Grafana LoadBalancer servisinin dış IP adresini kontrol edin (kubectl get svc -n grafana). Güvenlik duvarı kurallarının (DigitalOcean Cloud Firewall) Grafana’ya erişime izin verdiğinden emin olun. Eğer Ingress kullanıyorsanız, Ingress kurallarını ve sertifikaları kontrol edin.
Sonuç
Kubernetes kümelerinde olayların geçici doğası, operasyonel görünürlük ve sorun giderme yeteneği açısından önemli bir zorluk teşkil eder. Bu makalede ele aldığımız Fluent Bit, Loki ve Grafana üçlüsü ile DOKS kümenizde kurduğunuz Events Explorer, bu zorluğun üstesinden gelmek için güçlü, maliyet etkin ve ölçeklenebilir bir çözüm sunar.
Bu kurulum sayesinde, DOKS kümenizde meydana gelen tüm olayları uzun süreli olarak saklayabilir, güçlü sorgulama yetenekleriyle geçmiş sorunları teşhis edebilir, sistem davranışındaki eğilimleri analiz edebilir ve olası sorunlar için proaktif uyarılar oluşturabilirsiniz. Bu, kümenizin sağlığını daha iyi anlamanıza, hata ayıklama süreçlerini hızlandırmanıza, operasyonel verimliliği artırmanıza ve genel olarak daha sağlam ve güvenilir bir Kubernetes ortamı yönetmenize olanak tanır.
Unutmayın ki bu mimari, ihtiyaçlarınıza göre daha da geliştirilebilir ve optimize edilebilir. DigitalOcean Spaces gibi object storage kullanımıyla Loki’nin yüksek erişilebilirliğini ve ölçeklenebilirliğini artırabilir, Grafana’ya ek panolar ve uyarılar ekleyerek izleme yeteneklerinizi genişletebilirsiniz. Events Explorer, DOKS kümenizin kalbindeki görünmez olayları görünür kılarak, karmaşık bulut ortamlarında başarılı olmanız için size kritik bir araç sağlar.
