Teknoloji

VPS İzleme ve Alarm Kurulumu: Prometheus, Grafana ve Uptime Kuma ile Başlangıç

VPS’in Neden Susturulmaz Olmalı? Küçük Bir Hikâyeyle Başlayalım

Hiç başınıza geldi mi? Gece sessiz, telefon bir kez çalıyor, sonra susuyor. İçinizden bir ses ‘Umarım sunucu değildir’ diyor. Ben de bir gece tam böyle yaşadım. Trafik yükselmiş, bir cron beklenenden fazla CPU yemiş, disk ağzına kadar dolmuş, site sessizce nefesini tutmuş. Sabah oldu, mailler dolu, ‘Site erişilmiyor’ mesajları çoğalmış. O gün düşündüm: Aslında bu olay bana sürpriz yapmadı, ben ona kapıyı açık bıraktım.

VPS üzerinde bir iki servis koşturuyorsun, sonra üç oluyor, sonra beş. İşler yolunda giderken sessiz kalıyorlar; problem çıktığında ise bağırmadan, sadece performans düşerek kendini belli ediyor. Eğer seni dürtecek, bir şeylerin yolunda gitmediğini fısıldayacak bir göz yoksa, iş işten geçiyor. Burada devreye üçlü bir ekip giriyor: Prometheus ölçüyor, Grafana gösteriyor, Uptime Kuma da dışarıdan yoklayıp ‘iyi misin?’ diye soruyor. Bu yazıda, bu üçlüyü basit, derli toplu ve gereksiz jargon olmadan, pratik bir başlangıç seviyesinde kurup ilk alarmlarını konuşturacağız.

Planımız net: Önce neyi ölçmek istediğimizi konuşacağız. Sonra Prometheus ve Node Exporter ile metrikleri toplayacağız. Grafana ile panelleri kuracağız. Uptime Kuma ile de dışarıdan nabzı tutacağız. En sonunda ise alarmları sakin ama uykusuz bırakmayan bir şekilde kurgulayacağız. Hazırsan, beraber başlayalım.

Ölçmek Ne İşe Yarar? Önce Görmeyi Öğrenmek

Bir sunucuyu izlemek, arabayla uzun yola çıkmadan önce gösterge paneline bakmaya benziyor. Benzin azsa yolda kalırsın, hararet yükselirse motoru üzersin. VPS tarafında da hikâye farklı değil. CPU tavan yapıyorsa bir yerde sıkışma var, bellek şişiyorsa süreçler konuşuyor, disk doluysa zaten hikâye kısa sürer. Bir de işin ağ tarafı var; gecikme artar, paket kaybı baş gösterir, dışarıdan erişim takılır. Hepsi birer işaret.

Mesela şöyle düşünün: Üzerinde WordPress çalıştırdığın küçük bir VPS’in var. Gün içinde gayet hızlı, ama akşam indirim kampanyası yayına girince sayfalar ağırlaşıyor, siparişler sepetten geri dönüyor. O an orada olmak istiyorsun; CPU, RAM ve disk I/O ne durumda görmek istiyorsun. İzleme, sana o ânı geri veriyor. Üstelik sadece sorun varken değil, sorun gelmeden hemen önce de ipuçları düşüyor.

Bu arada izleme iki yerden bakar: İçeriden ve dışarıdan. İçeriden baktığında sistemin nabzını ölçersin; dışarıdan baktığında ise kullanıcının gördüğünü test edersin. İşte bu yüzden Prometheus ve Grafana içerideki göz, Uptime Kuma ise dışarıdaki nabız ölçer gibi duruyor. İkisini birden tutunca, çerçeve tamamlanıyor.

Prometheus ve Node Exporter: İçeriden Nabız Tutma

Minik ama güçlü: Prometheus’un rolü

Prometheus, belirlediğin adresleri düzenli aralıklarla yoklayıp metrikleri çeken bir toplayıcı gibi çalışır. ‘Şu adresteki makineden CPU kullanımını al, şu adreste çalışan uygulamanın gecikmesini sor’ diye talimat verirsin. Kayıt defterine işler, sonra da bu verileri soru sormaya uygun şekilde saklar.

Ben genelde küçük bir VPS’e Prometheus kurup aynı makinede bir de Alertmanager çalıştırıyorum. Bir şeyler kötüleşmeye başladığında, bu ikili beni arıyor. Burada amaç tek seferde kusursuz bir mimari kurmak değil; önce görmek, sonra gerektiğinde dağıtmak.

Node Exporter: Sunucunun dili

Prometheus’un tek başına hiçbir şey görmediğini unutmayalım. Ona konuşacak birini vermek gerekiyor: Node Exporter. Bu küçük yardımcı, sunucunun içini dışarıya ‘metrik’ diliyle anlatır. CPU kullanımını, load değerlerini, bellek, disk, ağ, hatta dosya sistemi inode’larını bile rapor eder.

Kurulumun tadı kaçmasın diye komutları burada birer ipucu gibi bırakıyorum. Paketi indirirsin, servise eklersin, 9100 portundan dinler. Prometheus tarafında ise ‘scrape’ dediğimiz çekme ayarlarına bu adresi eklersin. Mesela şöyle bir mantıkla: prom Sunucusundaki ayar dosyasında ‘job_name: node’ dersen, ‘targets’ içine ‘server_ip:9100’ koyarsın. Prometheus, belirlediğin aralıklarla oradan veri çeker. Zor değil, sadece ilk bağlantıyı kurmak önemli.

İlk kurulumda dikkat edeceğin küçük ayrıntılar

Güvenlik duvarında 9100 gibi portları rastgele açıp bırakma. Mümkünse sadece Prometheus’un IP’sine izin ver, geri kalan herkesi çevirme kapıdan. Bir de etiket, isim, açıklama gibi şeyleri baştan düzenli tut. ‘production’ mı, ‘staging’ mi, ‘lon’ mı ‘ist’ mi; hangi VPS nerede, hangi servis neyi taşıyor? Yarın bir problem olduğunda akış şemasını kafanda kurabilmek için bu küçük özene çok ihtiyacın olacak.

Daha derin adımlar atmak istersen, Prometheus’un hızlı başlangıç rehberine bir göz atmak iyi gelebilir. Ama burada hedefimiz basit bir başlangıcı çalıştırmak; sonra istediğin kadar büyütürsün.

Grafana ile Paneller: Göstergeyi Okumayı Sevmek

Bir tablo değil, hikâyeyi anlatan grafikler

Grafana’yı kurduğunda, ilk yapacağın şey veri kaynağı olarak Prometheus’u eklemek. Adresi, erişim anahtarını, zaman aralığını veriyorsun. Sonra panelleri dizmeye başlıyorsun. CPU yüzdesi, load değeri, bellek kullanımı, disk I/O, ağ trafiği; bunları aynı ekranda anlamlı bir kurguyla yan yana getirmek önemli. Mesela CPU artarken load da yükseliyorsa, ama disk I/O normalse, hikâye başka; CPU ve I/O birlikte yükseliyorsa, problem dosya sistemi veya depolama tarafında olabilir.

Ben panel kurarken şuna dikkat ediyorum: Her grafiğin bir ‘neden’ sorusuna cevap vermesi. ‘Niye gecikti?’ sorusuna ağ grafiği, ‘niye yavaşladı?’ sorusuna disk grafiği, ‘niye çakıldı?’ sorusuna bellek ve CPU grafiği. Panel ne kadar az ama anlamlı olursa, gözün orada yorulmadan karar verebiliyor. Gereksiz süs, gereksiz widget yığınları ilk gün güzel görünür, üçüncü gün listeyi kaydırırken kaybolursun.

Hazır panelleri sevmek ama kendine uydurmak

Grafana’nın en güzel yanlarından biri, topluluk panelleri. Node Exporter için hazırlanmış dashboard’lar var. İndirip bir tuşla içeri alırsın; sonra kendi etiket ve isimlerine göre ufak dokunuşlar yaparsın. Bu iş, ‘sıfırdan çizdim’ demekten hızlı ve daha gerçekçi ilerler. Ama hazır panel ne kadar iyi olursa olsun, kendi kullanımına göre düzeltmezsen bir yerden sonra eksik kalır.

Grafana’da veri kaynağını bağlama ve temel panel ayarları için Prometheus veri kaynağı rehberini bir kenara kaydet. Bazen tek bir ayar ekranında gözden kaçan küçücük bir detay, tüm grafikleri etkileyebiliyor.

Eşikler, renkler, uyarılar

Ekranda rengi bilinçli kullanmak iyi bir ipucu. CPU %80 üstüne çıktığında panel sararsın, %90 olunca turuncuya geçersin; kırmızı sadece gerçekten o an aksiyon istiyorsa devreye girer. Bu sayede ekrana bir bakışta ‘iyi misin?’ sorusuna cevap alırsın. Her şeyi kırmızı yapan bir panel, birkaç gün sonra duvar kâğıdına dönüşür; kimse bakmaz.

Uptime Kuma: Dışarıdan Nabız, İçeriden Huzur

Kullanıcının gördüğüne bakmak

Prometheus içeriden konuşur, Uptime Kuma dışarıdan. ‘Ben de seni her 30 saniyede bir ararım, iyi misin diye sorarım’ kafasıyla çalışır. Ping atar, HTTP isteği yapar, bir TCP portu dinli mi diye bakar. Buradaki değer şudur: İçeride metrikler güllük gülistanlık olsa bile, dışarıdan gelen bir istek bir firewall kuralına, bir DNS hatasına, bir sertifika süresine takılmış olabilir. Uptime Kuma, bu köprüde nöbet tutar.

Kurulumu oldukça kolaydır. Web arayüzü ile yeni bir ‘monitor’ eklersin; domainini yazarsın, path belirtirsin, kritik sayfaları seçersin. İstersen header ekleyebilir, beklediğin yanıt kodunu tanımlayabilirsin. Daha önemlisi, bildirim kanallarını açarsın. E-posta, Telegram, Slack, Discord; hangisi işini görüyorsa.

Ben genelde ‘ana sayfa’, ‘checkout’, ‘login’ gibi kritik uçlara ayrı izlemler ekliyorum. Böylece bir sayfa çökerken diğerinin sağlıklı olduğunu görebiliyorum. Çoğu zaman sorunu fark ettiren de bu ayrım oluyor. Ve şunu da seviyorum: Sorun çözüldüğünde, ‘geri geldi’ mesajını almak insana hem moral veriyor hem de zaman damgası bırakıyor.

Daha fazlası için Uptime Kuma deposuna göz atmak iyi fikir. Orada güncel kurulum yöntemleri ve küçük püf noktaları var. Ama inanın, birkaç tıkla bile gayet yeterli bir dış izleme kurabiliyorsunuz.

Alarm Tasarımı: Korkutmayan ama Uyandıran Bildirimler

Az ve öz alarmın değeri

Alarm dediğin şey çok olunca değersizleşir. Her şeye alarm koyarsan, birkaç gün sonra hiçbirini ciddiye almazsın. O yüzden başlangıç için üç temel alarm, çoğu senaryoda hayat kurtarır: CPU uzun süre yüksek, disk doluluk kritik seviyede, dış erişim başarısız. Üçü de ayrı bir hikâye anlatır. Üçü birden öterse zaten koşman gerekir.

Bu üçlünün zamanı da önemlidir. CPU bir dakika %90 oldu diye çağrı açmak doğru değil; dalgalanmalara alan bırak. Mesela 5 dakika ortalaması %85 üzeri olunca alarm üret. Disk tarafında %80 doluluğu sarı, %90’ı turuncu, %95’i kırmızı olarak düşün. Dış erişim için ise iki üç ardışık başarısızlıkta alarm aç; tek seferlik pürüzlerde geceyi bölme.

Prometheus + Alertmanager, Uptime Kuma + Bildirim kanalları

Prometheus tarafında alarmları kural olarak yazarsın, Alertmanager ise bu kurallar çalınca kime haber vereceğini bilir. E-posta olabilir, chat olabilir; ekip ne kullanıyorsa. Uptime Kuma ise web arayüzünden aynı kanallara kolayca bağlanır. Birini içeriden, birini dışarıdan konuşturunca, alarm stoğunu da dengelersin. İçeride CPU yükselirken dışarıda cevap veriliyorsa, ‘baskı var ama nefes alıyor’ dersin; dışarıda çakılınca ama içeride her şey normalse, rotayı DNS, WAF, firewall gibi kapılara çevirirsin.

Ben alarm mesajlarını yazarken, kendime küçük ipuçları bırakmayı seviyorum: ‘hostname: x, region: y, instance: z, problem: disk 95%’. Bu basit cümle, uykulu bir kafaya bile ‘nereye bakacağını’ söyler. Link eklemek de iyi fikir; tek tıkla Grafana paneline, tek tıkla Uptime Kuma detayına geçmek hız kazandırır.

Gürültüyü azaltan pratikler

Bir alarm bir kez çalsın, kapanınca ‘çözüldü’ desin. Bir problem uzuyorsa, belirli aralıklarla hatırlatma iyidir ama ‘mesaj fırtınası’ can sıkar. Aynı probleme ait birden fazla alarmı gruplayıp tek bir bildirimde özetlemek iyi çalışır. Ve en önemlisi, alarma bakan kişi sayısı ile alakanız olsun; kim ilgilenecekse sadece o kişiyi dürt. Bir grup sohbetini gece boyu titreten alarmlar, ekibe faydadan çok bıkkınlık getirir.

Küçük Kurulum Rehberi: Adımların Üzerinden Yavaşça Geçelim

Adım 1: Node Exporter’ı konuştur

Sunucuna Node Exporter’ı kur, 9100’den dinler hale getir. Sistem servis dosyasını ekleyip açılışta ayağa kalkmasını sağla. Güvenlik duvarında sadece Prometheus’un IP’sine izin ver. Bu kadar. O artık sunucunun nabzını düzenli atacak.

Mesela şöyle düşünün: ‘exporter’ bir sensör; tek işi doğru ölçmek. Ölçebileceği her şeyi ölçsün ama sadece güvenilir kişiye anlatsın. Güvenlik burada başlıyor. Eğer reverse proxy ile TLS eklemek istiyorsan, o da mümkün. Ama ilk günde şart değil.

Adım 2: Prometheus’u dinlemeyi öğret

Prometheus’a ‘scrape’ ayarında Node Exporter hedefini ekle. Birden fazla VPS varsa, onları aynı ‘job’ altında listele. Label kullanmayı unutma; hangi VPS, hangi ortam, hangi bölge. Bunlar yarın alarm kimin için çalıyor sorusuna hızlı cevap verir. Veri saklama süresini de makul tut; küçük disklerde çok uzun saklamak baş ağrıtır.

İlk gün bir tek Node Exporter yetebilir. Zamanla uygulama özel metrikler istersen, Nginx, MySQL gibi servisler için exporter’lar var. Ama unutma, önce çekirdek metrikler seni zaten büyük sürprizlerden korur.

Adım 3: Grafana’yı gözün yap

Grafana’ya Prometheus kaynağını ekle, hazır Node Exporter dashboard’unu içeri al. Panelleri sayfanın akışına göre sırala. En tepeye ‘Sistem durumu özet’ gibi bir bölüm, altına CPU, RAM, disk, ağ; daha altına servis bazlı grafikler. Renk eşikleri ile kritik ânları görünür yap. Ve sakın unutma: Panelin bir ekran görüntüsü, ekip içinde durum raporu olarak çok iş görür. Kimi zaman tek bir görsel, uzun açıklamadan hızlıdır.

Adım 4: Uptime Kuma ile dışarıdan kontrol ekle

Uptime Kuma’yı kur, ana uygulaman için bir HTTP izlemi ekle. Eğer API’n varsa, ona ayrı bir izle. Websitenin önemli adımlarını ayrı ayrı izle; login, ödeme, arama gibi. Bildirimleri bağla. Burada iyi bir püf noktası: Mesajlarda URL’yi de yaz, böylece doğrudan ilgili sayfaya tıklayıp bakabilirsin.

Bir de küçük bir kalite kontrol: Uptime Kuma’da ‘yanıt süresi’ grafiği ilk bakışta çok şey söyler. Trafik artınca dalgalanma büyüyor mu, hat içinde sıradışı bir sıçrama var mı; bu küçük çizgi, zamanla sana geleceği fısıldar.

Adım 5: Alarmları sakin ama kararlı kur

Prometheus tarafında birkaç temel kural yaz. ‘node_filesystem_avail_bytes’ gibi metriklerle disk doluluğunu takip edip yüzdesel eşik belirleyebilirsin. ‘node_load5’ ile yük ortalamasını, ‘node_memory_MemAvailable_bytes’ ile bellek durumunu izlersin. Kural metni teknik görünebilir, ama mantık basit: ‘Şu koşul şu kadar süre gerçekleşirse alarm üret’. Alertmanager bildirim kanallarını ekle, etiketlere göre yönlendirme yap.

Uptime Kuma tarafında ise daha yalın ayarlar seni mutlu eder. ‘3 ardışık başarısızlıkta haber ver’ gibi. Bu sayede geçici pürüzler geceni bölmez, ama kalıcı bir sorun geldiğinde uykudan nazikçe uyandırır.

Gerçek Hayattan Küçük Notlar: Yol Kazalarını Azaltmak

Disk doluluğu sessiz gelir, yüksek sesle gider

Disk doluluğu en sinsi konulardan. Log dosyaları büyür, yedekler yanlış klasöre düşer, bir noktada sistem nefes alamaz. Disk doluluğunu yüzde yerine kalan GB üzerinden de izle. Bazı küçük disklerde yüzde yanıltıcı olabilir; kalan alanı görmek daha iyi hikâye yazar. Bir de inode’ları unutma; dosya sayısı çok artarsa, boş yerin olsa bile dosya açamazsın.

CPU ve load ilişkisini okuma

CPU kullanımın yüksek ama load düşükse, belki kısa süreli patlamalar yaşıyorsun ama sistem yetişiyor. Load da yükseliyorsa, kuyruğa düşen işler artıyor demektir. Bu ayrımı panelde yan yana görmek, teşhiste hız kazandırır. Ben, CPU’nun yanında load’ı, RAM’in yanında ‘available’ değeri, disk I/O’nun yanında gecikme grafiğini koyarım. Gözün ilişki kurar, beyin karar verir.

Güvenlik ve erişim

İzleme araçları da sonuçta birer servis. Kim erişiyor, nereden erişiliyor, şifreler nerede saklanıyor, hepsini baştan düşün. Basit bir HTTP Basic Auth ile bile ilk katmanı koyabilirsin. Mümkünse yönetim panellerini VPN arkasında tut. Ve güncellemeleri erteleme. Küçük bir sürüm farkı bazen kritik bir açığı kapatır.

Grafikleri hikâyeleştirmek

Grafiklere bakarken ‘ne olmuş?’ yerine ‘neden olmuş?’ diye sor. Bir artış varsa, o sırada ne değişti? Yeni sürüm mü çıktı, reklam mı verdin, yedekleme mi çalıştı? Grafikleri günlüğe not düşmek, bir sonraki artışta işi kolaylaştırır. Ben kendi panellerimde önemli olaylara küçük açıklamalar ekliyorum; üç ay sonra dönüp bakınca bile çok işe yarıyor.

Ek Kaynaklar, Küçük Kestirmeler ve İleri Adımlar

İleride neler ekleyebilirsin?

Temeli oturtunca canın isterse uygulama özel metrikler ekleyebilirsin. Nginx için istek sayısı ve gecikme, veritabanı için yavaş sorgular ve bağlantı sayısı gibi. Burada amaç, ‘kullanıcı bir sayfaya tıkladığında perde arkasında neler oluyor?’ sorusuna yakından bakmak. Fazla detaya hemen koşmak yerine, küçük adımlarla ilerlemek daha sağlıklı. Her eklemenin sana ne fayda getirdiğini gör, sonra bir sonrakine geç.

Önerilen okuma

Şunu demeden geçmek istemiyorum: Eğer Prometheus ve Grafana tarafını biraz daha kurcalamak istersen, şu yazıda adım adım kurulum ve örnek alarm kuralları paylaştım; göz atmak iyi gelebilir: Prometheus, Grafana ve Node Exporter ile ayrıntılı kurulum ve alarm örnekleri. Ayrıca resmi dokümanlar bazen tek bir noktayı aydınlatır; ihtiyaç duyduğunda dönüp bak. Grafana ve Prometheus’un dokümanları kısa cevaplar için biçilmiş kaftan.

Bu arada, eğer bir noktada ağ katmanında işleri büyütmek istersen, IPv6 gibi başlıklara adım atarken izleme disiplininin iki kat önemli hale geldiğini göreceksin. Trafik çok kanallı olduğunda, gösterge paneli radarın olur.

Kapanış: Sessiz Alarmları Konuşturmak

Başa dönelim. O gece telefon çaldığında uyanmak istemezdim, ama uyanınca hızlıca neye bakacağımı bilmek her şeyi değiştirdi. İzleme ve alarm, ‘sorun hiç çıkmayacak’ vaadi vermez; ‘sorun çıktığında yalnız değilsin’ der. Prometheus içeriden detay verir, Grafana bunları anlaşılır hale getirir, Uptime Kuma dışarıdan ‘halen orada mısın?’ diye sorar. Bu üçlü, VPS’in için küçük ama güçlü bir güvenlik ağı örer.

Başlangıçta basit tut. Node Exporter, birkaç panel, üç temel alarm, bir iki dış kontrol. Sonra gerçek ihtiyaç doğdukça katman ekle. Panelleri sadeleştir, alarmları terbiye et, bildirimleri doğru kişiye yönlendir. Unutma, iyi bir izleme düzeni sana zaman kazandırır, panik anında aklını toplar, uzun vadede sistemini şekillendirir. Küçük adımların toplamı büyük bir huzura dönüşür.

Umarım bu yazı sana yol göstermiştir. Bir sorunda takılırsan, küçük bir not al, grafiğe bir bak, sonra ayarını hafifçe düzelt. İzleme işi biraz da böyle bir yolculuk. Bir dahaki yazıda görüşmek üzere; o zamana kadar panellerin yeşil, alarmların sessiz, kullanıcıların mutlu olsun.

Sıkça Sorulan Sorular

Kısmen olur, çünkü Uptime Kuma dışarıdan erişimi yoklar. Ama içeride neler olup bittiğini görmek için Prometheus şarttır. İkisi birlikte, hem içeriyi hem dışarıyı aynı anda izlemeni sağlar.

Eşiklerini gözden geçir, süre koşulu ekle ve alarmları grupla. Geçici dalgalanmalarda sus, kalıcı sorunlarda konuş. Az ama anlamlı alarm her zaman daha değerlidir.

Hazır paneller iyi bir başlangıç. İndir, dene, sonra işine uymayan kısımları sadeleştir. Kendi kullanımına göre küçük dokunuşlar yapınca panel gerçekten faydalı hale gelir.