A
<p>Uygulamalarınızın çalıştığından emin olmak için sadece sunucu metriklerine bakmak yeterli değildir. Kullanıcılarınızın deneyimini simüle ederek, olası sorunları onlar fark etmeden önce tespit etmeniz gerekir. İşte <strong>AWS CloudWatch Synthetics</strong> tam olarak bunu sağlar.</p>
<div class="toc">
<h3>İçindekiler</h3>
<ul>
<li><a href="#nedir">CloudWatch Synthetics Nedir?</a></li>
<li><a href="#canary-turleri">Canary Türleri</a></li>
<li><a href="#nasil-calisir">Nasıl Çalışır?</a></li>
<li><a href="#adim-adim-kurulum">Adım Adım Kurulum</a></li>
<li><a href="#ornek-kod">Örnek Canary Kodu</a></li>
<li><a href="#izleme-ve-alarm">İzleme ve Alarm</a></li>
<li><a href="#sss">Sıkça Sorulan Sorular (SSS)</a></li>
</ul>
</div>
<h2 id="nedir">CloudWatch Synthetics Nedir?</h2>
<p>AWS CloudWatch Synthetics, uygulamalarınızın uç noktalarını (endpoints) ve API'lerini izlemenizi sağlayan yönetilen bir servistir. Bu servis, <strong>Canary</strong> (Kanarya) adı verilen yapılandırılabilir script'ler kullanarak, uygulamanızda belirli aralıklarla testler çalıştırır. Canary'ler, Node.js veya Python tabanlı script'lerdir ve uygulamanızın trafiğini, kullanıcı davranışlarını taklit ederek (headless browser kullanarak) izler.</p>
<h2 id="canary-turleri">Canary Türleri</h2>
<p>CloudWatch Synthetics, farklı ihtiyaçlar için çeşitli Canary türleri (blueprints) sunar:</p>
<ul>
<li><strong>Heartbeat Monitor:</strong> Belirli bir URL'nin erişilebilir olup olmadığını, gecikme süresini ve ekran görüntüsünü kontrol eder. En temel izleme türüdür.</li>
<li><strong>API Canary:</strong> REST API'lerinizi (GET, POST, PUT vb.) test etmek için kullanılır. Yanıt sürelerini ve dönen verinin doğruluğunu kontrol eder.</li>
<li><strong>Broken Link Checker:</strong> Web sitenizdeki kırık linkleri tarar.</li>
<li><strong>Visual Monitoring:</strong> Sayfanın görsel olarak değişip değişmediğini kontrol eder (Visual regression testing).</li>
<li><strong>GUI Workflow Builder:</strong> Kod yazmadan, tıklama ve gezinme senaryoları oluşturmanızı sağlar.</li>
</ul>
<h2 id="nasil-calisir">Nasıl Çalışır?</h2>
<p>Canary'ler, arka planda AWS Lambda fonksiyonları üzerinde çalışır. Sizin belirlediğiniz sıklıkta (örneğin her 5 dakikada bir) tetiklenirler. Headless Chrome (Puppeteer) veya Selenium kullanarak web sayfanıza gider, butonlara tıklar, formları doldurur veya API istekleri atarlar. Her çalışmanın sonucunda başarı/başarısızlık durumu, ekran görüntüleri (screenshot), HAR dosyaları (ağ istekleri) ve loglar CloudWatch ve S3'e kaydedilir.</p>
<h2 id="adim-adim-kurulum">Adım Adım Kurulum</h2>
<p>Basit bir Heartbeat Canary oluşturmak için aşağıdaki adımları izleyebilirsiniz:</p>
<ol>
<li><strong>CloudWatch Konsoluna Gidin:</strong> AWS Yönetim Konsolu'nda CloudWatch servisini açın ve sol menüden "Synthetics Canaries" seçeneğine tıklayın.</li>
<li><strong>Canary Oluşturun:</strong> "Create Canary" butonuna basın.</li>
<li><strong>Blueprint Seçin:</strong> "Heartbeat Monitoring" seçeneğini işaretleyin.</li>
<li><strong>Yapılandırma:</strong>
<ul>
<li><strong>Name:</strong> Canary'nize bir isim verin (örn: <code>my-app-monitor</code>).</li>
<li><strong>Application URL:</strong> İzlemek istediğiniz URL'i girin.</li>
</ul>
</li>
<li><strong>Schedule (Zamanlama):</strong> Testin ne sıklıkla çalışacağını belirleyin (örn: 5 dakika).</li>
<li><strong>Data Storage:</strong> Test sonuçlarının (ekran görüntüleri, loglar) saklanacağı S3 bucket'ı seçin.</li>
<li><strong>Oluşturun:</strong> "Create Canary" butonuna basarak işlemi tamamlayın.</li>
</ol>
<h2 id="ornek-kod">Örnek Canary Kodu</h2>
<p>CloudWatch Synthetics, Node.js Puppeteer kütüphanesini kullanır. Aşağıda basit bir sayfa başlığı (Title) kontrolü yapan Canary örneği bulunmaktadır:</p>
<pre><code class="language-javascript">
var synthetics = require('Synthetics');
const log = require('SyntheticsLogger');
const pageLoadBlueprint = async function () {
// İzlenecek URL
const URL = "https://example.com";
let page = await synthetics.getPage();
const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
// HTTP durum kodunu kontrol et
if (!response || response.status() < 200 || response.status() > 299) {
throw "Failed to load page!";
}
// Sayfa başlığını al ve logla
let title = await page.title();
log.info("Page title: " + title);
// Ekran görüntüsü al
await synthetics.takeScreenshot('loaded', 'loaded');
};
exports.handler = async () => {
return await pageLoadBlueprint();
};
</code></pre>
<h2 id="izleme-ve-alarm">İzleme ve Alarm</h2>
<p>Canary oluşturulduktan sonra, "Availability" (Erişilebilirlik) ve "Latency" (Gecikme) metrikleri otomatik olarak CloudWatch Metrics'e gönderilir. Bu metrikler üzerinden CloudWatch Alarms oluşturarak, siteniz erişilemez olduğunda veya çok yavaşladığında e-posta (SNS) ile bildirim alabilirsiniz.</p>
<h3 id="sorun-giderme">Sorun Giderme</h3>
<p>Bir test başarısız olduğunda, detaylı inceleme için:</p>
<ul>
<li><strong>Screenshots:</strong> Hatanın olduğu anın ekran görüntüsüne bakın.</li>
<li><strong>Logs:</strong> Lambda loglarını inceleyerek hatanın koddan mı yoksa ağdan mı kaynaklandığını anlayın.</li>
<li><strong>HAR File:</strong> Ağ isteklerinin (Network requests) dökümünü inceleyerek hangi kaynağın (resim, script vb.) yüklenmediğini tespit edin.</li>
</ul>
<h2 id="sss">Sıkça Sorulan Sorular (SSS)</h2>
<h3>1. CloudWatch Synthetics ücretli mi?</h3>
<p>Evet, CloudWatch Synthetics çalıştırılan her Canary testi başına ücretlendirilir. Ayrıca, testlerin oluşturduğu loglar (CloudWatch Logs) ve saklanan veriler (S3) için de standart ücretler uygulanır.</p>
<h3>2. Canary script'leri hangi dilleri destekler?</h3>
<p>Şu anda Node.js (Puppeteer) ve Python (Selenium) çalışma zamanlarını desteklemektedir.</p>
<h3>3. Özel VPC içindeki uygulamaları izleyebilir miyim?</h3>
<p>Evet, Canary'nizi bir VPC'ye bağlayarak, internete açık olmayan dahili (internal) uygulamalarınızı da izleyebilirsiniz.</p>
<p>Daha fazla bilgi ve teknik destek için <a href="/tech/aws-consultancy">AWS Danışmanlığı</a> veya <a href="/tech/kubernetes-consultancy">Kubernetes Danışmanlığı</a> sayfalarımızı ziyaret edebilirsiniz.</p>
<p>Kaynak / Source: <a href="https://awsfundamentals.com/blog/aws-cloudwatch-synthetics" target="_blank" rel="noopener noreferrer">https://awsfundamentals.com/blog/aws-cloudwatch-synthetics</a></p>