Eğer proxy'ler üretimde kullanılıyorsa — veri çekme, SMM hesaplarının otomasyonu veya büyük ölçekli çoklu hesap yönetimi için — bir noktada "gibi çalışıyor" yeterli bir cevap olmaktan çıkacaktır. Sayılar gereklidir: hata ile düşen istek sayısı, IP havuzunun değiştirilmesinden sonra gecikmenin ne kadar arttığı, sağlayıcının trafik limitinin dolup dolmadığı. Kullanıcılar veya engellenen hesaplar bunları görmeden önce sorunları görmek için Prometheus'ta toplanması ve Grafana'da görselleştirilmesi gereken 7 metriği inceliyoruz.
Üretimde proxy'leri neden izlemeliyiz
Proxy'ler, sabit IP'ye sahip bir sunucu gibi statik bir altyapı değildir. Sürekli değişen bir adres havuzudur ve davranışı sağlayıcıya, yük durumuna, bölgeye ve hatta günün saatine bağlıdır. İzleme olmadan, Wildberries veya Ozon'un veri sağlamayı bıraktığını, Facebook Ads reklam panelinin hesabı engellediğini veya Instagram otomasyon scriptinin captcha'lar vermeye başladığını ancak sorun ortaya çıktığında öğrenirsiniz.
İzleme görevi, öznel "bir şeyler yanlış" ifadesini somut sayılara dönüştürmektir: hata oranı son bir saatte %2'den %15'e yükseldi, ortalama gecikme üç katına çıktı, bir proxy üzerinden trafik limiti aşıldı. Bu, sorun kritik hale gelmeden önce tepki vermeyi sağlar — havuzu otomatik olarak değiştirmek, sağlayıcıyı değiştirmek veya istek sıklığını azaltmak.
Metri toplamak için Prometheus (zaman serileri depolama) + Grafana (görselleştirme ve alerjiler) kombinasyonunu kullanıyoruz. Bu, herhangi bir dil ile kolayca entegre olabilen standart bir DevOps yığınıdır — Python, Node.js, Go. Aşağıda, prometheus_client kütüphanesi ile Python'da örnekler verilmiştir, ancak prensip evrenseldir.
Metri 1: Başarı Oranı — Başarılı İsteklerin Oranı
Bu, proxy havuzundaki sorunları ilk bildiren temel bir metriktir. Belirli bir zaman diliminde 200-299 yanıt kodu ile gelen isteklerin toplam isteklere oranı olarak hesaplanır. Başarı oranının %90'ın altına düşmesi genellikle havuzdaki bazı IP'lerin hedef site tarafından engellendiği veya sağlayıcının istikrarsız adresler sağladığı anlamına gelir.
Python'da örnek bir enstrümantasyon:
from prometheus_client import Counter, start_http_server
import requests
REQUESTS_TOTAL = Counter(
'proxy_requests_total', 'Proxy üzerinden toplam istek',
['proxy_pool', 'status']
)
def fetch_with_proxy(url, proxy, pool_name="residential"):
try:
resp = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=10)
status = "success" if resp.status_code < 300 else "failure"
except requests.exceptions.RequestException:
status = "failure"
REQUESTS_TOTAL.labels(proxy_pool=pool_name, status=status).inc()
start_http_server(9100) # Prometheus scrape için uç nokta
Son 5 dakika için başarı oranını hesaplamak için PromQL sorgusu:
sum(rate(proxy_requests_total{status="success"}[5m]))
/
sum(rate(proxy_requests_total[5m])) * 100
Eğer birden fazla proxy türü ile çalışıyorsanız — örneğin, sosyal medya için konut proxy'leri ve veri çekimi için veri merkezi proxy'leri — başarı oranını proxy_pool etiketi ile ayırmak mantıklıdır, böylece hangi havuzun kötüleştiğini görebilirsiniz.
Metri 2: Gecikme — Yanıt Gecikmesi
Gecikme, proxy'nin yanıtı ne kadar hızlı verdiğini gösterir. Gecikmenin ani artışı genellikle başarı oranının düşmesinden önce gelir — sağlayıcı aşırı yüklenmiştir veya IP zaten engellenmeye yakındır ve hedef sunucu yanıtları kasıtlı olarak yavaşlatmaya başlar. Gecikme için yalnızca ortalama değeri toplamak değil, aynı zamanda persentilleri — p50, p95, p99 — toplamak önemlidir, çünkü ortalama, gerçekten işleyişi engelleyen kuyruk gecikmelerini gizler.
from prometheus_client import Histogram
import time
REQUEST_DURATION = Histogram(
'proxy_request_duration_seconds',
'Proxy üzerinden isteğin süresi',
['proxy_pool'],
buckets=[0.1, 0.25, 0.5, 1, 2, 5, 10]
)
def fetch_timed(url, proxy, pool_name="mobile"):
start = time.time()
try:
requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=10)
finally:
REQUEST_DURATION.labels(proxy_pool=pool_name).observe(time.time() - start)
p95 gecikmesi için PromQL:
histogram_quantile(0.95,
sum(rate(proxy_request_duration_seconds_bucket[5m])) by (le, proxy_pool)
)
Hızın kritik olduğu durumlar için — örneğin, TikTok Ads otomasyonu sırasında, sayfanın yüklenmesi için her saniye, anti-tespit tarayıcısında zaman aşımı riskini artırır — p95'in 3-4 saniyenin üzerinde olması durumunda bir alerjinin ayarlanması önemlidir.
Metri 3: Hata Oranı — Hata Türlerine Göre
Basit başarı/başarısızlık, teşhis için yeterli değildir. Hataları türlerine göre ayırmak gerekir: 407 (Proxy Authentication Required) yetkilendirme sorunu anlamına gelir, 429 (Too Many Requests) istek limitinin aşıldığını gösterir, zaman aşımı — ağ sorunu, 403 — hedef sitenin anti-bot koruması nedeniyle engellenme. Her hata türü farklı bir tepki gerektirir.
ERROR_BY_TYPE = Counter(
'proxy_errors_total', 'Hata türüne göre proxy hataları',
['proxy_pool', 'error_type']
)
def classify_error(resp=None, exc=None):
if exc:
if isinstance(exc, requests.exceptions.Timeout):
return "timeout"
return "connection_error"
if resp.status_code == 407:
return "auth_error"
if resp.status_code == 429:
return "rate_limited"
if resp.status_code == 403:
return "blocked_by_target"
return "other"
Tipik hataların ve nedenlerinin tablosu:
| Kod/Tür | Olası Sebep | Kontrol Edilecekler |
|---|---|---|
| 407 | Geçersiz kimlik bilgileri veya süresi dolmuş oturum | Proxy kullanıcı adı/şifre, bağlantı dizesi formatı |
| 429 | IP üzerindeki istek limiti aşıldı | İstek sıklığı, havuz boyutu |
| 403 | Hedef sitenin anti-bot koruması | User-Agent, parmak izi, proxy türü |
| timeout | Sağlayıcı veya ağ aşırı yüklenmesi | Havuz üzerindeki yük, istemci zaman aşımı ayarları |
Metri 4: Döngü Hızı ve IP'nin Dayanıklılığı
Eğer dönen proxy'ler kullanıyorsanız, IP'nin ne sıklıkla değiştiğini ve adres "yanmadan" (hedef site tarafından engellenmeden) önce kaç isteğin geçtiğini bilmek önemlidir. Bu metrik, çoklu hesap yönetimi için özellikle kritik — örneğin, Dolphin Anty veya AdsPower aracılığıyla Facebook Ads hesapları oluştururken, IP'nin erken değiştirilmesi oturumu kesebilir ve güvenlik kontrolünü tetikleyebilir.
from prometheus_client import Gauge
IP_LIFETIME = Gauge(
'proxy_ip_lifetime_seconds', 'Döngü öncesi IP'nin yaşam süresi',
['proxy_pool']
)
IP_REQUESTS_BEFORE_BAN = Histogram(
'proxy_requests_before_ban',
'IP'nin engellenmeden önce geçtiği istek sayısı',
['proxy_pool'],
buckets=[10, 50, 100, 500, 1000, 5000]
)
Mobil proxy'ler için bu metrik, konut proxy'lerine göre farklı davranır — operatörün baz istasyonunu değiştirmesi, daha az engellenme olasılığı ile daha "temiz" IP'ler sağlar. Eğer amacınız, engellenmelere karşı yüksek duyarlılıkla SMM otomasyonu ise, gerçek verilerden elde edilen istatistiksel güvenilirlik için mobil proxy'ler ile konut proxy'lerinin IP dayanıklılığı göstergelerini karşılaştırmak mantıklıdır, genel tavsiyelere güvenmektense.
Metri 5: Bant Genişliği — Trafik Tüketimi
Çoğu proxy tarifesi, istek sayısına değil, trafik hacmine göre hesaplanır. İzleme olmadan, limitin neredeyse dolduğunu kaçırmak kolaydır — özellikle, örneğin, çok sayıda fotoğraf içeren Wildberries ürün kartlarının veri çekiminde görüntü veya video yüklemesi içeren bir görev varsa.
BANDWIDTH_USED = Counter(
'proxy_bandwidth_bytes_total', 'Proxy üzerinden tüketilen trafik',
['proxy_pool', 'direction'] # direction: yükleme/indirme
)
def track_bandwidth(resp, pool_name):
size = len(resp.content)
BANDWIDTH_USED.labels(proxy_pool=pool_name, direction="download").inc(size)
Grafana gösterge tablosunda, trafik miktarını değil, tüketim hızını (rate) inşa etmek faydalıdır — bu, limitin ne zaman dolacağını tahmin etmeye yardımcı olur ve önceden ek alım veya başka bir havuza geçiş planlamasına olanak tanır.
Metri 6: Coğrafi Dağılım ve Bölge Uygunluğu
Farklı ülkelerden reklam test eden pazarlamacılar ve Google Ads veya TikTok Ads'de coğrafi hedefleme ile çalışan arabulucular için, IP'nin gerçekten belirtilen bölgeye uygun olması kritik öneme sahiptir. Coğrafi hata, reklamın yanlış bir kitleye gösterilmesine veya coğrafi ayarların uyumsuzluğu nedeniyle hesabın engellenmesine yol açabilir.
GEO_MISMATCH = Counter(
'proxy_geo_mismatch_total',
'Belirtilen ve gerçek coğrafya arasındaki uyuşmazlık durumları',
['expected_country', 'actual_country']
)
def verify_geo(proxy, expected_country):
resp = requests.get("https://ipapi.co/json/", proxies={"https": proxy}, timeout=5)
actual = resp.json().get("country_code")
if actual != expected_country:
GEO_MISMATCH.labels(expected_country=expected_country, actual_country=actual).inc()
Coğrafyayı her istekte kontrol etmek (bu, trafik ve zaman açısından pahalıdır) yerine, belirli aralıklarla — havuzdan yeterli istatistiksel güvenilirlik sağlayacak bir IP örneği ile — kontrol etmek önerilir.
Metri 7: Eşzamanlı Bağlantılar — Paralel Oturumlar
Proxy üzerinden eşzamanlı bağlantı sayısı, havuz üzerindeki gerçek yükü gösterir. Paralel oturum sayısı, havuzdaki IP'lerin bozulmadan işleyebileceğinden daha fazlaysa, bu doğrudan önceki maddelerdeki gecikme ve hata oranının artmasına yol açar. Bu metrik, ölçeklendirme sırasında özellikle önemlidir — SMM ajansı, müşterilerin aynı anda çalışan hesap sayısını 10'dan 50'ye çıkardığında.
from prometheus_client import Gauge
ACTIVE_CONNECTIONS = Gauge(
'proxy_active_connections', 'Proxy üzerinden mevcut aktif bağlantılar',
['proxy_pool']
)
def on_request_start(pool_name):
ACTIVE_CONNECTIONS.labels(proxy_pool=pool_name).inc()
def on_request_end(pool_name):
ACTIVE_CONNECTIONS.labels(proxy_pool=pool_name).dec()
Bu metriği hata oranı ile aynı grafikte karşılaştırmak, Grafana'da hızlı bir şekilde korelasyonu gösterecektir: paralel oturum sayısı belirli bir eşiği aştığında, hatalar doğrusal olmayan bir şekilde artmaya başlar.
Grafana'da Gösterge Tablosu Ayarı: Adım Adım
Metri enstrümante edildikten ve Prometheus bunları toplamaya başladıktan sonra, verileri Grafana'da görselleştirmek gerekir. İşlem sırası:
- Prometheus'u veri kaynağı olarak ekleyin: Configuration → Data Sources → Add data source → Prometheus, Prometheus sunucunuzun URL'sini belirtin (genellikle
http://localhost:9090). - Yeni bir gösterge tablosu oluşturun: Create → Dashboard → Add new panel.
- Başarı Oranı paneli için, Metri 1 bölümündeki PromQL sorgusunu kullanın, görselleştirme türü — Gauge veya Time series.
- Gecikme için, p50/p95/p99 dağılımını zaman içinde görmek için Heatmap türünde bir panel oluşturun.
- Hata Oranı için,
error_typeetiketine göre ayrılmış Stacked Bar Chart oluşturun — bu, hangi hata türünün baskın olduğunu net bir şekilde gösterecektir. - Gösterge tablosu değişkeni ekleyin (Dashboard Settings → Variables)
proxy_pooliçin, böylece ayrı gösterge tabloları oluşturmadan havuzlar arasında geçiş yapabilirsiniz. - Gösterge tablosunu kaydedin ve 30 saniyede bir otomatik güncellemeyi ayarlayın, böylece anlık izleme yapabilirsiniz.
Hazır gösterge tablosunun JSON'unu Share → Export → Save to file üzerinden dışa aktarabilir ve farklı proxy havuzları için yeniden kullanabilirsiniz — konut, mobil ve veri merkezi, yalnızca değişken değerini değiştirerek.
Alerjiler: Ne Zaman Hareket Etmeliyiz
Gösterge tablosu, kimsenin olay anında bakmadığı bir durumda işe yaramaz. Bu nedenle, Grafana'da (Alerting → Alert rules) aşağıdaki eşik değerleri ile alerjilerin ayarlanması kritik öneme sahiptir, bu değerler çoğu üretim senaryosuna göre belirlenmiştir:
| Metri | Alerji Eşiği | Eylem |
|---|---|---|
| Başarı Oranı | 5 dakika içinde %85'in altında | Havuzu kontrol et, yedek havuza geç |
| p95 Gecikmesi | 5 saniyenin üzerinde | Paralelliği azalt, sağlayıcıyı kontrol et |
| Rate 429 | İsteklerin %10'unun üzerinde | İstek sıklığını azalt, IP havuzunu artır |
| Bant Genişliği Oranı | 24 saat içinde limitin dolması tahmini | Trafik satın al veya istekleri optimize et |
Alerjileri, anlık tepki sağlamak için Telegram veya Slack üzerinden webhook ile yönlendirmek daha iyidir — bu, günlük olarak gösterge tablosunu kontrol etmekten daha hızlı bir yanıt sağlar.
Sonuç
Yedi metrik — başarı oranı, gecikme, hata oranı türlerine göre, IP dayanıklılığı, trafik, coğrafi uygunluk ve bağlantıların rekabetçiliği — üretimde proxy altyapısının sağlığı hakkında tam bir resim sunar. Prometheus + Grafana kombinasyonu, sorunu sonradan tespit etmekle kalmaz, aynı zamanda eğilimleri görmenizi ve havuzun bozulması, hesapların engellenmesi veya veri çekiminin durması gibi sorunlar ortaya çıkmadan önce tepki vermenizi sağlar.
Proxy türünün seçimi, hangi metriklerin öncelikli olacağını doğrudan etkiler: engellenmelere karşı yüksek duyarlılığa sahip görevler için, Instagram veya TikTok'ta çoklu hesap yönetimi gibi, öncelikle IP dayanıklılığı ve başarı oranını izlemek önemlidir, böylece kullanıcıların gerçek trafiği ile maksimum benzerlik için konut proxy'leri kullanılmalıdır. Hız ve hacmin önemli olduğu görevler için — Ozon, Avito veya Yandex.Market'te toplu veri çekimi — gecikme ve bant genişliği ön plana çıkar ve burada genellikle daha yüksek bant genişliği nedeniyle veri merkezi proxy'leri daha etkili çalışır.