Alertmanager ve Blackbox Exporter ile Ubuntu Web Sunucusu İzleme Rehberi
Web sunucunuzun kesintisiz çalıştığından emin olmak ister misiniz? Dijital varlığınızın kalbi olan web sunucularının sağlıklı çalışması, kullanıcı deneyimi ve iş sürekliliği için hayati önem taşır. Bu kapsamlı rehberde, Alertmanager ve Blackbox Exporter kullanarak Ubuntu üzerinde güçlü ve kapsamlı bir izleme ve uyarı sistemi kurmayı adım adım öğreneceksiniz. Sunucularınızın her zaman gözünüzün önünde olmasını sağlayarak olası kesintilere anında müdahale edebilme yeteneği kazanacaksınız.
Web Sunucusu İzlemenin Önemi: Neden İhtiyaç Duyarız?
Günümüzün dijital dünyasında, bir web sitesinin veya uygulamanın çevrimdışı kalması, işletmeler için ciddi gelir kayıplarına, marka itibarının zedelenmesine ve müşteri memnuniyetsizliğine yol açabilir. Web sunucularınızın 7/24 kesintisiz çalışması, sadece bir beklenti değil, aynı zamanda temel bir gerekliliktir. Peki, sunucularınızın ne zaman yavaşladığını, bir hatayla karşılaştığını veya tamamen erişilemez hale geldiğini nasıl anlarsınız? İşte bu noktada etkili bir izleme ve uyarı sistemi devreye girer. Geleneksel izleme yöntemleri genellikle sunucunun iç metriklerine (CPU, RAM, disk kullanımı) odaklanırken, dışarıdan erişilebilirliği ve hizmetin kendisinin sağlığını kontrol etmek de en az bu kadar önemlidir. Bir web sunucusunun dışarıdan erişilebilir olmaması, iç metrikleri ne kadar iyi olursa olsun, kullanıcılar için o hizmetin “çalışmıyor” olduğu anlamına gelir.
Etkili bir izleme sistemi, potansiyel sorunları daha büyük bir krize dönüşmeden önce tespit etmenizi sağlar. Örneğin, web sunucunuzdaki bir hizmetin yanıt süresinin aniden artması, bir performans sorununun habercisi olabilir. Ya da belirli bir HTTP durum kodunun (örneğin 5xx hataları) beklenenden fazla görülmesi, uygulamanızda kritik bir hata olduğunu gösterebilir. Bu tür durumları manuel olarak takip etmek neredeyse imkansızdır. Bu nedenle, otomatikleştirilmiş araçlara ihtiyacımız var. Alertmanager ve Blackbox Exporter ikilisi, bu ihtiyacı karşılamak için mükemmel bir çözüm sunar. Blackbox Exporter, web sunucunuzun dışarıdan görünürlüğünü, erişilebilirliğini ve performansını kontrol ederken, Alertmanager bu kontroller sonucunda ortaya çıkan sorunları size anında bildirir. Bu sayede, herhangi bir kesinti veya performans düşüşü durumunda proaktif bir şekilde hareket edebilir, sorunları hızlıca çözerek hizmet kalitenizi koruyabilirsiniz. Unutmayın, iyi bir izleme sistemi sadece sorunları bildirmekle kalmaz, aynı zamanda gelecekteki sorunları tahmin etmenize ve altyapınızı optimize etmenize yardımcı olacak değerli veriler de sağlar. Bu veriler, kapasite planlaması, performans iyileştirmeleri ve güvenlik açığı tespiti gibi alanlarda kritik rol oynar.
Bir vaka analizi olarak düşünelim: Büyük bir e-ticaret sitesi, Kara Cuma indirimleri sırasında yoğun trafik beklemektedir. Normalde sunucularının iç metriklerini (CPU, RAM) izliyorlardı, ancak dışarıdan erişilebilirlik konusunda bir kör noktaları vardı. Blackbox Exporter’ı devreye alarak, sitelerinin ana sayfasının her 30 saniyede bir HTTP 200 yanıtı verdiğini ve yanıt süresinin 500ms altında olduğunu kontrol etmeye başladılar. Yoğunluk başladığında, Blackbox Exporter aniden bazı bölgelerden sitenin yanıt süresinin 2 saniyenin üzerine çıktığını tespit etti ve Alertmanager üzerinden ekibe kritik bir uyarı gönderdi. Ekip, iç metriklerde henüz bir sorun görmese de, bu dış uyarı sayesinde hemen harekete geçti, CDN ayarlarını optimize etti ve ek sunucu kaynakları tahsis ederek potansiyel bir kesintiyi veya yavaşlamayı önledi. Bu, sadece iç metriklerin değil, dışarıdan kullanıcı deneyiminin de izlenmesinin ne kadar kritik olduğunu gösteren somut bir örnektir.
Alertmanager ve Blackbox Exporter Nedir? Temel Kavramlara Giriş
İzleme dünyasında Prometheus ekosistemi, metrik toplama ve uyarı sistemleri için altın standartlardan biri haline gelmiştir. Bu ekosistemin önemli bileşenlerinden ikisi Alertmanager ve Blackbox Exporter’dır. Peki, bu araçlar tam olarak ne işe yarar ve web sunucusu izleme senaryomuzda nasıl bir rol oynarlar?
Prometheus: İzleme sistemimizin kalbi diyebiliriz. Prometheus, zaman serisi verilerini (metrikleri) toplar, depolar ve sorgular. Exporter’lar aracılığıyla çeşitli sistemlerden metrikleri çeker (pull-based model). Prometheus, aynı zamanda topladığı metrikler üzerinde belirli kurallar (alerting rules) tanımlamamıza olanak tanır. Bu kurallar tetiklendiğinde, uyarıları Alertmanager’a gönderir.
Blackbox Exporter: Adından da anlaşılacağı gibi, “kara kutu” izleme yapar. Yani, bir sistemin iç yapısına girmeden, dışarıdan erişilebilirliğini ve davranışını kontrol eder. Web sunucusu izleme senaryomuzda Blackbox Exporter, belirli URL’lere HTTP istekleri göndererek (veya TCP/ICMP ping gibi başka protokollerle) sunucunun yanıt verip vermediğini, yanıt süresini, HTTP durum kodunu ve hatta yanıt içeriğini kontrol eder. Örneğin, web sitenizin ana sayfasının her zaman HTTP 200 (OK) yanıtı vermesi ve belirli bir anahtar kelimeyi içermesi gerektiğini doğrulayabilirsiniz. Eğer bu koşullardan biri sağlanmazsa, Blackbox Exporter bir metrik oluşturur ve Prometheus bu metriği toplayarak olası bir sorunu tespit edebilir. Bu sayede, sunucunuzun sadece ayakta olup olmadığını değil, aynı zamanda beklenen hizmeti verip vermediğini de anlamış olursunuz. Bu, özellikle web uygulamalarının veya API’lerin sağlığını kontrol etmek için paha biçilmez bir araçtır.
Alertmanager: Prometheus’tan gelen uyarıları alır, bunları gruplandırır, susturur (silence), tekrar etmeyen bildirimler gönderir ve çeşitli bildirim kanallarına (e-posta, Slack, PagerDuty, SMS vb.) yönlendirir. Alertmanager’ın temel amacı, sizi “uyarı yorgunluğundan” kurtarmaktır. Birden fazla sunucunuz aynı anda çevrimdışı kaldığında, Alertmanager bu uyarıları tek bir bildirim altında gruplayarak size tek bir mesaj gönderir, böylece inbox’ınızın veya Slack kanalınızın aynı uyarılarla dolup taşmasını engeller. Ayrıca, belirli zaman aralıklarında uyarıları susturma (örneğin, planlı bakım sırasında) veya belirli uyarıları belirli ekiplere yönlendirme gibi gelişmiş özelliklere de sahiptir. Bu, izleme sisteminizin sadece çalışmasını değil, aynı zamanda yönetilebilir ve etkili olmasını sağlar.
Bu üç bileşen bir araya geldiğinde, web sunucularınız için güçlü, esnek ve güvenilir bir izleme ve uyarı altyapısı oluşturmuş olursunuz. Prometheus metrikleri toplar, Blackbox Exporter bu metrikleri web sunucunuzun dış sağlığı hakkında sağlar ve Alertmanager da bu metrikler kritik eşikleri aştığında sizi bilgilendirir. Bu sayede, herhangi bir sorun oluştuğunda hızlıca haberdar olup duruma müdahale edebilirsiniz.
Prometheus, Alertmanager ve Blackbox Exporter Kurulumu: Ubuntu Üzerinde Adım Adım
Şimdi sıra geldi bu güçlü araçları Ubuntu sunucumuza kurmaya. Bu bölümde, tüm bileşenleri sıfırdan kuracak ve temel yapılandırmalarını yapacağız. Bu adımları dikkatlice takip ederek sorunsuz bir kurulum gerçekleştirebilirsiniz.
Prometheus Kurulumu
- Prometheus Kullanıcısı Oluşturma: Güvenlik amacıyla Prometheus’u ayrı bir kullanıcı altında çalıştırmak iyi bir uygulamadır.
sudo useradd --no-create-home --shell /bin/false prometheus - Prometheus İndirme: En son stabil sürümü Prometheus web sitesinden indirin. Sürüm numarasını güncel olanla değiştirin.
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz - Dosyaları Çıkarma ve Taşıma: İndirdiğiniz arşivi açın ve gerekli dosyaları uygun dizinlere taşıyın.
tar xvf prometheus-2.47.0.linux-amd64.tar.gz sudo mv prometheus-2.47.0.linux-amd64 /opt/prometheus-2.47.0.linux-amd64 sudo ln -s /opt/prometheus-2.47.0.linux-amd64 /opt/prometheus sudo mkdir /etc/prometheus sudo mv /opt/prometheus/prometheus /usr/local/bin/ sudo mv /opt/prometheus/promtool /usr/local/bin/ sudo mv /opt/prometheus/consoles /etc/prometheus sudo mv /opt/prometheus/console_libraries /etc/prometheus - Depolama Dizini Oluşturma: Prometheus’un metrikleri depolayacağı dizini oluşturun ve izinleri ayarlayın.
sudo mkdir /var/lib/prometheus sudo chown prometheus:prometheus /var/lib/prometheus sudo chown prometheus:prometheus /etc/prometheus sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo chown prometheus:prometheus /usr/local/bin/promtool - Prometheus Yapılandırma Dosyası Oluşturma: Basit bir
prometheus.ymldosyası oluşturalım.sudo nano /etc/prometheus/prometheus.ymlİçeriği aşağıdaki gibi yapıştırın:
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - localhost:9093 # Alertmanager'ın çalışacağı adres rule_files: - "/etc/prometheus/alert.rules.yml" # Uyarı kuralları dosyamız scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"]Bu dosyayı kaydedin (Ctrl+O, Enter, Ctrl+X).
- Systemd Servisi Oluşturma: Prometheus’un bir servis olarak çalışmasını sağlayalım.
sudo nano /etc/systemd/system/prometheus.serviceİçeriği aşağıdaki gibi yapıştırın:
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=:9090 [Install] WantedBy=multi-user.targetKaydedin ve çıkın.
- Prometheus’u Başlatma: Servisi yeniden yükleyin, başlatın ve otomatik başlaması için etkinleştirin.
sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheusDurumun “active (running)” olduğunu görmelisiniz. Artık Prometheus’a
http://:9090adresinden erişebilirsiniz.
Blackbox Exporter Kurulumu
- Blackbox Exporter Kullanıcısı Oluşturma: Prometheus’ta olduğu gibi ayrı bir kullanıcı oluşturalım.
sudo useradd --no-create-home --shell /bin/false blackbox_exporter - Blackbox Exporter İndirme: En son stabil sürümü indirin.
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-0.24.0.linux-amd64.tar.gz - Dosyaları Çıkarma ve Taşıma:
tar xvf blackbox_exporter-0.24.0.linux-amd64.tar.gz sudo mv blackbox_exporter-0.24.0.linux-amd64 /opt/blackbox_exporter-0.24.0.linux-amd64 sudo ln -s /opt/blackbox_exporter-0.24.0.linux-amd64 /opt/blackbox_exporter sudo mv /opt/blackbox_exporter/blackbox_exporter /usr/local/bin/ sudo chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter - Blackbox Exporter Yapılandırma Dosyası Oluşturma: Modülleri tanımlayacağımız
blackbox.ymldosyasını oluşturalım.sudo mkdir /etc/blackbox_exporter sudo nano /etc/blackbox_exporter/blackbox.ymlİçeriği aşağıdaki gibi yapıştırın:
modules: http_2xx: prober: http timeout: 5s http: valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] valid_status_codes: [200] no_follow_redirects: false preferred_ip_protocol: "ipv4" http_post_2xx: prober: http timeout: 5s http: method: POST valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] valid_status_codes: [200] no_follow_redirects: false preferred_ip_protocol: "ipv4" tcp_connect: prober: tcp timeout: 5s tcp: preferred_ip_protocol: "ipv4" icmp: prober: icmp timeout: 5s icmp: preferred_ip_protocol: "ipv4"Kaydedin ve çıkın.
sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml - Systemd Servisi Oluşturma:
sudo nano /etc/systemd/system/blackbox_exporter.serviceİçeriği aşağıdaki gibi yapıştırın:
[Unit] Description=Blackbox Exporter Wants=network-online.target After=network-online.target [Service] User=blackbox_exporter Group=blackbox_exporter Type=simple ExecStart=/usr/local/bin/blackbox_exporter \ --config.file=/etc/blackbox_exporter/blackbox.yml \ --web.listen-address=:9115 [Install] WantedBy=multi-user.targetKaydedin ve çıkın.
- Blackbox Exporter’ı Başlatma:
sudo systemctl daemon-reload sudo systemctl start blackbox_exporter sudo systemctl enable blackbox_exporter sudo systemctl status blackbox_exporterDurumun “active (running)” olduğunu görmelisiniz. Artık Blackbox Exporter’a
http://:9115adresinden erişebilirsiniz. Ancak doğrudan arayüzü yoktur, metrikleri Prometheus çekecektir.
Alertmanager Kurulumu
- Alertmanager Kullanıcısı Oluşturma:
sudo useradd --no-create-home --shell /bin/false alertmanager - Alertmanager İndirme: En son stabil sürümü indirin.
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz - Dosyaları Çıkarma ve Taşıma:
tar xvf alertmanager-0.26.0.linux-amd64.tar.gz sudo mv alertmanager-0.26.0.linux-amd64 /opt/alertmanager-0.26.0.linux-amd64 sudo ln -s /opt/alertmanager-0.26.0.linux-amd64 /opt/alertmanager sudo mv /opt/alertmanager/alertmanager /usr/local/bin/ sudo mv /opt/alertmanager/amtool /usr/local/bin/ sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager sudo chown alertmanager:alertmanager /usr/local/bin/amtool - Depolama Dizini Oluşturma: Alertmanager’ın verileri depolayacağı dizini oluşturun.
sudo mkdir /etc/alertmanager sudo mkdir /var/lib/alertmanager sudo chown alertmanager:alertmanager /etc/alertmanager sudo chown alertmanager:alertmanager /var/lib/alertmanager - Alertmanager Yapılandırma Dosyası Oluşturma: Basit bir
alertmanager.ymldosyası oluşturalım.sudo nano /etc/alertmanager/alertmanager.ymlİçeriği aşağıdaki gibi yapıştırın (henüz bildirim kanallarını yapılandırmayacağız, sadece temel bir yapı):
global: resolve_timeout: 5m route: group_by: ['alertname', 'instance'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'default-receiver' receivers: - name: 'default-receiver' # Bu kısma Slack, email veya diğer bildirim entegrasyonları eklenecek # Örneğin: # email_configs: # - to: 'admin@example.com' # send_resolved: true # slack_configs: # - channel: '#alerts' # send_resolved: trueKaydedin ve çıkın.
sudo chown alertmanager:alertmanager /etc/alertmanager/alertmanager.yml - Systemd Servisi Oluşturma:
sudo nano /etc/systemd/system/alertmanager.serviceİçeriği aşağıdaki gibi yapıştırın:
[Unit] Description=Alertmanager Wants=network-online.target After=network-online.target [Service] User=alertmanager Group=alertmanager Type=simple ExecStart=/usr/local/bin/alertmanager \ --config.file=/etc/alertmanager/alertmanager.yml \ --storage.path=/var/lib/alertmanager \ --web.listen-address=:9093 [Install] WantedBy=multi-user.targetKaydedin ve çıkın.
- Alertmanager’ı Başlatma:
sudo systemctl daemon-reload sudo systemctl start alertmanager sudo systemctl enable alertmanager sudo systemctl status alertmanagerDurumun “active (running)” olduğunu görmelisiniz. Artık Alertmanager’a
http://:9093adresinden erişebilirsiniz.
Tebrikler! Prometheus, Blackbox Exporter ve Alertmanager’ı temel düzeyde kurmuş oldunuz. Bir sonraki adımda, Blackbox Exporter’ı web sunucularımızı izleyecek şekilde yapılandıracağız ve Prometheus’un bu verileri çekmesini sağlayacağız.
Prometheus’u Blackbox Exporter ile Entegre Etme: Hedefleri Belirleme
Prometheus, varsayılan olarak kendi metriklerini toplar. Blackbox Exporter’ı kullanarak web sunucularımızı izleyebilmek için Prometheus’a, Blackbox Exporter’dan metrikleri nasıl ve hangi hedefler için çekeceğini belirtmemiz gerekir. Bu, Prometheus yapılandırma dosyasına (/etc/prometheus/prometheus.yml) yeni bir scrape_config bloğu ekleyerek yapılır.
Öncelikle, Prometheus yapılandırma dosyamızı düzenleyelim:
sudo nano /etc/prometheus/prometheus.yml
scrape_configs bloğunun altına aşağıdaki yeni işi ekleyin. Burada “example-website.com” yerine kendi web sunucunuzun adresini yazmalısınız. Birden fazla web sunucusu veya URL izlemek istiyorsanız, targets listesine yeni girdiler ekleyebilirsiniz.
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx] # blackbox.yml dosyasında tanımladığımız modül
static_configs:
- targets:
- http://example-website.com # İzlenecek web sunucusu URL'si
- http://another-website.com # Başka bir web sunucusu
# - https://api.example.com # HTTPS ve API endpoint'i
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115 # Blackbox Exporter'ın çalıştığı adres
Bu yapılandırmayı adım adım inceleyelim:
job_name: 'blackbox': Prometheus arayüzünde bu izleme işini tanımlayan isimdir.metrics_path: /probe: Blackbox Exporter’ın metrikleri sağladığı endpoint’tir. Tüm sorgular bu yola yapılacaktır.params: module: [http_2xx]: Blackbox Exporter’a hangi modülü kullanacağını belirtiriz. Buradahttp_2xxmodülünü kullanarak HTTP 200 durum kodu kontrolü yapmasını istiyoruz. Daha önce tanımladığımıztcp_connectveyaicmpgibi diğer modülleri de burada kullanabiliriz.static_configs: targets:: İzlemek istediğimiz web sunucularının veya URL’lerin listesidir. Prometheus, bu hedefleri Blackbox Exporter’a parametre olarak gönderecektir.relabel_configs:: Bu bölüm, Prometheus’un hedefleri nasıl işleyeceğini ve etiketleyeceğini belirler.source_labels: [__address__], target_label: __param_target: Prometheus,targetslistesindeki URL’yi (örneğinhttp://example-website.com) alıp bunu Blackbox Exporter’atargetparametresi olarak iletecektir.source_labels: [__param_target], target_label: instance: Blackbox Exporter’a gönderilentargetparametresini Prometheus metriklerindeinstanceetiketi olarak kullanırız. Bu, hangi URL’nin izlendiğini anlamamızı sağlar.target_label: __address__, replacement: localhost:9115: Bu, Prometheus’a metrikleri doğrudanhttp://example-website.comadresinden değil, Blackbox Exporter’ın çalıştığılocalhost:9115adresinden çekmesini söyler. Blackbox Exporter,example-website.comadresini kendi içinde sorgular ve sonuçları Prometheus’a iletir.
Yapılandırma dosyasını kaydettikten sonra, Prometheus servisini yeniden başlatmalıyız ki yeni yapılandırmayı yüklesin:
sudo systemctl restart prometheus
sudo systemctl status prometheus
Prometheus arayüzüne (http://:9090) gidin ve “Status” -> “Targets” bölümüne bakın. Burada “blackbox” işi altında izlemeye başladığınız web sunucularınızı görmelisiniz. Eğer her şey yolundaysa, durumları “UP” olarak görünecektir. Eğer “DOWN” ise, yapılandırmanızı veya Blackbox Exporter’ın çalışıp çalışmadığını kontrol etmeniz gerekebilir.
Bu entegrasyon ile Prometheus artık Blackbox Exporter aracılığıyla web sunucularınızın dışarıdan erişilebilirliğini ve performansını izlemeye başlamıştır. Toplanan metrikler arasında probe_success (başarılı sorgu olup olmadığı, 0 veya 1), probe_duration_seconds (sorgu süresi) ve probe_http_status_code (HTTP yanıt kodu) gibi önemli metrikler bulunur. Bu metrikleri kullanarak web sunucularınızın sağlığı hakkında detaylı bilgilere sahip olabilir ve Alertmanager aracılığıyla uyarılar tanımlayabilirsiniz.
promtool check config /etc/prometheus/prometheus.yml komutunu kullanarak yapılandırma dosyasının sözdizimini kontrol edebilirsiniz. Bu, olası hataları önceden tespit etmenizi sağlar ve servis kesintilerini minimize eder.
Alertmanager Yapılandırması: Uyarı Kuralları ve Bildirim Kanalları
Prometheus ve Blackbox Exporter entegrasyonunu tamamladık. Şimdi sıra, kritik durumlarda bizi bilgilendirecek uyarıları yapılandırmaya geldi. Bu bölüm, Prometheus’ta uyarı kuralları oluşturmayı ve Alertmanager’da bu uyarıları alıp işleyecek bildirim kanallarını (örneğin Slack veya e-posta) ayarlamayı kapsar.
Prometheus Uyarı Kuralları Oluşturma
Prometheus, Alertmanager’a uyarı göndermeden önce, metrikler üzerinde belirli koşulların karşılanıp karşılanmadığını kontrol eden kurallara ihtiyaç duyar. Bu kuralları /etc/prometheus/alert.rules.yml dosyasında tanımlayacağız (Prometheus yapılandırmamızda bu dosyayı belirtmiştik).
sudo nano /etc/prometheus/alert.rules.yml
Aşağıdaki örnek uyarı kurallarını ekleyin. Bu kurallar, web sunucunuzun kesintiye uğraması veya yavaşlaması durumunda sizi uyaracaktır:
groups:
- name: web_server_alerts
rules:
- alert: WebSunucusuKapalı
expr: probe_success{job="blackbox", module="http_2xx"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Web sunucusu {{ $labels.instance }} erişilemiyor!"
description: "{{ $labels.instance }} adresine yapılan HTTP kontrolü başarısız oldu. Sunucu kapalı veya yanıt vermiyor."
- alert: WebSunucusuYavaş
expr: probe_duration_seconds{job="blackbox", module="http_2xx"} > 0.5
for: 2m
labels:
severity: warning
annotations:
summary: "Web sunucusu {{ $labels.instance }} yanıt süresi yüksek!"
description: "{{ $labels.instance }} adresine yapılan HTTP isteği 2 dakikadan uzun süredir 500ms üzerinde yanıt veriyor. Performans düşüşü olabilir."
- alert: WebSunucusuHataKodu
expr: probe_http_status_code{job="blackbox", module="http_2xx"} >= 500
for: 1m
labels:
severity: critical
annotations:
summary: "Web sunucusu {{ $labels.instance }} 5xx hata kodu döndürüyor!"
description: "{{ $labels.instance }} adresine yapılan HTTP isteği, 1 dakikadan uzun süredir 5xx (sunucu hatası) kodu döndürüyor. Uygulama tarafında sorun olabilir."
Bu kuralların anlamları:
WebSunucusuKapalı: Eğerhttp_2xxmodülü ile yapılan sorgu 1 dakika boyunca başarısız olursa (probe_success == 0), kritik bir uyarı gönderir.WebSunucusuYavaş: Eğerhttp_2xxmodülü ile yapılan sorgunun süresi 2 dakika boyunca 0.5 saniyenin üzerinde kalırsa (probe_duration_seconds > 0.5), bir uyarı gönderir. Bu eşik değerini kendi ihtiyaçlarınıza göre ayarlayabilirsiniz.WebSunucusuHataKodu: Eğerhttp_2xxmodülü ile yapılan sorgu 1 dakika boyunca 500 veya üzeri bir HTTP durum kodu döndürürse, kritik bir uyarı gönderir. Bu genellikle sunucu tarafında bir uygulama hatasına işaret eder.
Bu dosyayı kaydedin ve Prometheus’un yeni kuralları yüklemesi için servisi yeniden başlatın:
sudo systemctl restart prometheus
Prometheus arayüzünde “Alerts” bölümüne giderek kurallarınızın yüklendiğini kontrol edebilirsiniz.
Alertmanager Bildirim Kanallarını Yapılandırma
Alertmanager’ın sizi bilgilendirebilmesi için bildirim kanallarını yapılandırmamız gerekiyor. En yaygın kullanılan iki kanal e-posta ve Slack’tir. Burada her ikisi için de örnek yapılandırmaları göstereceğim. Kendi alertmanager.yml dosyanızı düzenleyelim:
sudo nano /etc/alertmanager/alertmanager.yml
receivers bloğunu aşağıdaki gibi güncelleyin. Kendi e-posta adresinizi ve Slack webhook URL’nizi girmeniz gerekecektir.
global:
resolve_timeout: 5m
# E-posta için SMTP ayarları (eğer kullanacaksanız)
# smtp_smarthost: 'smtp.example.org:587'
# smtp_from: 'alertmanager@example.org'
# smtp_auth_username: 'alertmanager'
# smtp_auth_password: 'your_smtp_password'
# smtp_require_tls: true
route:
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver' # Tüm uyarılar bu alıcıya gidecek
receivers:
- name: 'default-receiver'
email_configs:
- to: 'your-email@example.com' # Kendi e-posta adresinizi buraya yazın
send_resolved: true # Uyarı çözüldüğünde de bildirim gönder
html: true # HTML formatında e-posta gönder
slack_configs:
- channel: '#alerts' # Slack kanalınızın adı
api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX' # Kendi Slack webhook URL'nizi buraya yapıştırın
send_resolved: true
title: '{{ .CommonLabels.alertname }} for {{ .CommonLabels.instance }}'
text: 'Durum: {{ .Status }} - Şiddet: {{ .CommonLabels.severity }}\nÖzet: {{ .CommonAnnotations.summary }}\nAçıklama: {{ .CommonAnnotations.description }}'
color: '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}'
# Eğer farklı uyarıları farklı alıcılara göndermek isterseniz, route bloğuna alt rotalar ekleyebilirsiniz.
# Örneğin, kritik uyarıları farklı bir Slack kanalına göndermek için:
# routes:
# - match:
# severity: 'critical'
# receiver: 'critical-slack'
# continue: true # Diğer rotaları da değerlendirmeye devam et
# - receiver: 'default-receiver' # Diğer tüm uyarılar buraya
#
# receivers:
# - name: 'critical-slack'
# slack_configs:
# - channel: '#critical-alerts'
# api_url: '...'
# ...
E-posta Yapılandırması İçin Not: Eğer e-posta kullanacaksanız, global bloğundaki smtp_smarthost, smtp_from vb. ayarları kendi SMTP sunucunuzun bilgilerine göre doldurmanız gerekmektedir. Bu ayarlar, Alertmanager’ın e-posta gönderebilmesi için zorunludur. Gmail gibi hizmetler için uygulama şifresi oluşturmanız gerekebilir.
Slack Yapılandırması İçin Not: Slack webhook URL’sini almak için Slack çalışma alanınızda “Apps” bölümüne gidip “Incoming WebHooks” uygulamasını eklemeniz ve bir kanal seçmeniz gerekir. Size verilen URL’yi api_url alanına yapıştırın.
Yapılandırma dosyasını kaydettikten sonra, Alertmanager servisini yeniden başlatın:
sudo systemctl restart alertmanager
sudo systemctl status alertmanager
Artık Prometheus’taki kurallar tetiklendiğinde, Alertmanager bu uyarıları alacak ve belirlediğiniz kanallar üzerinden size bildirim gönderecektir. Alertmanager arayüzüne (http://:9093) giderek aktif uyarıları, geçmiş uyarıları ve susturma kurallarını görebilirsiniz.
amtool check-config /etc/alertmanager/alertmanager.yml komutunu kullanabilirsiniz. Ayrıca, amtool alert send --alertname=TestAlert --label="instance=test.example.com" gibi komutlarla manuel olarak test uyarıları göndererek bildirim kanallarınızın doğru çalışıp çalışmadığını kontrol edebilirsiniz.
Gerçek Dünya Senaryosu: Bir Web Sunucusu Kesintisini Nasıl Yakalarız?
Şimdiye kadar Prometheus, Blackbox Exporter ve Alertmanager’ı kurduk ve yapılandırdık. Şimdi, bu sistemin gerçek bir senaryoda nasıl çalıştığını görelim. Diyelim ki http://example-website.com adresindeki web sunucunuzu izliyorsunuz ve bu sunucunun aniden çevrimdışı kaldığını varsayalım. İşte adım adım neler olacağını ve sistemi nasıl test edeceğinizi anlatan bir senaryo:
Senaryo: Web Sunucusu Çevrimdışı Kalıyor
- Blackbox Exporter Kontrolü: Blackbox Exporter,
http_2xxmodülünü kullanarakhttp://example-website.comadresine düzenli olarak HTTP istekleri göndermeye devam edecektir. - Sorgu Başarısızlığı: Web sunucusu çevrimdışı kaldığında, Blackbox Exporter’ın HTTP isteği zaman aşımına uğrayacak veya bir bağlantı hatasıyla karşılaşacaktır. Bu durumda,
probe_successmetriği1(başarılı) yerine0(başarısız) değerini alacaktır. Ayrıca,probe_duration_secondsmetriği de artacak ve HTTP durum kodu (eğer bir yanıt alınabilirse) 500 veya başka bir hata kodu olacaktır. - Prometheus Metrik Toplama: Prometheus, Blackbox Exporter’dan metrikleri her 15 saniyede bir çeker. Yeni metrik değerleri (
probe_success=0) Prometheus’un zaman serisi veritabanına kaydedilir. - Prometheus Uyarı Kuralı Tetiklenmesi: Prometheus,
/etc/prometheus/alert.rules.ymldosyasındakiWebSunucusuKapalıkuralını sürekli olarak değerlendirir. Kuralımızprobe_success{job="blackbox", module="http_2xx"} == 0ifadesinin 1 dakika boyunca doğru kalmasını bekler. Web sunucusu çevrimdışı kaldığı için, bu koşul 1 dakika sonra tetiklenir. - Alertmanager’a Uyarı Gönderme:
WebSunucusuKapalıkuralı tetiklendiğinde, Prometheus bu uyarıyı Alertmanager’a gönderir. - Alertmanager İşlemi: Alertmanager uyarıyı alır. Yapılandırmasına göre, bu uyarıyı diğer benzer uyarılarla gruplandırır (eğer varsa), susturma kurallarını kontrol eder ve ardından
default-receiver‘a yönlendirir. - Bildirim Gönderme:
default-receiveryapılandırmasında belirtilen e-posta ve/veya Slack kanallarına uyarı bildirimleri gönderilir.- Slack’te:
#alertskanalına, web sunucusunun çevrimdışı kaldığını belirten, “critical” şiddetinde bir mesaj düşer. Mesajda hangi sunucunun (instanceetiketi sayesinde) etkilendiği ve sorunun özeti/açıklaması yer alır. - E-posta ile: Yapılandırılan e-posta adresine benzer içerikte bir e-posta gönderilir.
- Slack’te:
- Müdahale ve Çözüm: Ekip, bildirimi alır almaz duruma müdahale eder. Sunucuyu kontrol eder, sorunu tespit eder ve düzeltir (örneğin, Nginx servisini yeniden başlatır, sunucuyu yeniden başlatır vb.).
- Uyarı Çözümü Bildirimi: Web sunucusu tekrar çevrimiçi olduğunda, Blackbox Exporter’ın sorguları tekrar başarılı olur (
probe_success=1). Prometheus bunu algılar veWebSunucusuKapalıuyarısının artık tetiklenmediğini Alertmanager’a bildirir. Alertmanager, “resolved” (çözüldü) durumunda bir bildirim göndererek ekibe sorunun giderildiğini haber verir.
Sistemi Test Etme
Bu senaryoyu kendi sisteminizde test etmek oldukça basittir:
- İzlediğiniz web sunucusunun (örneğin Nginx veya Apache) servisini geçici olarak durdurun:
sudo systemctl stop nginx # veya sudo systemctl stop apache2 - Birkaç dakika bekleyin. Prometheus’un uyarı kuralını tetiklemesi ve Alertmanager’ın bildirim göndermesi için
for: 1msüresi vescrape_intervaldeğerleri kadar zaman geçmesi gerekir. - E-posta gelen kutunuzu ve/veya Slack kanalınızı kontrol edin. Bir “WebSunucusuKapalı” uyarısı almalısınız.
- Alertmanager arayüzünü (
http://:9093) ziyaret edin. “Active Alerts” bölümünde uyarınızı görmelisiniz. - Web sunucusu servisini tekrar başlatın:
sudo systemctl start nginx # veya sudo systemctl start apache2 - Birkaç dakika sonra, Alertmanager’dan uyarının çözüldüğüne dair bir bildirim almalısınız. Alertmanager arayüzünde de uyarının “Resolved” durumuna geçtiğini göreceksiniz.
Bu test, sisteminizin beklediğiniz gibi çalıştığını doğrulamanıza yardımcı olacaktır. Bu tür bir entegrasyon, web sunucularınızın sağlığını sürekli olarak denetleyerek, olası sorunlara anında müdahale etme yeteneği kazanmanızı sağlar ve hizmet kesintilerini minimuma indirir.
İleri Düzey İzleme Teknikleri: Daha Derin Kontroller ve Otomasyon
Temel kurulumu ve uyarıları yapılandırdıktan sonra, izleme sisteminizi daha da güçlendirmek için ileri düzey tekniklere geçebiliriz. Bu bölümde, daha karmaşık senaryoları ele alacak, otomasyon ipuçları verecek ve izleme stratejinizi nasıl geliştirebileceğinizi tartışacağız.
Dinamik Hedef Keşfi (Service Discovery)
Manuel olarak prometheus.yml dosyasına her yeni web sunucusunu eklemek, büyük altyapılarda veya dinamik ortamlarda (örneğin, bulut tabanlı sanal makineler veya konteynerler) sürdürülemez hale gelebilir. Prometheus, çeşitli “service discovery” mekanizmaları aracılığıyla hedefleri otomatik olarak keşfedebilir. Örneğin:
- File-based Service Discovery: Belirli bir dizindeki dosyalardan hedefleri okur. Bu dosyaları bir yapılandırma yönetim aracı (Ansible, Chef, Puppet) ile güncelleyebilirsiniz.
- Cloud Provider Entegrasyonları: AWS EC2, Google Compute Engine, Azure, Kubernetes gibi bulut sağlayıcılarından VM’leri veya servisleri otomatik olarak keşfeder.
- Consul/DNS-SD: Servis kayıt sistemlerinden hedefleri çekebilir.
Örnek olarak, dosya tabanlı servis keşfi için Prometheus yapılandırmasına (/etc/prometheus/prometheus.yml) aşağıdaki gibi bir blok ekleyebilirsiniz:
- job_name: 'blackbox-dynamic'
metrics_path: /probe
params:
module: [http_2xx]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115 # Blackbox Exporter'ın adresi
file_sd_configs:
- names:
- /etc/prometheus/targets/*.yml # Hedefleri bu dizindeki YAML dosyalarından oku
refresh_interval: 5m
Ardından, /etc/prometheus/targets/ dizini altında her bir web sunucunuz için bir YAML dosyası oluşturabilirsiniz. Örneğin, webservers.yml:
# /etc/prometheus/targets/webservers.yml
- targets:
- http://www.mywebapp.com
- https://api.mywebapp.com
labels:
env: production
service: webapp
- targets:
- http://dev.mywebapp.com
labels:
env: development
service: webapp
Bu sayede, yeni bir web sunucusu eklediğinizde sadece bu YAML dosyasını güncellemeniz yeterli olur, Prometheus otomatik olarak yeni hedefi keşfeder.
Farklı Modüllerle Daha Derin Kontroller
Blackbox Exporter’ın blackbox.yml dosyasında birden fazla modül tanımladık. Bu modülleri kullanarak farklı türde kontroller yapabilirsiniz:
- HTTP İçerik Kontrolü: Bir web sayfasının sadece erişilebilir olup olmadığını değil, aynı zamanda belirli bir metni içerip içermediğini kontrol etmek isteyebilirsiniz. Bunun için
httpmodülünefail_if_not_matches_regexpveyafail_if_matches_regexpparametrelerini ekleyebilirsiniz. Örneğin, ana sayfanızda “Hoş geldiniz” metninin olmasını bekliyorsanız:http_welcome_check: prober: http timeout: 5s http: valid_status_codes: [200] fail_if_not_matches_regexp: - "Hoş geldiniz"Prometheus yapılandırmasında bu modülü kullanmak için
params: module: [http_welcome_check]olarak değiştirmeniz yeterlidir. - TCP Port Kontrolü: Veritabanı veya SSH gibi belirli bir TCP portunun açık olup olmadığını kontrol etmek için
tcp_connectmodülünü kullanabilirsiniz. - ICMP Ping: Sunucunun temel ağ bağlantısını kontrol etmek için ICMP ping modülünü kullanabilirsiniz.
Grafana ile Görselleştirme
Prometheus metrikleri toplar ve Alertmanager uyarı gönderir, ancak bu verileri anlamlı bir şekilde görselleştirmek için Grafana harika bir araçtır. Grafana’ya Prometheus veri kaynağını ekleyerek Blackbox Exporter metriklerinden panolar oluşturabilirsiniz. Örneğin:
- Web sunucularının uptime durumunu gösteren bir panel (
probe_success). - Yanıt sürelerini (latency) gösteren grafikler (
probe_duration_seconds). - HTTP durum kodlarının dağılımını gösteren çubuk grafikler (
probe_http_status_code).
Bu panolar, izleme verilerinizi bir bakışta anlamanıza ve trendleri izlemenize yardımcı olur.
Mobil Uyumlu HTML ve Responsive Tasarım (Kavramsal)
Bir web sitesinin veya uygulamanın izlenmesi kadar, izleme arayüzlerinin de (Prometheus, Alertmanager, Grafana) mobil uyumlu olması önemlidir. Bu, ekiplerin sahada veya uzaktan hızlıca duruma müdahale edebilmesini sağlar. Modern web arayüzleri genellikle responsive tasarım prensiplerini benimser. Örneğin, CSS media query’leri kullanarak farklı ekran boyutlarına göre düzeni ayarlayabilirsiniz:
/* Genel stil */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
}
/* Masaüstü için varsayılan sütun düzeni */
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
/* Küçük ekranlar (mobil) için düzeni değiştir */
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr; /* Tek sütuna düşür */
}
h2 {
font-size: 1.5em;
}
p {
font-size: 0.9em;
}
}
Yukarıdaki örnekte, 768 pikselden daha küçük ekranlarda, 3 sütunlu bir düzen tek sütuna düşürülür. Bu tür yaklaşımlar, izleme panolarınızın ve arayüzlerinizin her cihazda kullanılabilir olmasını sağlar. Makalemiz HTML çıktısı olduğu için doğrudan stil uygulayamasak da, bu prensipleri kendi izleme panolarınızı tasarlarken göz önünde bulundurmalısınız.
Bu ileri düzey teknikler, izleme sisteminizi daha esnek, otomatik ve kapsamlı hale getirerek web sunucularınızın sağlığını daha etkin bir şekilde yönetmenizi sağlar. Sürekli öğrenmeye ve sisteminizi ihtiyaçlarınıza göre optimize etmeye devam etmek, başarılı bir izleme stratejisinin anahtarıdır.
Sonuç ve Sıkça Sorulan Sorular
Bu makalede, web sunucularınızın sağlığını ve erişilebilirliğini izlemek için Alertmanager ve Blackbox Exporter’ı Ubuntu üzerinde nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendik. Prometheus’u temel izleme motoru olarak kullanarak, Blackbox Exporter ile dışarıdan erişilebilirlik kontrolleri gerçekleştirdik ve Alertmanager ile bu kontroller sonucunda oluşan uyarıları yöneterek bildirim kanallarına yönlendirdik. Gerçek dünya senaryoları ve ileri düzey tekniklerle, bu sistemin sadece sorunları tespit etmekle kalmayıp, aynı zamanda proaktif müdahale ve uzun vadeli performans optimizasyonu için nasıl kullanılabileceğini de gördük. Artık web sunucularınızın kesintisiz çalıştığından emin olmak için sağlam bir temele sahipsiniz.
Sıkça Sorulan Sorular (SSS)
1. Blackbox Exporter neden doğrudan web sunucusunda çalışmıyor?
Blackbox Exporter’ın web sunucusundan ayrı bir yerde çalışmasının temel nedeni, “kara kutu” izlemesinin doğasıdır. Blackbox Exporter, web sunucunuzun dışarıdan erişilebilirliğini ve performansını kontrol eder. Eğer web sunucunuzun kendisi çevrimdışı kalırsa, üzerinde çalışan bir Blackbox Exporter da çevrimdışı kalacak ve size uyarı gönderemeyecektir. Ayrı bir sunucuda veya farklı bir ağ segmentinde çalışması, web sunucusunun tamamen erişilemez hale gelmesi durumunda bile size uyarı gönderebilmesini sağlar. Bu, izleme sisteminizin kendi kendine hata toleransına sahip olmasını sağlar.
2. Birden fazla web sunucusunu veya URL’yi nasıl izleyebilirim?
Prometheus yapılandırma dosyanızdaki (/etc/prometheus/prometheus.yml) blackbox işinin targets listesine izlemek istediğiniz tüm web sunucusu URL’lerini ekleyebilirsiniz. Ayrıca, dinamik hedef keşfi (file-based SD, Consul SD vb.) kullanarak da birden fazla hedefi otomatik olarak ekleyebilirsiniz. Her bir hedef için Blackbox Exporter ayrı bir sorgu gerçekleştirecektir.
3. Alertmanager üzerinden SMS bildirimleri gönderebilir miyim?
Evet, Alertmanager doğrudan SMS gönderme yeteneğine sahip değildir ancak çeşitli entegrasyonlar aracılığıyla SMS bildirimleri gönderebilir. Örneğin, PagerDuty, Opsgenie gibi üçüncü taraf uyarı yönetim hizmetleri veya Twilio gibi SMS ağ geçitleri ile entegre olabilir. Alertmanager’ın webhook alıcısını kullanarak bu servislerin API’lerine HTTP POST istekleri göndererek SMS bildirimlerini tetikleyebilirsiniz.
4. Blackbox Exporter sadece HTTP/S kontrolü mü yapar?
Hayır, Blackbox Exporter sadece HTTP/S kontrolü yapmaz. Aynı zamanda TCP bağlantılarını (belirli bir portun açık olup olmadığını kontrol etmek için), ICMP ping’lerini (temel ağ erişilebilirliğini kontrol etmek için) ve DNS sorgularını da kontrol edebilir. blackbox.yml dosyasında farklı prober tiplerini kullanarak bu modülleri tanımlayabilirsiniz.
5. Prometheus ve Alertmanager yapılandırmalarını güncelledikten sonra ne yapmalıyım?
Prometheus yapılandırma dosyasını (prometheus.yml veya alert.rules.yml) güncelledikten sonra, Prometheus servisini yeniden başlatmanız gerekir: sudo systemctl restart prometheus. Alertmanager yapılandırma dosyasını (alertmanager.yml) güncelledikten sonra ise Alertmanager servisini yeniden başlatmanız gerekir: sudo systemctl restart alertmanager. Her iki durumda da, servisi yeniden başlatmadan önce promtool check config veya amtool check-config komutlarıyla yapılandırma dosyalarınızın sözdizimini kontrol etmeniz olası hataları önleyecektir.
