{"id":30476,"date":"2025-09-28T08:40:59","date_gmt":"2025-09-28T05:40:59","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30476"},"modified":"2025-09-28T08:40:59","modified_gmt":"2025-09-28T05:40:59","slug":"12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/","title":{"rendered":"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu<\/h2>\n<p>DigitalOcean&#8217;\u0131n &#8220;12 Days of DigitalOcean&#8221; serisinin alt\u0131nc\u0131 g\u00fcn\u00fcne ho\u015f geldiniz! Bu seride, bulut tabanl\u0131 hizmetlerinizi en iyi \u015fekilde nas\u0131l kullanabilece\u011finizi ve geli\u015ftirebilece\u011finizi ke\u015ffediyoruz. Bug\u00fcne kadar belki bir web sitesi kurdunuz, bir veritaban\u0131 olu\u015fturdunuz veya bir CI\/CD hatt\u0131 yap\u0131land\u0131rd\u0131n\u0131z. Ancak, her modern uygulaman\u0131n temel bir bile\u015feni vard\u0131r ki o da izlenebilirlik ve hata ay\u0131klamad\u0131r. \u0130\u015fte bu noktada loglama devreye giriyor. \u00d6zellikle sunucusuz (serverless) mimarilerde, fonksiyonlar\u0131n\u0131z\u0131n ne yapt\u0131\u011f\u0131n\u0131 anlamak ve olas\u0131 sorunlar\u0131 gidermek i\u00e7in harici loglama vazge\u00e7ilmezdir.<\/p>\n<p>Bu makalede, DigitalOcean Functions \u00fczerinde \u00e7al\u0131\u015fan, do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisi gibi fonksiyon tabanl\u0131 bir uygulaman\u0131n neden harici loglamaya ihtiya\u00e7 duydu\u011funu, harici loglaman\u0131n avantajlar\u0131n\u0131 ve pop\u00fcler bir \u00e7\u00f6z\u00fcm olan Logtail ile nas\u0131l entegre edilece\u011fini detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Sunucusuz D\u00fcnyada Loglaman\u0131n \u00d6nemi<\/h3>\n<p>Geleneksel sunucu tabanl\u0131 uygulamalarda, loglar genellikle sunucunun yerel diskine yaz\u0131l\u0131r ve SSH veya merkezi bir log toplama arac\u0131 ile eri\u015filebilir. Ancak sunucusuz mimariler, bu paradigmalar\u0131 k\u00f6kten de\u011fi\u015ftirir. Fonksiyonlar k\u0131sa \u00f6m\u00fcrl\u00fcd\u00fcr, iste\u011fe ba\u011fl\u0131 olarak \u00f6l\u00e7eklenir ve genellikle durumsuz (stateless) yap\u0131dad\u0131r. Bu dinamik ortamda, bir fonksiyonun belirli bir \u00e7a\u011fr\u0131s\u0131 s\u0131ras\u0131nda ne oldu\u011funu anlamak, varsay\u0131lan loglama mekanizmalar\u0131yla zorla\u015fabilir.<\/p>\n<p>Do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisi gibi bir uygulamay\u0131 d\u00fc\u015f\u00fcn\u00fcn:<\/p>\n<p>*   Bir kullan\u0131c\u0131 yeni bir hat\u0131rlatma kaydetti\u011finde.<br \/>\n*   Bir hat\u0131rlatma zaman\u0131 geldi\u011finde ve mesaj g\u00f6nderilmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda.<br \/>\n*   Mesaj g\u00f6nderme i\u015flemi ba\u015far\u0131s\u0131z oldu\u011funda (\u00f6rne\u011fin, API hatas\u0131, a\u011f kesintisi).<br \/>\n*   Veritaban\u0131 i\u015flemleri s\u0131ras\u0131nda bir hata olu\u015ftu\u011funda.<\/p>\n<p>Bu gibi senaryolarda, sistemin neden beklenen \u015fekilde \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 anlamak, performans sorunlar\u0131n\u0131 tespit etmek veya g\u00fcvenlik ihlallerini incelemek i\u00e7in detayl\u0131 ve merkezi loglara ihtiyac\u0131m\u0131z vard\u0131r. \u0130\u015fte tam da bu nedenle harici loglama, sunucusuz uygulamalar\u0131n olmazsa olmaz bir par\u00e7as\u0131d\u0131r.<\/p>\n<h3>DigitalOcean Fonksiyonlar\u0131 ve Varsay\u0131lan Loglama Mekanizmalar\u0131<\/h3>\n<p>DigitalOcean Functions, geli\u015ftiricilerin sunucu altyap\u0131s\u0131 y\u00f6netimiyle u\u011fra\u015fmadan kodlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmalar\u0131na olanak tan\u0131yan sunucusuz bir platformdur. Bir fonksiyonu da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda, bu fonksiyonun <code>stdout<\/code> (standart \u00e7\u0131kt\u0131) ve <code>stderr<\/code> (standart hata) ak\u0131\u015flar\u0131na yazd\u0131\u011f\u0131 her \u015fey DigitalOcean taraf\u0131ndan yakalan\u0131r ve kontrol panelinizde g\u00f6r\u00fcnt\u00fclenebilir hale gelir.<\/p>\n<h4>Varsay\u0131lan Loglaman\u0131n Avantajlar\u0131 ve S\u0131n\u0131rl\u0131l\u0131klar\u0131<\/h4>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>Kolay Eri\u015fim:<\/strong> Fonksiyonunuzun kontrol paneli \u00fczerinden an\u0131nda loglara eri\u015febilirsiniz.<br \/>\n*   <strong>H\u0131zl\u0131 Hata Ay\u0131klama:<\/strong> Geli\u015ftirme a\u015famas\u0131nda veya k\u00fc\u00e7\u00fck sorunlar\u0131 h\u0131zl\u0131ca tespit etmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <strong>S\u0131f\u0131r Kurulum:<\/strong> Ek bir yap\u0131land\u0131rma gerektirmez, do\u011frudan kullan\u0131ma haz\u0131rd\u0131r.<\/p>\n<p><strong>S\u0131n\u0131rl\u0131l\u0131klar\u0131:<\/strong><\/p>\n<p>*   <strong>S\u0131n\u0131rl\u0131 Saklama S\u00fcresi:<\/strong> DigitalOcean&#8217;\u0131n varsay\u0131lan log saklama politikalar\u0131, genellikle daha uzun s\u00fcreli analizler i\u00e7in yeterli olmayabilir.<br \/>\n*   <strong>Merkeziyet\u00e7ilik Eksikli\u011fi:<\/strong> Birden fazla fonksiyonunuz veya mikroservisiniz oldu\u011funda, her birinin loglar\u0131n\u0131 ayr\u0131 ayr\u0131 kontrol panelinden incelemek zaman al\u0131c\u0131 ve verimsizdir.<br \/>\n*   <strong>S\u0131n\u0131rl\u0131 Arama ve Filtreleme:<\/strong> Kontrol panelindeki arama yetenekleri, karma\u015f\u0131k sorgular veya desen e\u015fle\u015ftirmeleri i\u00e7in yeterli olmayabilir.<br \/>\n*   <strong>Uyar\u0131 Mekanizmas\u0131 Yoksunlu\u011fu:<\/strong> Belirli bir log deseni veya hata seviyesi olu\u015ftu\u011funda otomatik bildirimler almak zordur.<br \/>\n*   <strong>Geli\u015fmi\u015f Analiz Eksikli\u011fi:<\/strong> Loglardan metrik \u00e7\u0131karma, trend analizi veya g\u00f6rselle\u015ftirme gibi geli\u015fmi\u015f \u00f6zellikler sunmaz.<br \/>\n*   <strong>Geli\u015fmi\u015f G\u00fcvenlik ve Uyum:<\/strong> Uzun s\u00fcreli ar\u015fivleme, \u015fifreleme ve eri\u015fim kontrol\u00fc gibi uyumluluk gereksinimlerini kar\u015f\u0131lamak zor olabilir.<\/p>\n<p>Bu s\u0131n\u0131rlamalar, \u00f6zellikle \u00fcretim ortam\u0131nda \u00e7al\u0131\u015fan kritik uygulamalar i\u00e7in harici bir loglama \u00e7\u00f6z\u00fcm\u00fcn\u00fc zorunlu k\u0131lar.<\/p>\n<h3>Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetimiz: Neden Loglamaya \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>Hayalimizdeki do\u011fum g\u00fcn\u00fc hat\u0131rlatma hizmeti, kullan\u0131c\u0131lar\u0131n do\u011fum g\u00fcn\u00fc tarihlerini kaydetti\u011fi ve belirlenen bir g\u00fcn ve saatte otomatik olarak hat\u0131rlatma mesajlar\u0131 (\u00f6rne\u011fin e-posta, SMS veya anl\u0131k bildirim) g\u00f6nderen bir sistemdir. Bu hizmet, DigitalOcean Functions, bir Managed Database (\u00f6rne\u011fin PostgreSQL) ve belki de bir API Gateway tetikleyicisi ile olu\u015fturulabilir.<\/p>\n<p>Bu serviste loglanmas\u0131 gereken baz\u0131 kritik olaylar \u015funlard\u0131r:<\/p>\n<p>*   <strong>Kullan\u0131c\u0131 Kay\u0131tlar\u0131:<\/strong> Yeni bir kullan\u0131c\u0131n\u0131n sisteme kaydedilmesi.<br \/>\n*   <strong>Hat\u0131rlatma Olu\u015fturma\/G\u00fcncelleme:<\/strong> Bir kullan\u0131c\u0131n\u0131n yeni bir do\u011fum g\u00fcn\u00fc hat\u0131rlatmas\u0131 eklemesi veya mevcut birini de\u011fi\u015ftirmesi.<br \/>\n*   <strong>Planlanm\u0131\u015f G\u00f6rev Ba\u015flatma:<\/strong> Hat\u0131rlatma g\u00f6nderme i\u015flemini tetikleyen zamanlanm\u0131\u015f fonksiyonun (cron job) her \u00e7al\u0131\u015fmaya ba\u015flamas\u0131.<br \/>\n*   <strong>Mesaj G\u00f6nderim Durumu:<\/strong> Her bir hat\u0131rlatma mesaj\u0131n\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde g\u00f6nderilip g\u00f6nderilmedi\u011fi.<br \/>\n*   <strong>Hata Durumlar\u0131:<\/strong> Mesaj g\u00f6nderme API&#8217;sinde olu\u015fan hatalar, veritaban\u0131 ba\u011flant\u0131 sorunlar\u0131, veri do\u011frulama hatalar\u0131.<br \/>\n*   <strong>Performans Metrikleri:<\/strong> Bir hat\u0131rlatma i\u015fleminin ne kadar s\u00fcrd\u00fc\u011f\u00fc.<br \/>\n*   <strong>API \u00c7a\u011fr\u0131lar\u0131:<\/strong> D\u0131\u015f servislerle (SMS\/e-posta sa\u011flay\u0131c\u0131lar\u0131) yap\u0131lan t\u00fcm \u00e7a\u011fr\u0131lar\u0131n detaylar\u0131.<\/p>\n<p><strong>\u00d6rnek Senaryolar:<\/strong><\/p>\n<p>*   &#8220;X kullan\u0131c\u0131s\u0131na neden do\u011fum g\u00fcn\u00fc hat\u0131rlatmas\u0131 gitmedi?&#8221; Loglarda, ilgili kullan\u0131c\u0131n\u0131n <code>user_id<\/code>&#8216;sine g\u00f6re arama yaparak mesaj g\u00f6nderme fonksiyonunun hata loglar\u0131n\u0131 bulabiliriz.<br \/>\n*   &#8220;Sistem son 24 saatte ka\u00e7 tane hat\u0131rlatma g\u00f6nderdi ve bunlardan ka\u00e7\u0131 ba\u015far\u0131s\u0131z oldu?&#8221; Loglar\u0131 analiz ederek bu istatistikleri \u00e7\u0131karabiliriz.<br \/>\n*   &#8220;Hat\u0131rlatma g\u00f6nderme i\u015flemi ortalama ne kadar s\u00fcr\u00fcyor?&#8221; Loglarda kaydedilen i\u015flem s\u00fcreleri ile performans darbo\u011fazlar\u0131n\u0131 tespit edebiliriz.<\/p>\n<p>Bu t\u00fcr sorular\u0131n cevaplar\u0131n\u0131 bulmak ve sistemin sa\u011fl\u0131\u011f\u0131n\u0131 s\u00fcrekli izlemek i\u00e7in g\u00fc\u00e7l\u00fc bir loglama altyap\u0131s\u0131na ihtiyac\u0131m\u0131z vard\u0131r.<\/p>\n<h3>Harici Loglaman\u0131n Avantajlar\u0131: Neden S\u0131n\u0131rlar\u0131 A\u015fmal\u0131y\u0131z?<\/h3>\n<p>DigitalOcean Functions&#8217;\u0131n varsay\u0131lan loglama mekanizmalar\u0131n\u0131n \u00f6tesine ge\u00e7mek, uygulamalar\u0131n\u0131z\u0131n \u00fcretim ortam\u0131ndaki kararl\u0131l\u0131\u011f\u0131n\u0131 ve y\u00f6netilebilirli\u011fini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131r\u0131r. \u0130\u015fte harici loglaman\u0131n ba\u015fl\u0131ca avantajlar\u0131:<\/p>\n<h4>Merkezi Log Y\u00f6netimi<\/h4>\n<p>T\u00fcm fonksiyonlar\u0131n\u0131z\u0131n, hatta farkl\u0131 DigitalOcean projelerindeki veya di\u011fer bulut sa\u011flay\u0131c\u0131lar\u0131ndaki uygulamalar\u0131n\u0131z\u0131n loglar\u0131n\u0131 tek bir platformda toplaman\u0131z\u0131 sa\u011flar. Bu, mikroservis mimarilerinde veya birden fazla sunucusuz fonksiyonun birlikte \u00e7al\u0131\u015ft\u0131\u011f\u0131 karma\u015f\u0131k sistemlerde sorun gidermeyi ve izlemeyi basitle\u015ftirir.<\/p>\n<h4>Uzun S\u00fcreli Saklama ve Uyumluluk<\/h4>\n<p>Harici loglama \u00e7\u00f6z\u00fcmleri, genellikle uzun s\u00fcreli log saklama se\u00e7enekleri sunar (aylarca, hatta y\u0131llarca). Bu, ge\u00e7mi\u015f olaylar\u0131 incelemek, trendleri analiz etmek ve yasal uyumluluk gereksinimlerini (\u00f6rne\u011fin, GDPR, KVKK, HIPAA) kar\u015f\u0131lamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Geli\u015fmi\u015f Arama ve Filtreleme<\/h4>\n<p>Log toplama platformlar\u0131, log verileri \u00fczerinde karma\u015f\u0131k sorgular \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. Anahtar kelimeler, zaman aral\u0131klar\u0131, log seviyeleri, belirli alanlar (\u00f6rne\u011fin, <code>user_id<\/code>, <code>request_id<\/code>) veya d\u00fczenli ifadeler kullanarak loglar\u0131 filtreleyebilir, belirli sorunlar\u0131 veya desenleri h\u0131zl\u0131ca tespit edebilirsiniz.<\/p>\n<h4>Performans \u0130zleme ve Metrikler<\/h4>\n<p>Loglar, uygulaman\u0131z\u0131n performans\u0131 hakk\u0131nda de\u011ferli bilgiler i\u00e7erir. Harici loglama ara\u00e7lar\u0131, bu loglardan metrikler \u00e7\u0131kararak (\u00f6rne\u011fin, hata oran\u0131, i\u015flem s\u00fcresi, belirli bir olay\u0131n s\u0131kl\u0131\u011f\u0131) g\u00f6sterge tablolar\u0131 (dashboards) olu\u015fturman\u0131za olanak tan\u0131r. Bu sayede, uygulaman\u0131z\u0131n genel sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 g\u00f6rsel olarak izleyebilirsiniz.<\/p>\n<h4>Otomatik Uyar\u0131lar ve Bildirimler<\/h4>\n<p>Belirli log desenleri (\u00f6rne\u011fin, artan hata loglar\u0131, belirli bir anahtar kelimenin g\u00f6r\u00fcnmesi) veya metrik e\u015fikleri a\u015f\u0131ld\u0131\u011f\u0131nda otomatik uyar\u0131lar ve bildirimler ayarlayabilirsiniz. Bu uyar\u0131lar Slack, e-posta, PagerDuty gibi kanallar arac\u0131l\u0131\u011f\u0131yla ilgili ekiplere g\u00f6nderilerek sorunlara proaktif bir \u015fekilde m\u00fcdahale edilmesini sa\u011flar.<\/p>\n<h4>G\u00fcvenlik Denetimi ve Adli Analiz<\/h4>\n<p>Loglar, g\u00fcvenlik olaylar\u0131n\u0131 tespit etmek ve adli analizler yapmak i\u00e7in hayati \u00f6neme sahiptir. Harici loglama \u00e7\u00f6z\u00fcmleri, anormal eri\u015fim desenlerini, yetkisiz giri\u015fimleri veya di\u011fer g\u00fcvenlik ihlallerini belirlemenize yard\u0131mc\u0131 olabilir.<\/p>\n<h3>Harici Loglama \u00c7\u00f6z\u00fcm\u00fc Se\u00e7enekleri<\/h3>\n<p>Piyasada bir\u00e7ok harici loglama \u00e7\u00f6z\u00fcm\u00fc bulunmaktad\u0131r. Her birinin farkl\u0131 \u00f6zellikleri, fiyatland\u0131rma modelleri ve kullan\u0131m alanlar\u0131 vard\u0131r:<\/p>\n<p>*   <strong>Logtail:<\/strong> DigitalOcean ile do\u011frudan entegrasyon sunan, kullan\u0131m\u0131 kolay ve uygun maliyetli bir log y\u00f6netimi platformudur. K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler i\u00e7in idealdir.<br \/>\n*   <strong>Grafana Loki:<\/strong> Prometheus&#8217;tan ilham alan, &#8220;sadece loglar&#8221; felsefesiyle tasarlanm\u0131\u015f a\u00e7\u0131k kaynakl\u0131 bir log toplama sistemidir. Loglar\u0131 metrikler gibi indeksleyerek verimli bir \u015fekilde sorgulaman\u0131za olanak tan\u0131r. Kendi kendine bar\u0131nd\u0131r\u0131labilir veya y\u00f6netilen hizmetler arac\u0131l\u0131\u011f\u0131yla kullan\u0131labilir.<br \/>\n*   <strong>Elastic Stack (ELK):<\/strong> Elasticsearch (arama motoru), Logstash (veri i\u015fleme) ve Kibana (g\u00f6rselle\u015ftirme) bile\u015fenlerinden olu\u015fan g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcmd\u00fcr. B\u00fcy\u00fck veri hacimleri ve karma\u015f\u0131k analizler i\u00e7in uygundur, ancak kurulumu ve y\u00f6netimi daha karma\u015f\u0131kt\u0131r.<br \/>\n*   <strong>Datadog, Splunk, New Relic:<\/strong> Kapsaml\u0131 izleme, log y\u00f6netimi, APM (Uygulama Performans Y\u00f6netimi) ve g\u00fcvenlik \u00f6zelliklerini bir araya getiren kurumsal d\u00fczeyde \u00e7\u00f6z\u00fcmlerdir. Genellikle daha y\u00fcksek maliyetlidirler ve b\u00fcy\u00fck organizasyonlar i\u00e7in tasarlanm\u0131\u015flard\u0131r.<\/p>\n<p>Bu makalede, DigitalOcean Functions ile kolay entegrasyonu ve kullan\u0131m kolayl\u0131\u011f\u0131 nedeniyle <strong>Logtail<\/strong>&#8216;i tercih edece\u011fiz.<\/p>\n<h3>Logtail ile Harici Loglama Kurulumu (\u00d6rnek Uygulama)<\/h3>\n<p>Logtail, sundu\u011fu basit API&#8217;ler ve kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ile sunucusuz fonksiyonlardan log toplamak i\u00e7in harika bir se\u00e7enektir. \u0130\u015fte do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisimiz i\u00e7in Logtail entegrasyonu ad\u0131mlar\u0131:<\/p>\n<h4>Ad\u0131m 1: Logtail Hesab\u0131 Olu\u015fturma ve Kaynak (Source) Tan\u0131mlama<\/h4>\n<p>1.  <strong>Logtail Hesab\u0131 Olu\u015fturun:<\/strong> logtail.com adresine gidin ve \u00fccretsiz bir hesap olu\u015fturun.<br \/>\n2.  <strong>Yeni Kaynak Olu\u015fturun:<\/strong> Logtail kontrol panelinizde &#8220;Sources&#8221; (Kaynaklar) b\u00f6l\u00fcm\u00fcne gidin ve &#8220;Add Source&#8221; (Kaynak Ekle) butonuna t\u0131klay\u0131n.<br \/>\n3.  <strong>HTTP Source Se\u00e7in:<\/strong> Sunucusuz fonksiyonumuzdan loglar\u0131 HTTP POST iste\u011fiyle g\u00f6nderece\u011fimiz i\u00e7in &#8220;HTTP Source&#8221; se\u00e7ene\u011fini tercih edin.<br \/>\n4.  <strong>Kaynak Ad\u0131 ve Ayarlar\u0131:<\/strong> Kayna\u011f\u0131n\u0131za anlaml\u0131 bir ad verin (\u00f6rne\u011fin, &#8220;DO-Birthday-Reminder-Functions&#8221;). Logtail size bir HTTP endpoint URL&#8217;si ve bir API anahtar\u0131 (varsa) sa\u011flayacakt\u0131r. Bu bilgileri bir yere not edin, \u00e7\u00fcnk\u00fc fonksiyon kodumuzda kullanaca\u011f\u0131z. Genellikle, Logtail&#8217;in HTTP Source&#8217;u i\u00e7in do\u011frudan bir URL sa\u011flan\u0131r ve bu URL&#8217;ye JSON format\u0131nda loglar g\u00f6nderilir.<\/p>\n<h4>Ad\u0131m 2: DigitalOcean Fonksiyonunda Log G\u00f6nderme<\/h4>\n<p>\u015eimdi DigitalOcean fonksiyonumuzun kodunu, loglar\u0131 Logtail&#8217;e g\u00f6nderecek \u015fekilde g\u00fcncelleyelim. Bu \u00f6rnekte Python kullanaca\u011f\u0131z, ancak konsept Node.js veya di\u011fer diller i\u00e7in de benzerdir.<\/p>\n<pre><code class=\"language-python\">import requests\nimport os\nimport json\nimport logging\nfrom datetime import datetime\n\n<h2>Logtail endpoint URL'sini DigitalOcean Functions ortam de\u011fi\u015fkenlerinden alaca\u011f\u0131z.<\/h2>\n<h2>Bu de\u011fi\u015fkenleri fonksiyonu da\u011f\u0131t\u0131rken ayarlaman\u0131z gerekecek.<\/h2>\nLOGTAIL_ENDPOINT = os.environ.get(\"LOGTAIL_ENDPOINT\")\n\n<h2>Python'\u0131n standart logging mod\u00fcl\u00fcn\u00fc kullanarak loglar\u0131 y\u00f6netelim.<\/h2>\n<h2>Harici loglama ba\u015far\u0131s\u0131z olsa bile, DigitalOcean'\u0131n varsay\u0131lan loglama mekanizmas\u0131 \u00e7al\u0131\u015fmaya devam edecektir.<\/h2>\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.INFO) # Varsay\u0131lan log seviyesini INFO olarak ayarla\n\ndef send_log_to_logtail(log_data):\n    \"\"\"\n    Log verilerini Logtail'e HTTP POST iste\u011fi olarak g\u00f6nderir.\n    \"\"\"\n    if not LOGTAIL_ENDPOINT:\n        logger.warning(\"LOGTAIL_ENDPOINT ortam de\u011fi\u015fkeni ayarlanmam\u0131\u015f. Harici loglama atlan\u0131yor.\")\n        return\n\n    headers = {\n        \"Content-Type\": \"application\/json\"\n    }\n    \n    try:\n        # Logtail'e JSON format\u0131nda log g\u00f6nderiyoruz.\n        # Timeout eklemek, a\u011f sorunlar\u0131nda fonksiyonun \u00e7ok uzun s\u00fcre tak\u0131lmas\u0131n\u0131 \u00f6nler.\n        response = requests.post(LOGTAIL_ENDPOINT, data=json.dumps(log_data), headers=headers, timeout=2)\n        response.raise_for_status() # HTTP hatalar\u0131n\u0131 yakala (4xx veya 5xx)\n        # logger.info(f\"Log Logtail'e ba\u015far\u0131yla g\u00f6nderildi: {log_data.get('message')}\") # Bu logu s\u00fcrekli basmak g\u00fcr\u00fclt\u00fc yapabilir.\n    except requests.exceptions.Timeout:\n        logger.error(f\"Logtail'e log g\u00f6nderirken zaman a\u015f\u0131m\u0131 hatas\u0131 olu\u015ftu.\")\n    except requests.exceptions.ConnectionError as e:\n        logger.error(f\"Logtail'e log g\u00f6nderirken ba\u011flant\u0131 hatas\u0131 olu\u015ftu: {e}\")\n    except requests.exceptions.RequestException as e:\n        logger.error(f\"Logtail'e log g\u00f6nderirken bilinmeyen bir hata olu\u015ftu: {e}\")\n    except Exception as e:\n        logger.error(f\"send_log_to_logtail fonksiyonunda beklenmeyen bir hata: {e}\")\n\ndef main(args):\n    \"\"\"\n    DigitalOcean Function'\u0131n ana giri\u015f noktas\u0131.\n    Bir do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisi \u00f6rne\u011fini sim\u00fcle eder.\n    \"\"\"\n    user_id = args.get(\"user_id\", \"anonim\")\n    birthday_date_str = args.get(\"birthday_date\", \"bilinmiyor\")\n    \n    # Her i\u015flem i\u00e7in benzersiz bir transaction ID olu\u015fturmak, loglar\u0131 ili\u015fkilendirmeyi kolayla\u015ft\u0131r\u0131r.\n    transaction_id = str(uuid.uuid4()) # uuid mod\u00fcl\u00fcn\u00fc import etmeyi unutmay\u0131n: import uuid\n\n    # \u0130\u015flem ba\u015flang\u0131c\u0131n\u0131 logla\n    initial_log_entry = {\n        \"timestamp\": datetime.utcnow().isoformat() + \"Z\", # UTC zaman damgas\u0131\n        \"level\": \"INFO\",\n        \"message\": f\"Do\u011fum g\u00fcn\u00fc hat\u0131rlatma i\u015flemi ba\u015flat\u0131ld\u0131.\",\n        \"service\": \"birthday-reminder-service\",\n        \"function_name\": \"send-birthday-reminder\",\n        \"user_id\": user_id,\n        \"birthday_date\": birthday_date_str,\n        \"event_type\": \"reminder_process_start\",\n        \"transaction_id\": transaction_id\n    }\n    logger.info(json.dumps(initial_log_entry)) # DO'nun varsay\u0131lan loglamas\u0131 i\u00e7in de JSON bas\u0131yoruz\n    send_log_to_logtail(initial_log_entry)\n    \n    try:\n        # --- Hat\u0131rlatma g\u00f6nderme mant\u0131\u011f\u0131 burada ba\u015flar ---\n        # \u00d6rne\u011fin, bir veritaban\u0131ndan kullan\u0131c\u0131 bilgilerini \u00e7ekme\n        # Bir d\u0131\u015f API'ye (SMS\/e-posta servisi) \u00e7a\u011fr\u0131 yapma\n        \n        # Sim\u00fclasyon: Rastgele bir ba\u015far\u0131\/ba\u015far\u0131s\u0131zl\u0131k durumu\n        import random\n        if random.random() < 0.2: # %20 ihtimalle ba\u015far\u0131s\u0131z olsun\n            raise ValueError(\"Mesaj g\u00f6nderme servisi ge\u00e7ici olarak kullan\u0131lam\u0131yor.\")\n            \n        # Sim\u00fclasyon: Ba\u015far\u0131l\u0131 bir g\u00f6nderim oldu\u011funu varsayal\u0131m\n        sent_message_id = \"msg_\" + str(uuid.uuid4())[:8] # \u00d6rnek mesaj ID\n        \n        # --- Hat\u0131rlatma g\u00f6nderme mant\u0131\u011f\u0131 burada biter ---\n\n        # Ba\u015far\u0131l\u0131 g\u00f6nderimi logla\n        success_log_entry = {\n            \"timestamp\": datetime.utcnow().isoformat() + \"Z\",\n            \"level\": \"INFO\",\n            \"message\": f\"Do\u011fum g\u00fcn\u00fc hat\u0131rlatma ba\u015far\u0131yla g\u00f6nderildi.\",\n            \"service\": \"birthday-reminder-service\",\n            \"function_name\": \"send-birthday-reminder\",\n            \"user_id\": user_id,\n            \"birthday_date\": birthday_date_str,\n            \"event_type\": \"reminder_sent_success\",\n            \"transaction_id\": transaction_id,\n            \"sent_message_id\": sent_message_id,\n            \"external_api_status\": 200 # D\u0131\u015f API'den d\u00f6nen durum kodu\n        }\n        logger.info(json.dumps(success_log_entry))\n        send_log_to_logtail(success_log_entry)\n        \n        return {\"statusCode\": 200, \"body\": \"Reminder sent successfully.\"}\n\n    except Exception as e:\n        # Hata durumunu logla\n        error_log_entry = {\n            \"timestamp\": datetime.utcnow().isoformat() + \"Z\",\n            \"level\": \"ERROR\",\n            \"message\": f\"Do\u011fum g\u00fcn\u00fc hat\u0131rlatma g\u00f6nderilirken hata olu\u015ftu: {str(e)}\",\n            \"service\": \"birthday-reminder-service\",\n            \"function_name\": \"send-birthday-reminder\",\n            \"user_id\": user_id,\n            \"birthday_date\": birthday_date_str,\n            \"event_type\": \"reminder_send_failure\",\n            \"transaction_id\": transaction_id,\n            \"error_details\": str(e),\n            \"stack_trace\": traceback.format_exc() # traceback mod\u00fcl\u00fcn\u00fc import etmeyi unutmay\u0131n: import traceback\n        }\n        logger.error(json.dumps(error_log_entry))\n        send_log_to_logtail(error_log_entry)\n        \n        return {\"statusCode\": 500, \"body\": f\"Error sending reminder: {str(e)}\"}<\/code><\/pre>\n<p><strong>Kod A\u00e7\u0131klamas\u0131 ve \u00d6nemli Notlar:<\/strong><\/p>\n<p>1.  <strong>Gerekli K\u00fct\u00fcphaneler:<\/strong> <code>requests<\/code> k\u00fct\u00fcphanesini kullanabilmek i\u00e7in DigitalOcean Functions uygulaman\u0131z\u0131n <code>requirements.txt<\/code> dosyas\u0131na <code>requests<\/code> eklemeniz gerekmektedir. Ayr\u0131ca <code>uuid<\/code> ve <code>traceback<\/code> mod\u00fcllerini de import etmelisiniz.<br \/>\n2.  <strong>Ortam De\u011fi\u015fkenleri:<\/strong> <code>LOGTAIL_ENDPOINT<\/code> gibi hassas veya yap\u0131land\u0131rma bilgilerini do\u011frudan koda yazmak yerine DigitalOcean Functions'\u0131n ortam de\u011fi\u015fkenleri (Environment Variables) \u00f6zelli\u011fi ile y\u00f6netmek en iyi uygulamad\u0131r. Fonksiyonunuzu da\u011f\u0131t\u0131rken bu de\u011fi\u015fkeni ayarlamal\u0131s\u0131n\u0131z.<br \/>\n3.  <strong>Yap\u0131land\u0131r\u0131lm\u0131\u015f Loglama (Structured Logging):<\/strong> Loglar\u0131 JSON format\u0131nda g\u00f6nderiyoruz. Bu, Logtail gibi ara\u00e7lar\u0131n loglar\u0131 daha kolay ayr\u0131\u015ft\u0131rmas\u0131n\u0131, indekslemesini ve sorgulamas\u0131n\u0131 sa\u011flar. Her log kayd\u0131na <code>timestamp<\/code>, <code>level<\/code>, <code>message<\/code>, <code>service<\/code>, <code>function_name<\/code>, <code>user_id<\/code>, <code>transaction_id<\/code> gibi anlaml\u0131 alanlar eklemek, loglar\u0131 daha zengin ve arama yap\u0131labilir hale getirir.<br \/>\n4.  <strong>Hata Y\u00f6netimi:<\/strong> <code>try-except<\/code> bloklar\u0131 kullanarak olas\u0131 hatalar\u0131 yakal\u0131yor ve hata durumunda detayl\u0131 loglar g\u00f6nderiyoruz. \u00d6zellikle <code>stack_trace<\/code> eklemek, hatan\u0131n k\u00f6k nedenini bulmada \u00e7ok yard\u0131mc\u0131 olur.<br \/>\n5.  <strong>Asenkron Loglama (Performans Notu):<\/strong> <code>requests.post<\/code> \u00e7a\u011fr\u0131s\u0131 senkrondur ve log g\u00f6nderme i\u015flemi a\u011f gecikmesi nedeniyle fonksiyonun \u00e7al\u0131\u015fma s\u00fcresini bir miktar uzatabilir. Kritik performans gereksinimleri olan durumlarda, loglar\u0131 asenkron olarak g\u00f6ndermek i\u00e7in farkl\u0131 yakla\u015f\u0131mlar (\u00f6rne\u011fin, bir kuyru\u011fa log yaz\u0131p ba\u015fka bir fonksiyonun bu kuyru\u011fu okuyarak Logtail'e g\u00f6ndermesi) d\u00fc\u015f\u00fcn\u00fclebilir. Ancak \u00e7o\u011fu senaryo i\u00e7in do\u011frudan HTTP POST yeterlidir. <code>timeout<\/code> parametresi, olas\u0131 tak\u0131lmalar\u0131 engellemek i\u00e7in \u00f6nemlidir.<br \/>\n6.  <strong><code>logger.info(json.dumps(...))<\/code>:<\/strong> Bu sat\u0131r, hem Logtail'e log g\u00f6nderirken hem de DigitalOcean'\u0131n varsay\u0131lan loglama mekanizmas\u0131na JSON format\u0131nda log yaz\u0131lmas\u0131n\u0131 sa\u011flar. B\u00f6ylece hem DO kontrol panelinde hem de Logtail'de yap\u0131land\u0131r\u0131lm\u0131\u015f loglar\u0131 g\u00f6rebilirsiniz.<\/p>\n<h4>Ad\u0131m 3: Logtail Aray\u00fcz\u00fcnde Loglar\u0131 G\u00f6r\u00fcnt\u00fcleme ve Analiz Etme<\/h4>\n<p>Fonksiyonunuzu da\u011f\u0131tt\u0131ktan ve \u00e7al\u0131\u015ft\u0131rmaya ba\u015flad\u0131ktan sonra, Logtail kontrol panelinize geri d\u00f6n\u00fcn.<\/p>\n<p>1.  <strong>Loglar\u0131 G\u00f6r\u00fcnt\u00fcleme:<\/strong> \"Live Tail\" veya \"Logs\" b\u00f6l\u00fcm\u00fcnde, DigitalOcean fonksiyonunuzdan gelen loglar\u0131 ger\u00e7ek zamanl\u0131 olarak g\u00f6rmeye ba\u015flayacaks\u0131n\u0131z. JSON format\u0131nda g\u00f6nderdi\u011finiz loglar, Logtail taraf\u0131ndan otomatik olarak ayr\u0131\u015ft\u0131r\u0131lacak ve her alan ayr\u0131 bir s\u00fctun olarak g\u00f6r\u00fcnt\u00fclenecektir.<br \/>\n2.  <strong>Arama ve Filtreleme:<\/strong> Logtail'in g\u00fc\u00e7l\u00fc arama ve filtreleme \u00f6zelliklerini kullanarak belirli loglar\u0131 bulabilirsiniz:<br \/>\n    *   <code>level:ERROR<\/code> ile sadece hata loglar\u0131n\u0131 g\u00f6ster.<br \/>\n    *   <code>user_id:12345<\/code> ile belirli bir kullan\u0131c\u0131ya ait loglar\u0131 bul.<br \/>\n    *   <code>message:\"hat\u0131rlatma ba\u015far\u0131yla g\u00f6nderildi\"<\/code> ile ba\u015far\u0131l\u0131 g\u00f6nderim loglar\u0131n\u0131 listele.<br \/>\n    *   <code>event_type:reminder_send_failure<\/code> ile ba\u015far\u0131s\u0131z g\u00f6nderim olaylar\u0131n\u0131 filtrele.<br \/>\n    *   Zaman aral\u0131klar\u0131na g\u00f6re filtreleme yap\u0131n.<br \/>\n3.  <strong>G\u00f6sterge Tablolar\u0131 (Dashboards):<\/strong> Logtail, loglar\u0131n\u0131zdan metrikler \u00e7\u0131kararak \u00f6zel g\u00f6sterge tablolar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. \u00d6rne\u011fin:<br \/>\n    *   Son 24 saatteki hata loglar\u0131n\u0131n say\u0131s\u0131.<br \/>\n    *   Ba\u015far\u0131l\u0131 ve ba\u015far\u0131s\u0131z hat\u0131rlatma g\u00f6nderimlerinin oran\u0131.<br \/>\n    *   Belirli bir <code>service<\/code> veya <code>function_name<\/code> i\u00e7in log hacmi.<br \/>\n4.  <strong>Uyar\u0131 Kurallar\u0131 (Alerts):<\/strong> Logtail'de uyar\u0131 kurallar\u0131 olu\u015fturarak, belirli ko\u015fullar sa\u011fland\u0131\u011f\u0131nda otomatik bildirimler alabilirsiniz. \u00d6rne\u011fin:<br \/>\n    *   Son 5 dakikada <code>level:ERROR<\/code> loglar\u0131n\u0131n say\u0131s\u0131 10'u a\u015farsa bir e-posta veya Slack bildirimi g\u00f6nder.<br \/>\n    *   <code>event_type:reminder_send_failure<\/code> loglar\u0131 belirli bir y\u00fczdeye ula\u015f\u0131rsa uyar.<\/p>\n<p>Bu \u00f6zellikler sayesinde, do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisinizin sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 s\u00fcrekli olarak izleyebilir, sorunlara h\u0131zl\u0131ca m\u00fcdahale edebilirsiniz.<\/p>\n<h3>Sunucusuz Fonksiyonlarda Loglama \u0130\u00e7in En \u0130yi Uygulamalar<\/h3>\n<p>Harici loglama \u00e7\u00f6z\u00fcm\u00fcn\u00fc kurmak sadece ilk ad\u0131md\u0131r. Etkili bir loglama stratejisi olu\u015fturmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir:<\/p>\n<h4>Yap\u0131land\u0131r\u0131lm\u0131\u015f Loglama (Structured Logging)<\/h4>\n<p>Her zaman JSON gibi yap\u0131land\u0131r\u0131lm\u0131\u015f bir formatta loglama yap\u0131n. Bu, loglar\u0131n makine taraf\u0131ndan okunmas\u0131n\u0131 ve i\u015flenmesini kolayla\u015ft\u0131r\u0131r. Anahtar-de\u011fer \u00e7iftleri, log toplama sistemlerinin verileri daha verimli bir \u015fekilde indekslemesini ve sorgulamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-json\">{\n    \"timestamp\": \"2023-10-27T10:30:00Z\",\n    \"level\": \"INFO\",\n    \"message\": \"Kullan\u0131c\u0131 kayd\u0131 ba\u015far\u0131l\u0131.\",\n    \"service\": \"user-management\",\n    \"user_id\": \"uuid-1234\",\n    \"ip_address\": \"192.168.1.1\",\n    \"event_type\": \"user_registered\"\n}<\/code><\/pre>\n<h4>Kapsaml\u0131 Ba\u011flam Bilgisi<\/h4>\n<p>Loglar\u0131n\u0131za m\u00fcmk\u00fcn oldu\u011funca fazla ba\u011flam bilgisi ekleyin. Bu, \u00f6zellikle da\u011f\u0131t\u0131lm\u0131\u015f sistemlerde bir sorunun k\u00f6k nedenini bulmak i\u00e7in hayati \u00f6neme sahiptir:<\/p>\n<p>*   <code>request_id<\/code> veya <code>transaction_id<\/code>: Bir iste\u011fin veya i\u015flemin t\u00fcm loglar\u0131n\u0131 ili\u015fkilendirmek i\u00e7in benzersiz bir kimlik.<br \/>\n*   <code>user_id<\/code>: \u0130lgili kullan\u0131c\u0131 kimli\u011fi.<br \/>\n*   <code>function_name<\/code> veya <code>service_name<\/code>: Logu \u00fcreten fonksiyon veya servis.<br \/>\n*   <code>version<\/code>: Uygulama veya fonksiyonun s\u00fcr\u00fcm\u00fc.<br \/>\n*   <code>environment<\/code>: <code>dev<\/code>, <code>staging<\/code>, <code>prod<\/code> gibi ortam bilgisi.<\/p>\n<h4>Log Seviyeleri<\/h4>\n<p>Log seviyelerini do\u011fru ve tutarl\u0131 bir \u015fekilde kullan\u0131n:<\/p>\n<p>*   <strong>DEBUG:<\/strong> Geli\u015ftirme s\u0131ras\u0131nda detayl\u0131 hata ay\u0131klama bilgileri i\u00e7in. \u00dcretimde genellikle kapal\u0131 tutulur.<br \/>\n*   <strong>INFO:<\/strong> Uygulaman\u0131n normal \u00e7al\u0131\u015fmas\u0131n\u0131 g\u00f6steren genel bilgiler (\u00f6rn. \"\u0130\u015flem ba\u015flat\u0131ld\u0131\", \"Mesaj g\u00f6nderildi\").<br \/>\n*   <strong>WARN:<\/strong> Potansiyel sorunlar\u0131 veya beklenmeyen durumlar\u0131 g\u00f6sterir (\u00f6rn. \"API \u00e7a\u011fr\u0131s\u0131 yava\u015flad\u0131\", \"Veritaban\u0131 ba\u011flant\u0131s\u0131 denemesi ba\u015far\u0131s\u0131z oldu\"). Uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131n\u0131 engellemeyen ancak dikkat edilmesi gereken durumlar.<br \/>\n*   <strong>ERROR:<\/strong> Uygulaman\u0131n bir k\u0131sm\u0131n\u0131n ba\u015far\u0131s\u0131z oldu\u011fu, ancak kurtar\u0131labilecek hatalar (\u00f6rn. \"Mesaj g\u00f6nderilemedi\", \"Veritaban\u0131 sorgusu ba\u015far\u0131s\u0131z oldu\").<br \/>\n*   <strong>CRITICAL:<\/strong> Uygulaman\u0131n veya sistemin tamamen \u00e7\u00f6kmesine neden olan veya kritik bir g\u00fcvenlik ihlali gibi ciddi hatalar.<\/p>\n<h4>Hata Y\u00f6netimi ve Stack Trace<\/h4>\n<p>Hata loglar\u0131, hata mesaj\u0131n\u0131n yan\u0131 s\u0131ra, hata t\u00fcr\u00fcn\u00fc, hata kodunu ve \u00f6zellikle <code>stack_trace<\/code>'i i\u00e7ermelidir. <code>stack_trace<\/code>, hatan\u0131n kodun hangi b\u00f6l\u00fcm\u00fcnde olu\u015ftu\u011funu g\u00f6stererek hata ay\u0131klamay\u0131 h\u0131zland\u0131r\u0131r.<\/p>\n<h4>Hassas Verilerin Korunmas\u0131<\/h4>\n<p>Loglara asla hassas verileri (parola, kredi kart\u0131 numaralar\u0131, ki\u015fisel kimlik bilgileri vb.) a\u00e7\u0131k metin olarak yazmay\u0131n. Bu verileri ya tamamen hari\u00e7 tutun ya da maskeleme\/anonimle\u015ftirme teknikleri kullan\u0131n. G\u00fcvenlik ve uyumluluk a\u00e7\u0131s\u0131ndan bu son derece \u00f6nemlidir.<\/p>\n<h4>Maliyet Y\u00f6netimi<\/h4>\n<p>Her log kayd\u0131, depolama ve i\u015fleme maliyeti anlam\u0131na gelir. \u00c7ok fazla \"g\u00fcr\u00fclt\u00fcl\u00fc\" log g\u00f6ndermek maliyetleri art\u0131rabilir. Yaln\u0131zca de\u011ferli ve eyleme d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir bilgileri loglamaya odaklan\u0131n. DEBUG loglar\u0131n\u0131 \u00fcretimde kapatmak veya sadece belirli durumlarda etkinle\u015ftirmek iyi bir stratejidir.<\/p>\n<h3>G\u00fcvenlik ve Uyum (Compliance) Perspektifi<\/h3>\n<p>Harici loglama sadece hata ay\u0131klama i\u00e7in de\u011fil, ayn\u0131 zamanda g\u00fcvenlik ve yasal uyumluluk i\u00e7in de kritiktir.<\/p>\n<p>*   <strong>Veri \u015eifreleme:<\/strong> Loglar\u0131n\u0131z\u0131 aktar\u0131mda (HTTPS\/TLS) ve depolamada (at-rest encryption) \u015fifreledi\u011finizden emin olun. \u00c7o\u011fu modern loglama hizmeti bunu varsay\u0131lan olarak sunar.<br \/>\n*   <strong>Eri\u015fim Kontrol\u00fc:<\/strong> Loglama platformunuza kimlerin eri\u015febilece\u011fini s\u0131k\u0131 bir \u015fekilde kontrol edin. Rol tabanl\u0131 eri\u015fim kontrol\u00fc (RBAC) uygulayarak, her kullan\u0131c\u0131n\u0131n yaln\u0131zca ihtiyac\u0131 olan verilere eri\u015fmesini sa\u011flay\u0131n.<br \/>\n*   <strong>Veri Saklama Politikalar\u0131:<\/strong> Yasal ve i\u015f gereksinimlerinize uygun veri saklama politikalar\u0131 belirleyin. Baz\u0131 loglar\u0131n belirli bir s\u00fcre saklanmas\u0131 gerekebilirken, baz\u0131lar\u0131 daha k\u0131sa s\u00fcrede silinebilir.<br \/>\n*   <strong>Denetim \u0130zleri (Audit Trails):<\/strong> Loglar, kimin ne zaman hangi i\u015flemi yapt\u0131\u011f\u0131n\u0131 g\u00f6steren denetim izleri sa\u011flar. Bu, g\u00fcvenlik ihlallerini tespit etmede ve i\u00e7 denetimlerde kullan\u0131l\u0131r.<\/p>\n<h3>Sonu\u00e7: G\u00fc\u00e7l\u00fc ve \u0130zlenebilir Bir Gelecek<\/h3>\n<p>\"12 Days of DigitalOcean\" serisinin bu alt\u0131nc\u0131 g\u00fcn\u00fcnde, DigitalOcean Functions tabanl\u0131 do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisimiz i\u00e7in harici loglaman\u0131n neden kritik oldu\u011funu ve Logtail gibi bir ara\u00e7la nas\u0131l kolayca entegre edilebilece\u011fini \u00f6\u011frendik. Sunucusuz mimariler, geli\u015ftiricilere b\u00fcy\u00fck esneklik ve \u00f6l\u00e7eklenebilirlik sunarken, izlenebilirlik ve hata ay\u0131klama konusunda yeni zorluklar da beraberinde getirir. Harici loglama, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Yap\u0131land\u0131r\u0131lm\u0131\u015f loglama, kapsaml\u0131 ba\u011flam bilgisi, do\u011fru log seviyelerinin kullan\u0131m\u0131 ve hassas veri korumas\u0131 gibi en iyi uygulamalar\u0131 takip ederek, uygulamalar\u0131n\u0131z\u0131n \u00fcretim ortam\u0131nda daha g\u00fcvenilir, daha y\u00f6netilebilir ve daha kolay izlenebilir olmas\u0131n\u0131 sa\u011flayabilirsiniz. Art\u0131k do\u011fum g\u00fcn\u00fc hat\u0131rlatma servisinizin sadece \u00e7al\u0131\u015fmakla kalmay\u0131p, ayn\u0131 zamanda her ad\u0131mda ne yapt\u0131\u011f\u0131n\u0131 da bileceksiniz. Bu sayede, olas\u0131 sorunlara proaktif bir \u015fekilde m\u00fcdahale edebilir ve kullan\u0131c\u0131lar\u0131n\u0131za kesintisiz bir deneyim sunabilirsiniz.<\/p>\n<p>DigitalOcean'daki yolculu\u011funuzda bir sonraki ad\u0131ma ge\u00e7mek ve uygulamalar\u0131n\u0131z\u0131 daha da g\u00fc\u00e7lendirmek i\u00e7in harici loglamay\u0131 benimsemek, ataca\u011f\u0131n\u0131z en \u00f6nemli ad\u0131mlardan biridir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu\nDigitalOcean&#8217;\u0131n &#8220;12 Days of Dig","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-30476","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu\" \/>\n<meta property=\"og:description\" content=\"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu DigitalOcean&#039;\u0131n &quot;12 Days of Dig\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-28T05:40:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu\",\"datePublished\":\"2025-09-28T05:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\"},\"wordCount\":3132,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\",\"name\":\"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-28T05:40:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu","og_description":"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu DigitalOcean'\u0131n \"12 Days of Dig","og_url":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-28T05:40:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu","datePublished":"2025-09-28T05:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/"},"wordCount":3132,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/","name":"12 Days of DigitalOcean (Day 6) - Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-28T05:40:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/12-days-of-digitalocean-day-6-function-based-dogum-gunu-hatirlatma-hizmetiniz-icin-harici-loglama-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"12 Days of DigitalOcean (Day 6) &#8211; Function-Based Do\u011fum G\u00fcn\u00fc Hat\u0131rlatma Hizmetiniz \u0130\u00e7in Harici Loglama Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30476"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30476\/revisions"}],"predecessor-version":[{"id":30477,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30476\/revisions\/30477"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}