Uyarı Yorgunluğu Gerçek: Akıllı Geliştiriciler Bunu Nasıl Çözüyor?

Her uyarı eşit derecede acil görününce hiçbiri acil hissettirmez. İzleme kurulumunuzu kademeli bildirimlerle nasıl düzelteceğinizi ve hangi araçların Echobell ile iyi çalıştığını anlatıyoruz.

Güncellendi

İçindekiler

Bunun bir adı var: uyarı yorgunluğu. İzleme araçlarınız o kadar çok bildirim gönderir ki beyniniz bunları otomatik olarak elemeye başlar — önemli olanları bile.

Genellikle küçük başlar. Her 5xx hatası için e-posta uyarısı kurarsınız. Sonra her başarısız derleme için Slack bildirimi. Ardından Datadog uyarıları, Sentry e-postaları, UptimeRobot mesajları. Bir ay içinde telefonunuz günde 50 kez titrer ve hiçbiri acil hissettirmez. İşin asıl kötü tarafı? Gerçekten bir şey bozulduğunda kendinizi çoktan bunu göz ardı etmeye alıştırmış olursunuz.

Uyarı yorgunluğu yanıt süresini öldürür. Yavaş yanıt süresi de ürünleri öldürür.

Çoğu izleme kurulumu neden sinyalden çok gürültü üretiyor?

Temel sorun, çoğu uyarı aracının tüm olaylara aynı muameleyi yapmasıdır. Zamanın %10'unda başarısız olan tutarsız bir test, "ödeme API'si her kullanıcıya 500 döndürüyor" ile aynı bildirim biçimini alır. Bunlardan biri gecenin ikisinde telefon araması gerektirir. Diğeri muhtemelen haftalık bir özette yer almalıdır.

Her şeye aynı muamele yapıldığında insanlar her şeyi göz ardı etmeye başlar.

Çözüm daha az uyarı değil — daha akıllı iletimdir. Aynı olay, farklı önem seviyelerinde ya da farklı sıklıkta gerçekleştiğinde telefonunuzda farklı aciliyet seviyeleri üretmelidir.

Üç kademeli yaklaşım

Echobell size üç iletim modu sunar ve bu üçünü de iyi kullanmak işin tamamıdır:

  • Etkin (Normal): Standart push bildirimi. Anında eylem gerektirmeyen bilgilendirici olaylar için uygundur.
  • Zaman duyarlı: iOS Odak Modu'nu aşar. Bir iki saat içinde ilgilenilmesi gereken şeyler için iyidir.
  • Arama: Telefonunuzu gelen bir arama gibi çaldırır. Bunu "hemen düzeltilmezse gerçek sonuçları olur" durumlarına ayırın.

Amaç, arama seviyesini gecikmeli yanıtın gerçek sonuçları olduğu olaylara saklamaktır — kaybedilen gelir, zincirleme arızalar, riske giren kullanıcı verisi. Geri kalan her şey zaman duyarlıya ya da daha alt seviyeye iner.

Sentry: Her Python istisnası için çağrı almayı bırakın

Sentry, uyarı yorgunluğunun ders kitabı örneğidir. Varsayılan olarak her yeni sorun türü için size e-posta gönderir. Etkin bir kod tabanında normal bir hafta boyunca bu tam bir yangın hortumudur.

Daha akıllı bir kurulum şöyledir:

  1. Sentry'de Alerts → Create Alert → Issue Alert yolunu izleyin
  2. Bir koşul ekleyin: The issue is seen more than 10 times in 1 hour
  3. Bir eylem ekleyin: Send a notification via webhook → Echobell kanal URL'nizi yapıştırın
  4. Kanalın bildirim türünü time-sensitive olarak ayarlayın

Gerçekten kritik yollar için — ödeme akışlarındaki yakalanmamış istisnalar, kimlik doğrulama hataları, veri bozulması — daha düşük eşikli ayrı bir uyarı ve calling seviyesinde bir Echobell kanalı oluşturun. O kanal yalnızca bu belirli yolda bir şey bozulduğunda çalar.

Sonuç: rutin sorunlar Sentry panonuzda sessizce birikir. Üretimi kıran problemler telefonunuzu çaldırır.

Prometheus ve AlertManager: Önem derecesine göre yönlendirin

Prometheus çalıştırıyorsanız yönlendirmeyi zaten AlertManager yapıyordur. Echobell'i bir webhook alıcısı olarak ekleyerek uyarıları doğrudan ona gönderebilirsiniz.

alertmanager.yml dosyanızda:

receivers:
  - name: echobell-critical
    webhook_configs:
      - url: https://hook.echobell.one/t/<channel-token>
        send_resolved: true

  - name: slack-warnings
    slack_configs:
      - api_url: YOUR_SLACK_WEBHOOK

route:
  group_by: ['alertname', 'job']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: slack-warnings
  routes:
    - match:
        severity: critical
      receiver: echobell-critical

Bu kurulumla severity: critical uyarıları Echobell'e gider ve telefonunuzu çaldırır; uyarılar ise sabaha kadar bekleyebilecekleri Slack'e düşer. Tek bir Prometheus kuralını bile değiştirmeniz gerekmez — yalnızca AlertManager'a yönlendirme katmanını eklersiniz.

Echobell kanalının kendisini Arama olarak ayarlayın. AlertManager bunu kritik olarak etiketliyorsa gerçek bir çalmayı hak ediyordur.

AWS CloudWatch: SNS → Lambda → Echobell

CloudWatch'ta yerleşik webhook çıkışı yoktur, ancak SNS ve küçük bir Lambda fonksiyonuyla birkaç dakikada bu noktaya gelebilirsiniz.

  1. Bir SNS konusu oluşturup CloudWatch alarmınıza bağlayın
  2. Bu konuya abone olan bir Lambda fonksiyonu oluşturun:
import json
import urllib.request

def lambda_handler(event, context):
    message = json.loads(event['Records'][0]['Sns']['Message'])
    alarm_state = message.get('NewStateValue', 'UNKNOWN')

    payload = {
        "title": f"AWS: {message['AlarmName']}",
        "body": message.get('NewStateReason', 'No details'),
        "notificationType": "calling" if alarm_state == "ALARM" else "active"
    }

    req = urllib.request.Request(
        'https://hook.echobell.one/t/<channel-token>',
        data=json.dumps(payload).encode(),
        headers={'Content-Type': 'application/json'},
        method='POST'
    )
    urllib.request.urlopen(req)

Bu desen, SNS'i destekleyen her AWS servisi için işe yarar: RDS olayları, ECS servis arızaları, faturalama eşiği uyarıları, EC2 örnek durumu değişiklikleri. Tek bir Lambda ekleyin, SNS'e bağlayın ve her CloudWatch alarmı gerçekten tetiklendiğinde bir telefon aramasına dönüşsün.

Uyarı yönlendirmesini ekip kararına dönüştürmek

Kademeli uyarılardaki asıl kaldıraç, yönlendirme kararını açık hâle getirmektir — bir kişinin bir kez yapılandırdığı ve kimsenin bulamadığı bir şey olmaktan çıkarmak.

Küçük bir mühendislik ekibi için pratik bir yapı:

KanalTürKimler abone olur
production-api-criticalAramaNöbetçi mühendis
production-api-warningsZaman duyarlıTüm geliştirme ekibi
staging-allEtkinGeliştirme ekibi (isteğe bağlı)
background-jobsEtkinİlgilenen herkes

Nöbet sırası değiştiğinde görevi devreden kişi kritik kanaldan aboneliğini kaldırır, göreve gelen kişi abone olur. Devir teslimin tamamı budur — yapılandırma dosyası yok, yönetim paneli yok.

Echobell kanalları bağlantıyla paylaşılabildiği için her yeni ekip üyesinin abone olması yaklaşık 10 saniye sürer.

Sinyal-gürültü testi

Yeni bir uyarı eklemeden önce tek bir soru sorun: bu, cuma gecesi saat üçte tetiklenirse gerçekte ne yaparım?

  • "Uyanır ve hemen düzeltirim" → Arama
  • "Sabah ilk iş hallederim" → Zaman duyarlı veya Etkin
  • "Muhtemelen hiçbir şey, uykuya dönerim" → bu uyarının var olması gerekip gerekmediğini yeniden düşünün

Çoğu izleme kurulumunda ilk kategoride fazla, ikincide ise yetersiz sayıda şey vardır. Olayların çoğu için doğru yanıt "yarın hallederim"dir ve çalmadan kilit ekranınızda beliren zaman duyarlı bir bildirim bunun için tam da doğru araçtır.

Her seferinde tek bir değişiklik

Mevcut kurulumunuz uyarı yorgunluğu üretiyorsa en hızlı çözüm topyekûn bir elden geçirme değildir. En gürültülü kaynağınızı seçin — muhtemelen Sentry e-postaları ya da herkesin sessize aldığı bir Slack kanalı — ve her olay türünü arama, zaman duyarlı veya etkin olarak sınıflandırın.

Tek kaynak. Tek hafta. Sinyali kaybetmeden gürültünün azalıp azalmadığına bakın.

Sonra bir sonrakine geçin.

İyi ayarlanmış bir uyarı kurulumu, hiç gösterişe kaçmadan günlük iş hayatınızı sessizce iyileştiren şeylerden biridir. Telefonunuzdan korkmayı bırakırsınız. Çaldığında bunun gerçekten önemli olduğuna güvenmeye başlarsınız.


İlgili içerikler