
Uptime Monitoring - Alertmanager ile Kesinti Bildirimi Otomasyonu
Bir web sitesinin veya API'nin çöktüğünü müşterilerinizden önce fark etmek, operasyonel güvenilirliğin temel taşıdır. Manuel kontrol yerine otomatik uptime monitoring kurarak HTTP, TCP ve DNS sağlık kontrollerini sürekli çalıştırabilir, Alertmanager ile kesinti anında Slack, PagerDuty veya e-posta b
Ahmet Yılmaz
Kıdemli Altyapı Mühendisi
Bir web sitesinin veya API'nin çöktüğünü müşterilerinizden önce fark etmek, operasyonel güvenilirliğin temel taşıdır. Manuel kontrol yerine otomatik uptime monitoring kurarak HTTP, TCP ve DNS sağlık kontrollerini sürekli çalıştırabilir, Alertmanager ile kesinti anında Slack, PagerDuty veya e-posta bildirimi gönderebilirsiniz. Bu rehberde Prometheus Blackbox Exporter ile uptime izleme kurulumundan Alertmanager yapılandırmasına, alert kurallarından on-call yönetimine kadar tüm süreci ele alıyoruz.
Uptime Monitoring Neden Kritiktir?
Downtime doğrudan gelir kaybı demektir. Bir e-ticaret sitesi için dakikada binlerce liralık satış kaybı, bir SaaS uygulaması için SLA ihlali ve cezai yaptırım anlamına gelebilir. Proaktif izleme ile sorunları kullanıcılar fark etmeden tespit edip müdahale edebilirsiniz.
| Uptime Hedefi | Yıllık İzin Verilen Downtime | Aylık İzin Verilen Downtime |
|---|---|---|
| 99% (iki dokuz) | 3 gün 15 saat | 7 saat 18 dakika |
| 99.9% (üç dokuz) | 8 saat 46 dakika | 43 dakika 50 saniye |
| 99.99% (dört dokuz) | 52 dakika 36 saniye | 4 dakika 23 saniye |
| 99.999% (beş dokuz) | 5 dakika 16 saniye | 26 saniye |
💡 Gerçekçi Hedef: Çoğu web uygulaması için %99.9 (üç dokuz) makul bir hedeftir. Bu aylık yaklaşık 43 dakika downtime'a izin verir. %99.99 ve üzeri hedefler yedekli altyapı, otomatik failover ve 7/24 on-call ekip gerektirir.
Blackbox Exporter ile Endpoint İzleme
Prometheus Blackbox Exporter, HTTP, HTTPS, TCP, ICMP ve DNS protokolleri üzerinden endpoint'lerin erişilebilirliğini kontrol eder. Uygulamanızın dışından (black-box) bakarak gerçek kullanıcı deneyimini simüle eder.
version: "3.8"
services:
prometheus:
image: prom/prometheus:v2.50.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./alert-rules.yml:/etc/prometheus/alert-rules.yml
ports:
- "9090:9090"
networks:
- monitoring
blackbox-exporter:
image: prom/blackbox-exporter:v0.25.0
volumes:
- ./blackbox.yml:/etc/blackbox_exporter/config.yml
ports:
- "9115:9115"
networks:
- monitoring
alertmanager:
image: prom/alertmanager:v0.27.0
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
networks:
- monitoring
networks:
monitoring:
driver: bridge
Blackbox Exporter Yapılandırması
Blackbox Exporter'ın hangi kontrolleri yapacağını modüller ile tanımlarsınız:
modules:
http_2xx:
prober: http
timeout: 10s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
valid_status_codes: [200, 201, 301, 302]
follow_redirects: true
preferred_ip_protocol: ip4
tls_config:
insecure_skip_verify: false
http_post_api:
prober: http
timeout: 10s
http:
method: POST
headers:
Content-Type: application/json
body: '{"health": "check"}'
valid_status_codes: [200]
tcp_connect:
prober: tcp
timeout: 5s
dns_check:
prober: dns
timeout: 5s
dns:
query_name: hosted.cloud
query_type: A
transport_protocol: udp
ssl_expiry:
prober: http
timeout: 10s
http:
valid_status_codes: [200, 301, 302]
tls_config:
insecure_skip_verify: false
Prometheus Scrape Yapılandırması
Prometheus'un Blackbox Exporter üzerinden hedef endpoint'leri kontrol etmesi için scrape config tanımlayın:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- alert-rules.yml
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
scrape_configs:
- job_name: "blackbox-http"
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://hosted.cloud
- https://api.hosted.cloud/health
- https://admin.hosted.cloud
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
- job_name: "blackbox-tcp"
metrics_path: /probe
params:
module: [tcp_connect]
static_configs:
- targets:
- db-server:5432
- redis-server:6379
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
Prometheus Alert Kuralları
Alert kuralları, belirli koşullar sağlandığında Alertmanager'a bildirim göndermesini tetikler. Uptime monitoring için temel kurallar:
groups:
- name: uptime-alerts
rules:
# Endpoint tamamen erisilemez
- alert: EndpointDown
expr: probe_success == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Endpoint {{ $labels.instance }} down"
description: "{{ $labels.instance }} 2 dakikadir erisilemez."
# Yavas yanit suresi (2 saniyeden fazla)
- alert: HighResponseTime
expr: probe_http_duration_seconds{phase="transfer"} > 2
for: 5m
labels:
severity: warning
annotations:
summary: "Slow response: {{ $labels.instance }}"
description: "{{ $labels.instance }} yanit suresi 5 dakikadir 2 saniyenin uzerinde."
# SSL sertifikasi 14 gun icinde sona erecek
- alert: SSLCertExpiringSoon
expr: (probe_ssl_earliest_cert_expiry - time()) / 86400 < 14
for: 1h
labels:
severity: warning
annotations:
summary: "SSL cert expiring: {{ $labels.instance }}"
description: "{{ $labels.instance }} SSL sertifikasi {{ $value | humanize }} gun icinde sona erecek."
# HTTP durum kodu 5xx
- alert: HTTPStatusError
expr: probe_http_status_code >= 500
for: 1m
labels:
severity: critical
annotations:
summary: "HTTP 5xx: {{ $labels.instance }}"
description: "{{ $labels.instance }} HTTP {{ $value }} durum kodu donuyor."
⚠️ Dikkat: for süresini çok kısa tutmayın. Geçici ağ dalgalanmaları yanlış alarm (false positive) üretir. Critical alert'ler için en az 2 dakika, warning alert'ler için 5 dakika bekleyin. Ancak gerçek kesintilerde hızlı bildirim için bu süreleri iş gereksinimlerinize göre ayarlayın.
Alertmanager Yapılandırması
Alertmanager, Prometheus'tan gelen alert'leri alır, gruplar, tekrar eden bildirimleri bastırır ve doğru kanala yönlendirir. Routing, grouping ve inhibition mekanizmaları ile alert yorgunluğunu önler.
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/T.../B.../xxx'
route:
receiver: slack-default
group_by: [alertname, instance]
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
# Critical alert'ler PagerDuty'ye
- match:
severity: critical
receiver: pagerduty-critical
repeat_interval: 1h
continue: true
# Tum alert'ler Slack'e de gitsin
- match_re:
severity: critical|warning
receiver: slack-alerts
receivers:
- name: slack-default
slack_configs:
- channel: '#monitoring'
title: '{{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
- name: slack-alerts
slack_configs:
- channel: '#alerts-critical'
color: '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}'
title: '[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}'
- name: pagerduty-critical
pagerduty_configs:
- service_key: 'your-pagerduty-integration-key'
severity: critical
inhibit_rules:
# EndpointDown varsa HighResponseTime'i bastir
- source_match:
alertname: EndpointDown
target_match:
alertname: HighResponseTime
equal: [instance]
Grafana ile Uptime Dashboard
Blackbox Exporter metriklerini Grafana'da görselleştirerek tüm endpoint'lerinizin durumunu tek bir panelden izleyebilirsiniz. Temel metrikler:
-
probe_success Endpoint erişilebilir mi? 1 = başarılı, 0 = başarısız. Stat panel ile yeşil/kırmızı durum göstergesi oluşturun.
-
probe_http_duration_seconds HTTP yanıt süresi (DNS, connect, TLS, transfer aşamaları ayrı ayrı). Time series panel ile trend analizi yapın.
-
probe_ssl_earliest_cert_expiry SSL sertifika bitiş tarihi (Unix timestamp). Kalan gün sayısını hesaplayarak sertifika yenileme takibi yapın.
-
Uptime Yüzdesi (PromQL)
avg_over_time(probe_success[30d]) * 100ile son 30 günlük uptime yüzdesini hesaplayın.
On-Call Yönetimi ve Alert Yorgunluğunu Önleme
Etkili bir alerting sistemi yalnızca doğru zamanda, doğru kişiye, doğru bilgiyi iletmelidir. Aşırı alert gönderimi "alert fatigue" (alarm yorgunluğu) yaratır ve ekibin gerçek sorunları gözden kaçırmasına neden olur.
Severity Ayrımı
Critical: anında PagerDuty/telefon. Warning: Slack bildirimi. Info: yalnızca dashboard'da görünsün.
Inhibition Kuralları
Sunucu tamamen çöktüyse, o sunucudaki tüm servis alert'lerini bastırın. Tek bir kök neden bildirimi yeterlidir.
Silence ve Maintenance
Planlı bakım sırasında Alertmanager silence oluşturun. Bakım bitince otomatik kaldırılır.
Sunucu metrikleri için Prometheus + Grafana rehberimizi, merkezi log yönetimi için ELK Stack rehberimizi, SSL sertifika yönetimi için Let's Encrypt Otomatik Yenileme rehberimizi inceleyin. Alertmanager Resmi Dokümantasyonu ve Blackbox Exporter GitHub ek kaynak olarak faydalıdır.
Sıkça Sorulan Sorular
Blackbox Exporter ile internal servisleri de izleyebilir miyim?
Evet, Blackbox Exporter yalnızca public endpoint'lerle sınırlı değildir. Internal API'ler, veritabanı portları ve mesaj kuyruğu bağlantılarını TCP probe ile izleyebilirsiniz. Kubernetes'te ClusterIP servisleri de kontrol edilebilir.
Uptime monitoring için ne sıklıkta kontrol yapmalıyım?
Kritik servisler için 15-30 saniye aralıkla kontrol önerilir. Daha az kritik servisler için 1-5 dakika yeterlidir. Çok sık kontrol (5 saniyeden az) hedef servise gereksiz yük bindirebilir ve yanlış alarm üretebilir.
Alertmanager'da alert tekrarını nasıl kontrol ederim?
repeat_interval parametresi ile aynı alert'in ne sıklıkta tekrar gönderileceğini belirleyin. Critical alert'ler için 1 saat, warning alert'ler için 4 saat makul değerlerdir. Çözülmemiş alert'ler bu aralıkla tekrar bildirilir.
Birden fazla lokasyondan uptime kontrolü yapabilir miyim?
Evet, farklı coğrafi lokasyonlara Blackbox Exporter kurarak multi-location monitoring yapabilirsiniz. Bu sayede bölgesel ağ sorunlarını tespit edebilir ve yanlış alarm oranını düşürebilirsiniz. En az 2-3 farklı lokasyondan kontrol önerilir.
Sonuç
Prometheus Blackbox Exporter ile HTTP, TCP ve DNS endpoint'lerinizi sürekli izleyin. Alertmanager ile kesinti anında doğru ekibe doğru kanaldan bildirim gönderin. Inhibition kuralları ve severity ayrımı ile alert yorgunluğunu önleyin ve Grafana dashboard'ları ile uptime metriklerinizi görselleştirin.
Kesintisiz Çalışan Altyapı mı Arıyorsunuz?
Hosted Cloud'un %99.9 uptime garantili sunucuları ile hizmetlerinizi güvenle çalıştırın.
Bulut Sunucu Planlarını İncele →Ahmet Yılmaz
Kıdemli Altyapı Mühendisi
10 yılı aşkın bulut altyapısı ve DevOps deneyimiyle Hosted Cloud'un teknik ekibinde yer almaktadır. Kubernetes, Terraform ve yüksek erişilebilirlik mimarileri üzerine uzmanlaşmıştır.
Yorumlar yakında