Telemetri 101

telemetri-101

Metre demek ölçüm demek, tele kelimesinin anlamı da uzaktan demektir. İki kelimenin birleşimiyle oluşan telemetri kelimesi, uzaktan birşeyleri ölçümleme anlamını taşır.

Yazılım ilerledikçe daha da karmaşıklaşıyor fakat bu karmaşıklığa karşı elimizde daha güçlü toollar olmaya başlıyor. Bir sorun olduğunda yazılımımıda neyin yanlış olduğunu bulmanın yanında bu şeyin neden yanlış olduğu cevabını da vermemiz gerekiyor

Bu sorunun cevabını verebilmek için yeterli observability seviyesini yakalamamız gerekiyor. Bu eviyeyi de 4 ana telemetri ölçümleme tekniğiyle rahatça yakalayabiliriz. Telemetri yapısını öyle bir kurmalıyızki, her birinden aynı anda veri alalım ve bir pencerede durumu çözümleyelim.

Bahsettiğimiz 4 ana telemetri tekniğini MELT diye kısaltabiliriz: metrics, events, logs, traces. Bu dört ana metrikle, sistemimiz içerisinde bulunan yapıların birbiriyle bağlantısı, sistemin genel performans ve sağlık durumu gibi genel bilgileri kolayca elde ederiz.

Events

Birim zamanda o anlık oluşan bir olaya denir. Örneğin, ecommerce sisteminizden birinin bir ürün satın alması bir event’tir. Örneğin bir event kaydı kaydı şu şekilde gözükecektir:

At 3:34pm on 2/21/2019, a bag of BBQ chips was purchased for $1.

Başka bir şekilde örnek verecek olursak, bir ürünün stoğunun artmaya başladığı zaman, ürünün fiyatının değiştiği zaman (eski ve yeni fiyatı gösteren bir kayıt), başka bir kullanıcının login olması gibi sadece müşteriye ait değil, sistemin olağan işleyişi sonucunda oluşan kayıtlara event diyebiliriz.

Eventlardan bir olay tipinin hangi zaman noktasında oluştuğunu saptamak için kullanırız. Örneğin bir hata oluştu sistemimizde ve bu hata hangi state’ler arasında oluştuğunu bulmak için hatanın gerçekleştiği zamanın hemen öncesine ve sonrasındaki ilgili event kayıtlarına baktığımızda hatanın neyden kaynaklandığını bulmamız oldukça kolay olacaktır. Başka bir örnek olarak, sisteminizde verilen siparişlerin event kaydını tuttuğunuzu varsayarsak o gün/hafta/ay ne kadar kâr elde ettiğinizi sadece event kayıtları sayesinde de elde edebilirsiniz. Eventlar ile ilgili başka bir ayrıntı da event oluştuğu anda o anki durumu yansıtan neredeyse her önemli bilgiyi o event içerisinde kayıt altına almak isteyeceğinizdir.

Event’lar genellikle computational olarak ağır bir işlem sonucunda oluşan kayıtlardır. Örneğin bir siparişin geçilmesi için kullanıcı en az 2-3 adet sayfa görmeli, sırasıyla basket, checkout, ödeme sayfası gibi ve her birinde en az bir butona tıklamalı. Bu süreç sistemsel olarak cpu gücü (computational power) gerektiren olaylardır. Ayrıca event’ları bazen veritabanında saklamak isteyeceğiniz için ekstra kaynağa ihtiyacınız olacak demektir. Shopunuzu ayağa kaldırdığınız sunucu odalarınızdan otomatik sıcaklık değerleri almaya çalışacaksınız diyelim, neredeyse her saniye değer alacağınız için telemetri datası çekmek için eventları kullanmak yerine metrikleri tercih etmeniz gerekiyor.

Metrics

Kısaca belirli aralıklarda yapılan ayrık sayısal ölçüm demektir. Bir şeyin sıcaklığı, CPU’nun o anki kullanım yüzdesi, RAM’in o anki doluluk oranı gibi. Genellikle tüm metrik verileri şu üç şeyi içerisinde barındırır: metrik ismi, zaman damgası ve ölçümü belirten sayısal bir değer. Genellikle o anda gerçekleşen birden fazla sayısal ölçümü tek satırda belirtmek isteriz. Örnek:

For the minutes of 3:34-3:35 pm on 2/21/2019, there were three purchases totalling $2.75.

Metrikleri event kayıtlarıyla karşılaştıracak olursak, aldığımız değerler sadece sayısal olduğu için veritabanında daha az yer kaplayacağı kesin ve üstelik ilgili tarihlerdeki kâr oranınızı da size söyleyecektir. Fakat siparişlerin kimler tarafından yapıldığı bilgisi yok, sadece belirli saatte kaç adet sipariş toplamda ne kadarlık tutmuş onun kaydını tuttuk. Her bir siparişe ait kaydı ayrı ayrı tutmadık, ama tutmak isteseydik event kullanırdık. Temelde aralarındaki fark budur.

Event avantajlarıDezavantajları
Tek bir olaya ait verileri saklayabilirizVeritabanında yer kaplar
Belirli zamanda tam olarak ne gerçekleşmiş cevabını net olarak bize verebilir.Event’a ait bilgileri toplarken sistem kaynaklarını olabildiğince kullanacaktır.
Event tablosuna sorgu atması zaman alır.
Metric avantajlarıDezavantajları
Daha az yer kaplarÖnceden hangi değerleri almanız gerektiğini belirlemeniz gerekiyor
Daha az sistem kaynağı kullanır

Metrikler büyük miktarda veya düzenli aralıklarla toplanan veriler için iyi çalışır ancak bunlar event’lara göre daha az ayrıntılı olacaktır.

Eventlar, veriler nispeten küçük veya düzensiz olduğunda ya da önceden görmek istediğiniz belirli aralıktaki tüm olayları bilmeniz gereken yerlerde eventlar yararlı olur ve silinene kadar saklanır.

Log kayıtları

Sistemimizde herhangi bir satır çalıştırıldığı zaman oluşturulan bir kayıttır. Bir yazılım sisteminin neredeyse her köşesinden bir log kaydı fışkırır. Gerçekleşen tüm olay ve hataların detayını bizlere sağlar. Tek yaptığı şey her seferinde “ne oldu” sorusuna cevap vermesidir. Geliştiricilerin sistemlerdeki bugları çözmek için en sık kullandığı telemetri türüdür. Event’lardan daha granülerdir. Bir müşteri bir sipariş oluştururken en az 2 sayfa (basket ve checkout) işlem yaptıktan sonra bir event kaydı oluşuyorsa, bu sayfalardaki her işlem için birer log kaydı oluşmaktadır.

2/21/2019 15:33:14: User pressed the button ‘Checkout’
2/21/2019 15:33:17: User requested checkout page
2/21/2019 15:33:17: SUCCESS – /checkout – Chrome – 200 OK
2/21/2019 15:33:46: User paid $5.00
2/21/2019 15:33:46: ERROR – User paid $5.00

Log datasını formatlamaz isek biraz daha ham bir çıktıya sahip olacaktır. Genelde hangi zaman noktasında hangi sayfada ne işlemin yapıldığı gibi olabildiğince mantıklı şeyleri bir araya getirerek formatlanmış bir şekilde log kaydının oluşmasını sağlamak mantıklı bir seçim olacaktır.

Traces

Belirli tipte bir olay zinciri sonucu oluşan kayıtlardır. Örneğin, bir atm makinasında kullanıcının para çek butonuna bastığında atm’nin parayı ne kadar sürede kullanıcıya teslim süresini, içeride hangi işlemlerin ne kadar sürede çalıştığını gösteren bir veya birden fazla trace içerisinde belirtebiliriz. İlgili süreçte ardı ardına işleyen fonksiyonlar, kendi çalışma sürelerine ait detaytları sıradaki fonksiyona devreder ve en sonda sırayla hangi fonksiyonların toplam ne kadar sürede çalıştığı bilgisiyle bir trace kaydı oluşturulabilir.

Servisler arasındaki ilişkilerin, biraz önce bahsettiğimiz gibi zincirleme şeklinde izlenmesi gerektiğinde tracing metodu kullanılır. Bu sayede neyin hangi sırada gerçekleştiği, hangi değerlerle çalıştığı ve sonraki servisin önceki servisten gelen veriye göre kendine nasıl bir işlem yolu çizdiği gibi birçok detayı elde edebiliriz.

Kaynak: MELT 101