İçindekiler
- Çoğu izleme kurulumu neden sinyalden çok gürültü üretiyor?
- Üç kademeli yaklaşım
- Sentry: Her Python istisnası için çağrı almayı bırakın
- Prometheus ve AlertManager: Önem derecesine göre yönlendirin
- AWS CloudWatch: SNS → Lambda → Echobell
- Uyarı yönlendirmesini ekip kararına dönüştürmek
- Sinyal-gürültü testi
- Her seferinde tek bir değişiklik
- İlgili içerikler
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:
- Sentry'de Alerts → Create Alert → Issue Alert yolunu izleyin
- Bir koşul ekleyin:
The issue is seen more than 10 times in 1 hour - Bir eylem ekleyin: Send a notification via webhook → Echobell kanal URL'nizi yapıştırın
- Kanalın bildirim türünü
time-sensitiveolarak 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.
- Bir SNS konusu oluşturup CloudWatch alarmınıza bağlayın
- 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ı:
| Kanal | Tür | Kimler abone olur |
|---|---|---|
production-api-critical | Arama | Nöbetçi mühendis |
production-api-warnings | Zaman duyarlı | Tüm geliştirme ekibi |
staging-all | Etkin | Geliştirme ekibi (isteğe bağlı) |
background-jobs | Etkin | İ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.