Selamün Aleyküm Arkadaşlar,
Serinin on birinci yazısında loglama konusunu ele alacağız. Loglama küçümsediğimiz ama başımız belaya girdiğinde kıymetini anlamaya başladığımız can simidi bir konu. Monolit sistemlerde de önemlidir ancak log yazılması, logu takip etmesi ve gerektiğinde debug (iyi developer debug yapar, daha iyi developer log okur) yapması daha kolaydır. Ancak sistem büyüdükçe bu işlemi yapmak dahi bir soruna dönüşebiliyor. Özellikle servisler arası istekler gidip geliyorsa bunu takip etmek daha da zorlaşıyor. Bunlar için ne gibi çözümler var merak ediyorsak buyurun başlayalım.
Monolit sistemlerde logları kolay bir şekilde tutabiliyorken, mikroservis yapıda bütün servislerden toplayıp bunu merkezileştirmek neredeyse bir zorunluluk. Aksi halde bu işi yönetmek çok zorlaşıyor, neredeyse imkansızlaşır. O yüzden de logları merkezileştirmek lazım. Merkezileştirilen logları görüntülemek ve aradığını bulmak da ayrı bir zorluk tabii ki :) Mantık bu şekilde olsa da bunu yapmanın farklı şekilleri var. Bunu yapmanın en yaygın yöntemlerinden biri ELK( Elastic, Logstash ve Kibana).- Elastic Search, toplanan verileri depolayan ve arama yapabildiğimiz bir araçtır. Aramayı hızlandırmak için indeksler kullanır. Kendi içinde oldukça geniş bir dünyası var.
- Logstash, Mikroservislerden gelen logları uygun formata getirerek Elastic'e iletir.
- Kibana, toplanan verilerin görselleştirilmesini sağlar.
Önemli olan bir diğer konu, tracing dediğimiz izleme olayıdır. Yukarıda da bahsettiğimiz servisler arası devam isteklerinin takibi oldukça önemlidir. Hata veya problem nereden geldi, nereye gitti, nerede ne olduğu kısımları çok önemli oluyor. Özellikle bu tarz durumlarda debug yapmak da oldukça zordur, ki aynı durumu tekrarlamak da her zaman mümkün olmayabilir. Önceki yazımızda da bahsettiğimiz OpenTelemetry gibi araçlar var. Bunun için bir araç kullanmak istemezseniz veya özelleştirme gibi bir ihtiyacınız olursa "CorrelationID" konusunu hayatınıza almanız gerekecektir. OpenTelemetry gibi araçlar bunu sizin yerinize yapar.
Log seviyesi gibi bir konu bile çok önemli hale gelmektedir. Bilinen bir şirket için "assignment" yapmıştım, bana logun tipiyle ilgili bir soru sorduklarında, kendi kendime, kocaman bir proje yapmışız, üzerine hiç düşünmediğim log tipini mi soruyorlar demiştim kendi kendime. Büyük sistemlerde daha aktif çalışmaya başlayınca ne kadar haklı olduklarını daha net gördüm. Yoğun istek alan sistemlerde her şeyi logladığınızda veya uygun olmayan tiplerle logladığınızda bu da sizin başınıza iş açabiliyor. Bulmak istediğiniz log için çırpınıp durabiliyorsunuz. Bu konuya da dikkat etmekte fayda var.
Önemli konulardan biri de logların yapısal olarak tutulması çok önemli. Json yapısında olması önemli bir avantaj sağlayacaktır. Hem sorgulama yaparken hem parçalarken hem de analiz ederken işleri kolaylaştırmaktadır. Bunlar artık neredeyse varsayılan olarak gelen çözümler olsa da hatırlatmakta fayda var.
Logların saklama süreleri bile önemli olabilmektedir. Monolit servislerde yıllarca saklanan loglara bile denk gelmiştim, ama mikroservis sistemlerde bunların hepsi maliyet ve logların saklanma süreleri olmalıdır. En azından kritik olmayan noktaların saklanma süresini kısa tutmak, belki de çok kritik olan logların belirli bir süre sonra arşivlemek bile çözüm olabilir ama mümkün ise bunları bir standarta oturtmak güzel olur. Özellikle IoT sistemlerde cihazlardan gelen istek ve cevapları logluyorsanız bunlar çok kısa sürelerde çok büyük rakamlara ulaşabilmektedir.
Loglama başlı başlına kritik bir konu ancak özellikle tekrar etmekte (repro) zorlanacağınız konularda elini kolunuz oluyor. Bizim architect olan abiye (Gökhan Demir) herhangi bir soru sorduğumuzda loglar ne diyor cümlesi benim bu konuya olan bakış açımı ciddi manada değiştirdi. Arkadaşlar da bana bir şey sorduğunda veya ben kendim bir problemle karşılaştığımda kendime varsayılan olarak soruyorum. Çünkü elinizde log yoksa konuşacaklarınız varsayımdan öteye geçmeyebilir. Öncelikle logla, hatadan emin ol sonra da çözüm üzerine çalış bizim temel prensimiz olmalı.
Özetle basit gibi görünen bazı konular bile mikroservislerle çalışmaya başladıkça ne kadar zor olduğunu daha net görüyorsunuz. Yazdığımız bir kod parçasıyla ilgili bir problem yaşandığında onunla ilgili loglara baktığımda bir şeyler anlayabiliyorsam veya en azından problemi saptayabiliyorsam doğru yolda olduğumuzun göstergesidir.
Not: Şu şaheser yazıyı okumanızı naçizane tavsiye ederim.
Yazıyı birer ayet-i kerim ve hadis-i şerif ile bitirelim.
"Kim zerre miktarı hayır işlerse onu görür. Kim de zerre miktarı şer işlerse onu görür." (Zilzâl Suresi, 7-8. Ayetler)
"İlim yazıyla kayıt altına alınır." (Darimî, Mukaddime, 42)
Hiç yorum yok:
Yorum Gönder