İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

  1. Ana sayfa
  2. Blog
  3. DevOps

DevOps

İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

İzleme size bir şeylerin yanlış olduğunu söyler. Gözlemlenebilirlik, başarısızlık hiç tahmin etmediğiniz bir durum olsa bile nedenini anlamanıza yardımcı olur. İkisinin birlikte nasıl çalıştığını görmek için bir ödeme olayını takip edin.

9 dk okuma
İzleme ve gözlemlenebilirlik: günlükler, ölçümler ve izlemelerle gerçek fark

Önemli noktalar

  • İzleme önceden tanımlanmış metrikleri ve uyarıları kullanarak bilinen sorunları izler.
  • Gözlemlenebilirlik, bir sistemin dahili durumunu, çıktılarından ne kadar iyi anlayabileceğinizdir.
  • Günlükler, metrikler ve izler yaygın sinyallerdir ancak bunları toplamak, içgörüyü garanti etmez.
  • Birlikte çalışırlar: İzleme alarmı yükseltir ve gözlemlenebilirlik nedeni bulmanıza yardımcı olur.

Kontrol paneli yeşil olmasına rağmen müşteriler ödeme işleminin bozulduğundan şikayetçi. Eğer bu konumdaysanız, izleme ile gözlemlenebilirlik arasındaki farkı zaten anlamışsınızdır. İzlemeniz yalnızca kontrol etmeyi düşündüğünüz şeyi kontrol etti ve bu başarısızlık yeni bir şey.

Bu kılavuz, her iki fikri de pazarlama dili olmadan açıklıyor ve kurgusal bir olayı uyarıdan temel nedene kadar takip ediyor. Günlükler, izleme ve sayılar, süreci göstermek için icat edilmiştir. Ayrıca satıcıların ve uygulayıcıların bu çizgiyi farklı çizdiğini ve bazılarının bunu kısmen bir pazarlama ayrımı olarak değerlendirdiğini de bilmelisiniz. Biz pratik kısma odaklanıyoruz.

Kısa cevap

İzleme bir etkinliktir. CPU, hata oranı veya disk alanı gibi neleri izleyeceğinize önceden karar verirsiniz ve uyarıları tetikleyen eşikleri belirlersiniz. Cevap veriyor: “Endişelendiğim şey mi oldu?”

Gözlemlenebilirlik sisteminizin bir özelliğidir. Terim, bir sistemin iç durumunu dış çıktılarından ne kadar iyi çıkarabileceğinizi açıklayan kontrol teorisinden gelir. Uygulamada şu yanıtı verir: “Hiç beklemediğim sorunlar da dahil olmak üzere ne oluyor ve neden?”

Bir araba düşünün. Gösterge panosundaki uyarı ışıkları izliyor. Bilinen bir dizi sorunu kapsarlar. Bir tamircinin motorun herhangi bir parçası hakkında yeni sorular sormasına olanak tanıyan tam teşhis portu, gözlemlenebilirliğe daha yakındır.

İzleme ve gözlemlenebilirlik yan yana

Görünüş İzleme gözlemlenebilirlik
Ana soru Bir sorun mu var? Neden yanlış?
Şunun için en iyisi: Bilinen arıza modları Bilinmeyen ve yeni başarısızlıklar
Yaklaşım Önceden tanımlanmış kontroller ve gösterge tabloları Zengin verilerin açık keşfi
Tipik çıktı Uyarılar ve durum grafikleri Yeni soruların yanıtları
Veri ayrıntısı Çoğunlukla toplu Mümkün olan yerlerde istek başına ayrıntılı
Kurulum Denetimleri dışarıdan yapılandırma Kodunuzun enstrümantasyonunu gerektirir
Kullanan Operasyonlar, çağrı üzerine personel Geliştiriciler ve çağrı personeli

Bu ikisi arasında bir seçim değil. Ne zaman bakmanız gerektiğini söyleyen uyarılara hala ihtiyacınız var.

Neden tek başına izleme yeterli değil?

Tek bir sunucudaki tek bir uygulamayla, ters gidebilecek şeylerin listesi oldukça kısa olduğundan hepsini izleyebilirsiniz. Modern bir sistemde düzinelerce hizmet, kuyruk ve üçüncü taraf API’nin yanı sıra gelip giden kapsayıcılar bulunabilir. Başarısızlıklar, kimsenin öngörmediği kombinasyonlara dönüşür: bir bölge, bir müşteri türü, belirli bir uygulama sürümü ve tek bir yavaş bağımlılık.

Düşünmediğiniz bir soru için önceden gösterge tablosu yazamazsınız. Daha sonra sormanızı sağlayacak verilere ihtiyacınız var.

Günlükler, ölçümler ve izler

Bu üç tür telemetriye genellikle gözlemlenebilirliğin temelleri denir. Her biri farklı bir soruyu yanıtlıyor:

Sinyal Bu ne Cevaplar Zayıflık
Metrikler Zaman içindeki sayılar Ne kadar? Kötüleşiyor mu? Tek olaylarla ilgili küçük ayrıntılar
Günlükler Bireysel olayların kayıtları Tam olarak ne oldu? Pahalı ve gürültülü olabilir
İzler Bir isteğin hizmetler arasındaki yolu Zaman nereye gitti? Enstrümantasyon gerektirir ve sıklıkla örneklenir

Metrikler

http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4

Metriklerin saklanması ucuz ve sorgulanması hızlıdır; bu da onları gösterge tabloları ve uyarılar için ideal kılar. Birçok metrik sistemde kullanıcı kimliği gibi yüksek kardinaliteli etiketlere karşı dikkatli olun çünkü bunlar maliyeti büyük ölçüde artırabilir.

İzler

Bir izleme, hizmetler genelinde bir isteği takip eder. Her adım, başlangıç zamanı ve süresi olan bir aralıktır:

POST /checkout                      2410 ms
├─ auth-service: verify token         18 ms
├─ cart-service: load cart            42 ms
├─ pricing-service: calculate       2290 ms   <-- slow
│  └─ SELECT coupons ...            2265 ms
└─ payment-service: not reached

Bir izleme, yavaş bir adımı açıkça ortaya koyar ve bunu ayrı hizmetlerden ayrı günlüklerde görmek çok zordur.

Günlükler

Günlükler bir anda olup bitenlerin ayrıntılarını sağlar. Bunları bir anda nasıl faydalı hale getirebileceğimize bakıyoruz.

Bir olaya ilişkin açıklama

Kurgusal bir örnekte parçaların birbirine nasıl uyduğunu burada görebilirsiniz.

Adım Sinyal Ne öğreniyoruz
1. Yangınları uyarın Metrik Checkout p95 gecikmesi 1 saniyelik hedefini geçti
2. Parçalayın Metrik Web değil yalnızca mobil uygulama etkilendi
3. Bir isteği inceleyin İz Zaman, fiyatlandırma hizmetinde, kupon sorgusunda
4. Ayrıntıları okuyun Günlükler Yavaş isteklerin tümü bugünkü kampanyadan bir kupon kullanıyor
5. Nedeni doğrulayın Sorgu planı Kupon aramasında uygun dizin yok
6. Düzeltin Dağıtım Dizini ekleyin ve gecikmenin iyileşmesini izleyin

İzleme 1. adımı gerçekleştirdi. Bundan sonraki her şey gözlemlenebilirlikti. Her sorunun bir önceki yanıttan nasıl geldiğine dikkat edin. Hiç kimse “bugünün kampanyasından mobil uygulama kupon sorgusu” için önceden bir kontrol paneli oluşturamazdı. Düzeltmenin kendisi için, SQL sorgu optimizasyonu kılavuzumuzda bu tür bir planın nasıl okunacağı gösterilmektedir.

Daha iyi günlükler

Düz metin günlükleri insan gözüne göre yapılmıştır ve sorgulanması zordur. Yapılandırılmış günlükler, bir makinenin filtreleyebileceği alanları kullanır:

# Hard to search
ERROR Payment failed for user 42 after 3 tries

# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
 "attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}

İkinci formla hemen “son bir saatte sağlayıcı başına kaç arıza oldu?” diye sorabilirsiniz. trace_id alanı, dokunduğu her hizmette bir günlük satırını isteğin tamamına bağladığı için özellikle değerlidir.

Hiçbir zaman şifreleri, jetonları veya kart numaralarını kaydetmeyin ve kişisel verilerinize dikkat etmeyin. Rehberimizde açıklandığı gibi, JWT’ler onları bir günlükten okuyan herkes tarafından yeniden kullanılabilir.

İpucu: Bir olay sırasında sürüm, bölge, müşteri katmanı ve özellik işaretleme durumu gibi istediğiniz bağlamı ekleyin. “Bir bölgede yalnızca 2.14 sürümü” diyebilmek çoğu zaman sorunu kendi başına çözmektedir.

Altın sinyaller

Neyi izleyeceğinizden emin değil misiniz? Google’ın Site Güvenilirliği Mühendisliği kitabı, kullanıcıya yönelik sistemler için dört sinyal önerir:

Sinyal Soru Örnek
Gecikme Talepler ne kadar sürüyor? p95 ve p99 tepki süresi
Trafik Ne kadar talep var? Saniye başına istek
Hatalar Kaç istek başarısız oldu? 5xx yanıtın oranı
Doygunluk Sistem ne kadar dolu? CPU, bellek, bağlantı havuzu kullanımı

Yük testi ile stres testinin karşılaştırması bölümünde gösterdiğimiz gibi, ortalamalar yavaş istekleri gizlediğinden gecikme için yüzdelik dilimleri kullanın.

İnsanların güvendiği uyarılar

Uyarılar sürekli olarak etkinleşirse insanlar bunları okumayı bırakır. İyi olanlar birkaç kurala uyar:

  • Kullanıcıların hissettiği belirtilere ilişkin uyarı. “%2’nin üzerindeki ödeme hataları”, “%85’teki CPU”yu geride bırakır. Kimseye zarar vermeyen yüksek CPU kimseyi uyandırmamalı.
  • Her uyarıyı uygulanabilir hale getirin. Kimsenin bir şey yapması gerekmiyorsa, bunu bir kontrol paneli öğesi haline getirin veya kaldırın.
  • Runbook’a bağlantı. Yanıtlayan kişiye nereye bakacağını ve neyi deneyeceğini söyleyin.
  • Bunları düzenli olarak inceleyin. Geçen ay yok sayılan uyarıları silin veya düzeltin.

Hizmet seviyesi hedefleri

Bir SLO, “site hızlı ve güvenilir olmalıdır” ifadesini “ödeme isteklerinin %99,9’u 30 gün içinde başarılı olur” gibi ölçülebilir bir hedefe dönüştürür. Bu, hata bütçesi olarak bilinen hataların yaklaşık %0,1’ine izin verir. Elinizde çok şey kaldıysa daha hızlı gönderim yapabilirsiniz, tükenmek üzereyse güvenilirliğe öncelik verebilirsiniz. Teslimat hızı ve istikrar arasındaki tartışmaları çözmenin yararlı bir yoludur.

OpenTelemetry ve araçlar

OpenTelemetry, telemetri oluşturmaya ve dışa aktarmaya yönelik açık kaynaklı, satıcıdan bağımsız bir standarttır. Cloud Native Computing Foundation’ın bir projesidir. Bununla enstrümantasyon yapmak, arka ucunuzu daha sonra kodunuzu yeniden yazmaya gerek kalmadan değiştirebileceğiniz anlamına gelir. Kendisi bir depolama veya gösterge paneli ürünü değildir, bu nedenle onu bir ürünle eşleştirirsiniz:

Amaç Açık kaynak örnekleri Ticari örnekler
Metrikler Prometheus Datadog, Yeni Kalıntı
Gösterge tabloları Grafana Datadog, Dynatrace
Günlükler Loki, Açık Arama Gevşek, Elastik
İzler Jaeger, Tempo Petek, Datadog

Bu ürünler sıklıkla değiştiğinden mevcut özellikleri ve fiyatları kendiniz kontrol edin. Veri hacmi arttıkça maliyetler hızla artabilir; bu nedenle örneklemeyi kullanın ve saklama sınırlarını belirleyin.

Nasıl başlanır?

  1. En önemli hizmetiniz için altın sinyallerle başlayın.
  2. Kullanıcıların fark ettiği belirtilere bir veya iki uyarı ekleyin.
  3. Her satırda bir istek kimliği bulunan yapılandırılmış günlüklere geçin.
  4. Otomatik enstrümantasyon birçok yaygın çerçeveyi kapsayabildiğinden, OpenTelemetry ile ana kullanıcı yolculuğunuza izleme ekleyin.
  5. Dağıtımları grafiklerinize bağlayın böylece CI/CD ardışık düzeninizden bir sürümün bir değişikliğe neden olup olmadığını görebilirsiniz.
  6. Her olaydan ders alın. Her olaydan sonra, hangi verilerin çözümü daha hızlı hale getirebileceğini sorun ve bunu ekleyin.

Tek bir hizmete sahip küçük bir ekibin büyük bir platforma ihtiyacı yoktur. Temel ölçümler, iyi günlükler ve birkaç uyarı yeterli olabilir. Hizmetlerin sayısı arttıkça izleme de varlığını sürdürüyor.

Yaygın hatalar

  • Bir araç satın almak ve buna gözlemlenebilirlik adını vermek. Değer, iyi enstrümantasyondan ve verileri nasıl kullandığınızdan gelir.
  • Üç sütunu bir kontrol listesi olarak ele almak. Bağlantı kurmanın hiçbir yolu olmayan ayrı veriler, sekmeler arasında gezinmenizi sağlar. Paylaşılan kimlikler önemlidir.
  • Her şeyi toplamak. Filtrelenmemiş telemetri pahalı hale gelir ve gürültüye neden olur.
  • Çok fazla kontrol paneli. Birkaç güvenilir görünüm, kimsenin açmadığı yüz görünümü geride bırakıyor.
  • Test etmenin yerini aldığını düşünüyorum. Yayınlanmadan önce hâlâ testlere ihtiyacınız var. Ancak Canary bültenleri bu sinyallerle iyi bir şekilde eşleşiyor.

Son sözler

İzleme size bir şeylerin ters gittiğini söyler ve gözlemlenebilirlik size bunun nedenini bulmanın yolunu verir. Pratik test basittir: Alışılmadık bir sorun ortaya çıktığında, yeni kod göndermeden nedenini bulabilir misiniz? Bir dahaki sefere bir olayla karşılaştığınızda cevaplayamadığınız her soruyu yazın. Bu liste sizin yol haritanızdır.

Sık sorulan sorular

İzleme ve gözlemlenebilirlik arasındaki fark nedir?

İzleme, önceden tanımlanmış ölçümleri ve bilinen sorunlara ilişkin uyarıları izler. Gözlemlenebilirlik, beklenmeyen sorunlar da dahil olmak üzere bir sistemin durumunu çıktılarından anlama yeteneğidir.

Gözlemlenebilirliğin üç temel direği nedir?

Bunlar günlükler, metrikler ve izlerdir. Günlükler olayları kaydeder, ölçümler zaman içindeki değerleri ölçer ve izler, hizmetler genelinde tek bir isteği takip eder.

İzlemem varsa gözlemlenebilirliğe ihtiyacım var mı?

Küçük ve basit bir sistem için iyi bir izleme ve loglama yeterli olabilir. Sistemler dağıtıldıkça ve arızalar daha az öngörülebilir hale geldikçe gözlemlenebilirlik daha değerli hale gelir.

OpenTelemetry Nedir?

Günlükleri, ölçümleri ve izleri üretmek ve dışa aktarmak için kullanılan açık kaynaklı bir standart ve araçlar setidir; dolayısıyla tek bir satıcının temsilcisine bağlı kalmazsınız.

Dört altın sinyal nedir?

Bunlar gecikme, trafik, hatalar ve doygunluktur. Google’ın SRE kılavuzu, kullanıcıya yönelik sistemlerin izlenmesi için bir başlangıç ​​noktası olarak bunları önerir.

Öğrenmeye devam et

Stack Quora ile çalışın

Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?

Ekiplerin daha iyi yazılımlar sunmasına ve sitelerini büyütmesine yardımcı oluyoruz. Bize ne üzerinde çalıştığınızı söyleyin, biz de bir sonraki adım için net bir öneride bulunalım.

Okumaya devam et

Daha fazla kılavuz test, yapay zeka ve modern geliştirme

Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.

Yapay zekâ

Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?

Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…

Makaleyi okuyun →
DevOps

Açıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı

Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…

Makaleyi okuyun →
Yazılım geliştirme

API Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması

API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…

Makaleyi okuyun →
Test otomasyonu

Python'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar

Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…

Makaleyi okuyun →
Yazılım testi

Kod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı

Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…

Makaleyi okuyun →
Veritabanları ve SQL

SQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı

DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin

Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…

Makaleyi okuyun →
Yazılım geliştirme

TypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi

TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…

Makaleyi okuyun →
Yazılım geliştirme

Python *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar

Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…

Makaleyi okuyun →
Yazılım geliştirme

Python Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği

Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…

Makaleyi okuyun →
Yapay zekâ

Yapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?

Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…

Makaleyi okuyun →
DevOps

İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…

Makaleyi okuyun →
DevOps

Docker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın

Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…

Makaleyi okuyun →
Test otomasyonu

TDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı

TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …

Makaleyi okuyun →
Yazılım geliştirme

Git merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır

Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.

Makaleyi okuyun →
Yazılım geliştirme

Python Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar

Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.

Makaleyi okuyun →
Veritabanları ve SQL

SQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)

SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.

Makaleyi okuyun →