Modern uygulama geliştirme ortamında gözlemlenebilirlik bir lüks değil, bir zorunluluktur. Metrikler ve izler sistem performansı hakkında değerli içgörüler sağlarken, loglar karmaşık sorunları teşhis etmek için gereken granüler, kronolojik bağlamı sunar. Ancak ham log verisi genellikle yapılandırılmamış, hacimli ve sorgulanması zordur. İşte burada Grafana ve Grafana Loki kombinasyonu öne çıkar.
Bu rehber, Grafana Loki yığınının mimarisini adım adım ele alarak logların etkili bir şekilde nasıl görselleştirileceğini gösterecektir. Log ayrıştırma, etiket tabanlı filtreleme ve eyleme dönüştürülebilir panolar oluşturma dahil olmak üzere orta-ileri düzey kalıplara odaklanacağız.
Loki Mimarisi Anlamak
Yapılandırmaya dalmadan önce Loki'nin ELK (Elasticsearch, Logstash, Kibana) yığınından neden farklı olduğunu anlamak kritik öneme sahiptir. Elasticsearch, loglardaki tüm içeriği dizinlerken, Loki Prometheus'a benzer bir yöntem kullanır. Sadece meta verileri (etiketleri) dizinler ve asıl log satırlarını parçalar halinde saklar. Bu mimari karar, çoğu kullanım durumu için önemli ölçüde daha düşük altyapı maliyetleri ve daha hızlı sorgu performansı sağlar.
Temel bileşenler şunlardır:
- Loki: Log toplama sistemi kendisi.
- Promtail: Hostlarınıza veya kümelerinize çalışan, logları takip eden ve bunları Loki'ye gönderen ajan.
- Grafana: Verileri görüntülemek için Loki'yi sorgulayan görselleştirme katmanı.
Yapılandırılmış Veri İçin Promtail Yapılandırma
Log görselleştirmedeki en büyük zorluklardan biri yapılandırılmamış metinlerle başa çıkmaktır. Logların Grafana'da sorgulanabilir olması için bunları etiketlerle zenginleştirmeli ve ideal olarak JSON gibi yapılandırılmış formatlara ayrıştırmalısınız.
Aşağıda, bir `promtail.yaml` dosyası için pratik bir yapılandırma örneği bulunmaktadır. Bu yapılandırma, Kubernetes loglarını hedeflemeyi, belirli etiketleri çıkarmayı ve uygulama stdout'undan JSON yüklerini ayrıştırmayı gösterir.
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
# Meta veri çıkarmak için yeniden etiketleme
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
target_label: app
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
# Daha iyi görselleştirme için JSON loglarını ayrıştırma
pipeline_stages:
- json:
expressions:
level: level
message: msg
trace_id: traceID
`level`, `message` ve `trace_id` değerlerini alanlara çıkararak Grafana bunları belirli sütunlar veya filtreler olarak işleyebilir; bu da sorun giderme yapan geliştiriciler için kullanıcı deneyimini büyük ölçüde iyileştirir.
Etkili Log Sorguları Yazma
Loglarınız Loki'ye akış yapmaya başladığında, bunları nasıl etkili bir şekilde sorgulayacağınızı bilmeniz gerekir. Loki, akış seçicileri ile log akış işleyicilerini birleştiren LogQL sözdizimini kullanır.
Temel bir sorgu şu şekildedir:
{app="frontend", namespace="production"}
Bu, üretim ortamındaki ön uç uygulamasına ait tüm logları döndürür. Bu veriyi kullanışlı hale getirmek için log akış işleyicilerini zincirlemelisiniz. Örneğin, yalnızca kritik hataları filtrelemek için:
{app="frontend", namespace="production"} |~ "ERROR"
`|~` operatörü düzenli ifade eşleşmesini kullanır. Daha karmaşık filtreleme için, önceki adımda ayrıştırılan alanları çıkarabilirsiniz:
{app="frontend", namespace="production"} | json | level="error"
Bu boru hatlarını anlamak, kullanıcıların uyarı ve hata logları arasında sorunsuz bir şekilde geçiş yapabildiği dinamik panolar oluşturmanıza olanak tanır.
Eyleme Dönüştürülebilir Panolar Oluşturma
Görselleştirme son adımdır. Grafana'da bir Panel oluşturabilir ve bir "Loglar" paneli ekleyebilirsiniz. Gerçek güç, metrikleri loglara bağlamaktadır. Panel bağlantılarını yapılandırarak, bir CPU kullanım metriğindeki bir artışa tıkladığınızda, değişken arabellekleme kullanarak ilgili hata loglarına hemen inebilirsiniz.
Örneğin, yüksek istek gecikmesini gösteren bir paneliniz varsa, logları aynı zaman aralığına ve hizmet etiketine göre otomatik olarak filtreleyen bir bağlantı ekleyebilirsiniz; bu da anormallikler için anında bağlam sağlar.
Sonuç
Grafana ve Loki ile logları görselleştirmek, kaotik metin akışlarını yapılandırılmış, sorgulanabilir varlıklara dönüştürür. Doğru etiketleme, JSON ayrıştırma ve etkili LogQL sorgularından yararlanarak geliştiriciler ve SRE'ler ortalama çözümleme süresini (MTTR) önemli ölçüde azaltabilir. İlk kurulum dikkat ve detay gerektirse de, maliyet tasarrufu ve operasyonel verimlilikteki uzun vadeli faydalar, onu modern gözlemlenebilirlik stratejileri için sağlam bir seçenek haline getirir. Yapılandırılmış loglamayı uygulamalarınızda uygulamakla başlayın ve hata ayıklama iş akışınızın tepkisel yangın söndürmeden proaktif analize evrimini izleyin.