Açık Kaynak Uygulamalar

    Gatus Nedir ve Servis Durum İzleme Kurulumu

    YAML tabanlı, hafif ve otomatik servis durum ile uptime izleme aracı Gatus'un kurulum rehberi.

    11 dk okuma Güncellendi: 10 Temmuz 2026

    Bir web sitesinin, API'nin ya da veritabanının ne zaman çöktüğünü müşteriden önce öğrenmek, sağlıklı bir altyapı işletmenin temel şartıdır. Grafik arayüzlü, tıklaya tıklaya monitor eklediğiniz izleme araçları bu iş için yaygındır; ancak konfigürasyonu koda dökmek, sürüm kontrolünde (Git) takip etmek ve tek bir dosyadan yönetmek isteyen ekipler için farklı bir yaklaşım gerekir. Gatus tam da bu felsefeyle geliştirilmiş, hafif ve YAML tabanlı bir servis durum izleme (health-check) aracıdır.

    Bu rehberde Gatus'un ne olduğunu, tek dosyalık YAML yapılandırmasının nasıl kurgulandığını, HTTP, TCP ve ICMP sağlık kontrollerini, koşul (condition) mantığını, Discord ile Slack uyarılarını ve kendi sunucunuzda barındırma adımlarını gerçekçi örneklerle ele alacağız. Amaç, aracı gereğinden fazla parlatmadan, üretim ortamında gerçekten işinize yarayacak bir kurulum çıkarmanızı sağlamaktır.

    Gatus nedir, ne işe yarar?#

    Gatus, TwiN adlı geliştirici tarafından başlatılan, Go dili ile yazılmış açık kaynaklı bir servis durum izleme yazılımıdır. Tek bir statik ikili dosya (binary) olarak dağıtıldığı için harici bir çalışma ortamına, veritabanı sunucusuna ya da ağır bağımlılıklara ihtiyaç duymaz. Onlarca izlemeyi çalıştırırken bile birkaç on megabayt bellekle yetinir; bu da onu küçük bir VPS'te veya bir konteyner içinde çalıştırmak için son derece uygun kılar.

    Aracın en ayırt edici yönü, tüm yapılandırmasının bir config.yaml dosyasında yaşamasıdır. İzlediğiniz her hedef (endpoint), göndereceği istek, başarı sayılacak koşullar ve uyarı kanalları bu dosyada tanımlanır. Böylece izleme kurulumunuz koda dönüşür: Git ile sürümlenir, kod incelemesinden (code review) geçer ve bir sunucudan diğerine kopyalanabilir. Buna genellikle "monitoring as code" denir ve grafik arayüzden manuel monitor eklemenin aksine, kurulumun kopyalanabilir ve denetlenebilir olmasını sağlar. Gatus ayrıca sade bir web gösterge paneli ve otomatik olarak üretilen herkese açık bir durum sayfası da sunar.

    Kurulum: Docker ve ikili dosya#

    Gatus'u çalıştırmanın en pratik yolu Docker'dır. Önce bir çalışma dizini ve içine yapılandırma dosyasını koyacağınız bir klasör oluşturun:

    mkdir -p /opt/gatus/config
    cd /opt/gatus
    

    Ardından config/config.yaml dosyasına asgari bir yapılandırma yazın (bir sonraki bölümde bunu genişleteceğiz) ve konteyneri başlatın:

    docker run -d \
      --name gatus \
      -p 8080:8080 \
      -v /opt/gatus/config:/config \
      --restart unless-stopped \
      twinproduction/gatus:latest
    

    Kalıcı ve okunabilir bir kurulum için docker-compose.yml tercih edilir. Bu dosya konteyner tanımını da sürüm kontrolüne almanızı sağlar:

    services:
      gatus:
        image: twinproduction/gatus:latest
        container_name: gatus
        ports:
          - "8080:8080"
        volumes:
          - ./config:/config
        restart: unless-stopped
    

    Docker kullanmak istemiyorsanız, projenin yayımladığı statik ikili dosyayı doğrudan indirip çalıştırabilirsiniz. Gatus varsayılan olarak çalıştığı dizindeki config.yaml (veya GATUS_CONFIG_PATH ortam değişkeniyle belirttiğiniz yol) dosyasını okur:

    # Sürüm numarasını projenin son yayımına göre güncelleyin
    curl -L -o gatus \
      https://github.com/TwiN/gatus/releases/download/v5.x.x/gatus-linux-amd64
    chmod +x gatus
    GATUS_CONFIG_PATH=/opt/gatus/config/config.yaml ./gatus
    

    Servisi kalıcı hale getirmek için basit bir systemd birim dosyası da yazabilirsiniz; bu, konteyner istemeyen bare-metal kurulumlar için idealdir:

    [Unit]
    Description=Gatus servis durum izleme
    After=network.target
    
    [Service]
    ExecStart=/opt/gatus/gatus
    Environment=GATUS_CONFIG_PATH=/opt/gatus/config/config.yaml
    Restart=always
    User=gatus
    
    [Install]
    WantedBy=multi-user.target
    

    Konteyner yönetimini görsel bir arayüzden yapmayı seviyorsanız, Portainer gibi bir araçla Gatus konteynerinin loglarını ve durumunu tek ekrandan takip edebilirsiniz. Kurulumun ardından tarayıcıdan http://sunucu-ip:8080 adresine gittiğinizde Gatus panelinin ilk ekranı sizi karşılar.

    Tek dosya YAML yapılandırması#

    Gatus'un kalbi config.yaml dosyasıdır. Bu dosya en üst düzeyde birkaç anahtardan oluşur: endpoints (izlenecek hedefler), alerting (uyarı sağlayıcıları), ui (görsel ayarlar) ve storage (verinin nasıl saklanacağı). Aşağıda tipik bir başlangıç dosyasının iskeleti yer alıyor:

    # config.yaml — Gatus yapılandırması
    storage:
      type: sqlite
      path: /config/data.db
    
    ui:
      title: "Clou.TR Servis Durumu"
      header: "Sistem Durumu"
    
    endpoints:
      - name: "Web Sitesi"
        group: "Uygulamalar"
        url: "https://ornek-site.com"
        interval: 60s
        conditions:
          - "[STATUS] == 200"
          - "[RESPONSE_TIME] < 800"
    

    Buradaki storage bloğu önemlidir. Varsayılanda Gatus veriyi yalnızca bellekte tutar; konteyner yeniden başlayınca geçmiş kaybolur. type: sqlite ve kalıcı bir path vererek uptime geçmişini ve yanıt süresi grafiklerini kalıcı hale getirirsiniz. Yüksek trafikli, çok sayıda izleme barındıran kurumsal kurulumlarda type: postgres seçeneğiyle harici bir PostgreSQL veritabanına da yazabilirsiniz.

    endpoints altındaki her madde bir izlemedir. name panelde görünen ad, group ise ilgili izlemeleri panelde bir başlık altında toplar (örneğin "Uygulamalar", "Veritabanları", "DNS"). interval kontrolün ne sıklıkla yapılacağını, url hedefi, conditions ise başarının hangi kurallarla ölçüleceğini belirler. Yapılandırma değiştikten sonra Gatus'u yeniden başlatmanız yeterlidir; kurulumun tamamı bu tek dosyada durduğu için değişikliği bir git commit ile kayıt altına almak da mümkündür.

    HTTP, TCP ve ICMP sağlık kontrolleri#

    Gatus'un gücü, farklı protokolleri aynı basit yapıyla izleyebilmesinden gelir. İzlenecek hedefin türünü çoğunlukla url alanındaki şema (scheme) belirler.

    HTTP(S) kontrolü, en yaygın senaryodur. Bir web sitesinin veya API'nin durum kodunu, yanıt süresini, gövdesini ya da başlıklarını değerlendirebilirsiniz. Aşağıdaki örnek bir API uç noktasını POST isteğiyle sınar:

    - name: "Sipariş API"
      group: "Servisler"
      url: "https://api.ornek-site.com/v1/health"
      method: POST
      headers:
        Content-Type: application/json
        Authorization: "Bearer TOKEN"
      body: '{"ping": true}'
      interval: 30s
      conditions:
        - "[STATUS] == 200"
        - "[BODY].status == UP"
        - "[RESPONSE_TIME] < 500"
    

    TCP kontrolü, HTTP konuşmayan ama belirli bir portta dinleyen servisler için kullanılır; örneğin bir veritabanı, SMTP sunucusu veya SSH. Burada url alanına tcp://host:port yazarsınız ve genellikle tek koşul bağlantının kurulup kurulmadığıdır:

    - name: "PostgreSQL"
      group: "Veritabanları"
      url: "tcp://db.ornek-site.com:5432"
      interval: 60s
      conditions:
        - "[CONNECTED] == true"
    
    - name: "SMTP Sunucusu"
      group: "E-posta"
      url: "tcp://mail.ornek-site.com:587"
      interval: 120s
      conditions:
        - "[CONNECTED] == true"
    

    ICMP (ping) kontrolü, bir sunucunun ya da ağ cihazının ağ üzerinden erişilebilir olup olmadığını ölçer. Web servisi çalıştırmayan çıplak sunucular (VPS, VDS, dedicated) için idealdir. Bu tür kontrollerde url alanına icmp://host yazarsınız:

    - name: "VDS Sunucu"
      group: "Altyapı"
      url: "icmp://185.10.20.30"
      interval: 60s
      conditions:
        - "[CONNECTED] == true"
        - "[RESPONSE_TIME] < 100"
    

    Not: ICMP kontrolleri işletim sistemi düzeyinde ham soket (raw socket) yetkisi gerektirir. Docker ile çalıştırırken konteynere NET_RAW yeteneğini vermeniz ya da uygun ayarları geçmeniz gerekebilir; aksi halde ping kontrolleri sessizce başarısız olur. Bunun yanında Gatus, DNS kayıtlarını (dns://), TLS sertifikası geçerlilik süresini ve STARTTLS ile SSH bağlantılarını da izleyebilir; yani tek bir araçla katmanın büyük bölümünü kapsarsınız.

    Koşullar: durum kodu ve yanıt süresi#

    Gatus'ta bir kontrolün "başarılı" mı yoksa "başarısız" mı sayılacağını conditions listesi belirler. Listedeki koşulların hepsi doğru olduğunda izleme sağlıklı (healthy) kabul edilir; herhangi biri başarısız olursa arıza (unhealthy) sayılır. Koşullar, köşeli parantez içindeki yer tutucular (placeholder) üzerinden yazılır. En sık kullanılanlar şunlardır:

    Yer tutucuAnlamıÖrnek koşul
    [STATUS]HTTP durum kodu[STATUS] == 200
    [RESPONSE_TIME]Yanıt süresi (ms)[RESPONSE_TIME] < 800
    [BODY]Yanıt gövdesi (JSON alanına erişim)[BODY].status == UP
    [CONNECTED]TCP/ICMP bağlantısı kuruldu mu[CONNECTED] == true
    [CERTIFICATE_EXPIRATION]Sertifika bitimine kalan süre[CERTIFICATE_EXPIRATION] > 168h
    [IP]Çözümlenen IP adresi[IP] == 185.10.20.30

    Bu yer tutucular sayesinde yüzeysel bir "site açılıyor mu" kontrolünün ötesine geçebilirsiniz. Örneğin aşağıdaki kontrol, hem sitenin 200 döndürmesini hem 1200 ms'nin altında yanıt vermesini hem de TLS sertifikasının en az bir hafta (168h) daha geçerli olmasını aynı anda şart koşar:

    - name: "Kurumsal Site"
      url: "https://ornek-site.com"
      interval: 60s
      conditions:
        - "[STATUS] == 200"
        - "[RESPONSE_TIME] < 1200"
        - "[CERTIFICATE_EXPIRATION] > 168h"
    

    [BODY] yer tutucusu özellikle güçlüdür: JSON yanıtın içindeki bir alana doğrudan erişip değerini karşılaştırabilirsiniz ([BODY].data.healthy == true gibi). Bu, "HTTP 200 dönüyor ama uygulama aslında bozuk" durumlarını yakalamak için birebirdir. Sertifika süresi koşulunu izlemeniz, sessizce dolan bir SSL sertifikasının siteyi bir gün aniden erişilemez kılmasının da önüne geçer. Bir izleme arka arkaya belirlediğiniz sayıda başarısız olduğunda Gatus, bir sonraki bölümde göreceğimiz uyarı mekanizmasını tetikler.

    Discord ve Slack uyarıları#

    İzlemenin asıl değeri, bir şey ters gittiğinde sizi haberdar etmesidir. Gatus, alerting bloğunda tanımladığınız sağlayıcılar üzerinden uyarı gönderir; ardından her endpoint için hangi uyarının kaç başarısızlıktan sonra tetikleneceğini belirlersiniz. Discord için tek yapmanız gereken, kanal ayarlarından bir webhook URL'i alıp yapılandırmaya eklemektir:

    alerting:
      discord:
        webhook-url: "https://discord.com/api/webhooks/XXXX/YYYY"
    
      slack:
        webhook-url: "https://hooks.slack.com/services/AAAA/BBBB/CCCC"
    
    endpoints:
      - name: "Ödeme Servisi"
        url: "https://api.ornek-site.com/odeme/health"
        interval: 30s
        conditions:
          - "[STATUS] == 200"
          - "[RESPONSE_TIME] < 600"
        alerts:
          - type: discord
            failure-threshold: 3
            success-threshold: 2
            send-on-resolved: true
            description: "Ödeme servisi yanıt vermiyor"
          - type: slack
            failure-threshold: 5
            send-on-resolved: true
    

    Buradaki üç anahtar önemlidir. failure-threshold, uyarının gönderilmesi için kaç arka arkaya başarısız kontrol gerektiğini belirtir; 3 demek, geçici bir ağ dalgalanmasında değil ancak üç ölçüm üst üste başarısız olduğunda alarm çalar. send-on-resolved: true, servis toparladığında bir "sorun çözüldü" mesajı gönderir; böylece hem çöküşü hem de geri gelişi görürsünüz. success-threshold ise bir sorunu "çözüldü" saymak için kaç başarılı kontrolün üst üste gelmesi gerektiğini kontrol eder ve servis inip çıkarken (flapping) art arda mesaj yağmasını engeller.

    Gatus yalnızca Discord ve Slack ile sınırlı değildir; e-posta (SMTP), Telegram, Microsoft Teams, PagerDuty, Opsgenie, Matrix ve genel webhook gibi birçok kanalı destekler. Ekibiniz olağan bildirimleri Slack'te, kritik gece alarmlarını ise PagerDuty üzerinden almak isteyebilir; her endpoint'e birden fazla alerts maddesi ekleyerek bu ayrımı rahatça kurabilirsiniz. Uyarıları üretim ortamına almadan önce mutlaka bir kez sahte bir başarısızlıkla test edin: yanlış girilmiş bir webhook URL'i, gerçek kesinti anında hiçbir uyarı gelmemesi demektir.

    Gatus ile Uptime Kuma karşılaştırması#

    İki araç da aynı ihtiyaca hitap eder ama felsefeleri farklıdır. Aşağıdaki tablo, hangisinin sizin ekibinize daha uygun olduğuna karar vermenize yardımcı olur:

    ÖzellikGatusUptime Kuma
    YapılandırmaTek dosya YAML (kod olarak)Web arayüzünden tıklama
    Çalışma diliGo (tek statik ikili)Node.js
    Kaynak tüketimiÇok düşükDüşük–orta
    Sürüm kontrolü (Git)Doğal olarak uygunManuel/dışa aktarma gerekir
    Öğrenme eğrisiYAML bilgisi gerekirGörsel, çok kolay
    Durum sayfasıOtomatik, sadeÖzelleştirilebilir, zengin

    Kısaca özetlemek gerekirse: izleme kurulumunu koda dökmek, Git'te takip etmek ve sunucudan sunucuya taşımak isteyen, komut satırına ve YAML'e aşina ekipler için Gatus daha rahattır. Görsel bir panelden tıklaya tıklaya izleme eklemeyi tercih eden, hızlı bir başlangıç isteyen kullanıcılar içinse Uptime Kuma daha erişilebilir bir seçenektir. İki aracı birlikte kullanan ekipler de vardır; kritik altyapı için birini, müşteriye açık durum sayfası için diğerini tercih etmek yaygın bir yaklaşımdır.

    Üretim ortamı için pratik öneriler#

    Gatus'u kurup çalıştırmak dakikalar sürer, ancak izlemeye gerçekten güvenebilmek için birkaç noktaya dikkat etmek gerekir. Bunlar zamanla değil, ilk kurulumda ele alınması gereken konulardır:

    • İzlemeyi ayrı bir sunucuda tutun. Gatus'u, izlediğiniz sitelerle aynı sunucuya kurarsanız o sunucu çöktüğünde hem siteniz hem de alarm sisteminiz aynı anda susar. İzlemeyi küçük, bağımsız bir sanal sunucuda çalıştırmak en sağlıklısıdır.
    • Paneli dışarıya açacaksanız kimlik doğrulaması ekleyin. Gatus'un yönetim panelini herkese açık bırakmak yerine önüne bir ters vekil sunucu (reverse proxy) koyup temel kimlik doğrulaması ekleyin ve trafiği SSL ile şifreleyin. İnternete açık her yüzeyin bir WAF arkasında olması, sömürü denemelerini erkenden savar.
    • Depolamayı kalıcı yapın. storage.type değerini sqlite veya postgres olarak ayarlayıp SQLite dosyasını kalıcı bir birime (volume) bağlayın; aksi halde her yeniden başlatmada uptime geçmişiniz sıfırlanır ve düzenli yedekleme planınıza bu dosyayı da dahil edin.
    • Eşikleri gerçekçi seçin. interval değerini çok düşürmek (örneğin 5 saniye) hem hedef sunucuya hem izleyiciye gereksiz yük bindirir. Çoğu servis için 30–60 saniyelik aralık ve failure-threshold: 3 dengeli bir başlangıçtır.

    Bu tür bir izleme altyapısını kurmak ve sürdürmek için sağlam bir sunucu tabanına ihtiyaç duyarsınız. Bu araçları çalıştıracak bir ortam ararken sunucu çözümlerimize ya da sunucu yönetimi hizmetimize göz atabilirsiniz.

    Sıkça Sorulan Sorular#

    Gatus bir veritabanı gerektirir mi?#

    Hayır, Gatus varsayılan olarak harici bir veritabanı gerektirmez ve tek bir statik ikili dosya olarak çalışır. Uptime geçmişini kalıcı tutmak için gömülü SQLite'ı kullanabilir, çok büyük kurulumlarda ise isteğe bağlı olarak harici bir PostgreSQL veritabanına bağlanabilirsiniz. Küçük ve orta ölçekli kurulumların büyük çoğunluğu için SQLite fazlasıyla yeterlidir.

    Gatus ile Uptime Kuma arasındaki temel fark nedir?#

    En temel fark yapılandırma yaklaşımıdır. Gatus tüm izlemelerini tek bir YAML dosyasında tutar ve bu dosya Git ile sürümlenebilir; yani izleme kurulumu kod gibi yönetilir. Uptime Kuma ise görsel bir web arayüzünden tıklayarak monitor eklemenizi sağlar. YAML ve komut satırına aşina ekipler Gatus'u, görsel kolaylık isteyenler Uptime Kuma'yı tercih eder.

    Gatus ile web sitesi dışındaki servisleri de izleyebilir miyim?#

    Evet, Gatus yalnızca HTTP sitelerini değil; TCP portlarını, ICMP ping ile sunucu erişilebilirliğini, DNS kayıtlarını, TLS sertifika sürelerini ve STARTTLS gibi protokolleri de izleyebilir. Örneğin bir PostgreSQL veritabanını TCP kontrolüyle, çıplak bir sunucuyu ise ICMP kontrolüyle izleyebilirsiniz. Böylece tek araçla altyapının büyük bölümünü kapsarsınız.

    Uyarılar çalışmıyorsa nereye bakmalıyım?#

    İlk olarak webhook URL'inin doğru ve tam kopyalandığını, ardından ilgili endpoint'e alerts bloğunun eklenip eklenmediğini kontrol edin; sağlayıcıyı alerting altında tanımlamak tek başına yeterli değildir, endpoint'e de bağlamanız gerekir. failure-threshold değerinin beklediğinizden yüksek olması da uyarının geç gelmesine yol açabilir. Konteyner loglarını (docker logs gatus) incelemek ve kasıtlı bir başarısızlıkla test etmek sorunu genellikle hızla ortaya çıkarır.

    ICMP (ping) kontrolleri neden başarısız oluyor?#

    ICMP kontrolleri, işletim sistemi düzeyinde ham soket yetkisi gerektirir. Docker içinde çalıştırıyorsanız konteynere NET_RAW yeteneğini vermeniz veya ağ ayarlarını uygun şekilde yapılandırmanız gerekir; bu yetki verilmezse ping kontrolleri sessizce başarısız olur. Sunucunuzda giden ICMP trafiğini engelleyen bir güvenlik duvarı kuralı olup olmadığını da kontrol etmekte fayda vardır.

    Gatus'u kaç servisi izlemek için kullanabilirim?#

    Gatus çok düşük kaynak tükettiği için mütevazı bir sunucuda dahi yüzlerce izlemeyi rahatça çalıştırabilirsiniz; katı bir üst sınır yoktur ve sınır pratikte sunucunuzun kaynaklarına bağlıdır. Yine de kontrol aralıklarını çok düşük tutmak hem hedeflere hem izleyiciye yük bindirir, bu yüzden izleme sayısı arttıkça interval değerlerini dengeli seçmek gerekir.

    Kapanış#

    Gatus, izleme kurulumunu bir görsel arayüzden tıklamak yerine kod olarak yönetmek isteyen ekipler için sade, hızlı ve güvenilir bir çözümdür. Tek dosyalık YAML yapılandırması sayesinde kurulumunuz Git'te sürümlenir, kod incelemesinden geçer ve bir sunucudan diğerine kolayca taşınır; HTTP, TCP ve ICMP kontrolleri ile koşul tabanlı sağlık ölçümü, Discord ve Slack uyarılarıyla birleştiğinde küçük bir VPS'te bile eksiksiz bir izleme altyapısı kurmanıza olanak tanır.

    Böyle bir izleme sistemini çalıştıracak sağlam bir zemin arıyorsanız, ihtiyacınıza göre ölçeklenen VDS sunucu ve sanal sunucu çözümlerimizi, konteyner uygulamalarını keşfetmek için App Center sayfamızı ve altyapınızı uçtan uca bize emanet etmek isterseniz sunucu yönetimi hizmetimizi inceleyebilirsiniz. Doğru kurgulanmış bir durum izlemesi, bir sonraki kesintiyi müşterinizden önce sizin öğrenmenizi sağlar.

    izlemeuptimeself-hosted

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.