{"id":35148,"date":"2025-11-26T08:31:15","date_gmt":"2025-11-26T05:31:15","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/"},"modified":"2025-11-26T08:31:15","modified_gmt":"2025-11-26T05:31:15","slug":"gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/","title":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?"},"content":{"rendered":"<p>Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla geli\u015fen ve s\u00fcrekli b\u00fcy\u00fcyen dijital d\u00fcnyas\u0131nda, sistemlerin karma\u015f\u0131kl\u0131\u011f\u0131 da do\u011fru orant\u0131l\u0131 olarak art\u0131yor. Mikroservis mimarileri, bulut tabanl\u0131 altyap\u0131lar ve da\u011f\u0131t\u0131k uygulamalar, operasyonel g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fc sa\u011flamay\u0131 her zamankinden daha kritik hale getiriyor. Peki, y\u00fczlerce hatta binlerce container\u2019\u0131n veya sunucunun ayn\u0131 anda \u00e7al\u0131\u015ft\u0131\u011f\u0131 bir ortamda, bir sorun \u00e7\u0131kt\u0131\u011f\u0131nda &#8220;neden&#8221; sorusunun cevab\u0131n\u0131 nas\u0131l buluruz? \u0130\u015fte tam da bu noktada etkili bir g\u00fcnl\u00fck (log) y\u00f6netimi stratejisi devreye giriyor. Geleneksel g\u00fcnl\u00fckleme yakla\u015f\u0131mlar\u0131 genellikle verimsiz kal\u0131rken, modern ara\u00e7lar sayesinde bu zorluklar\u0131n \u00fcstesinden gelmek m\u00fcmk\u00fcn. Grafana Alloy ve Loki ikilisi, tam da bu ihtiyaca y\u00f6nelik g\u00fc\u00e7l\u00fc, \u00f6l\u00e7eklenebilir ve maliyet etkin bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizin nabz\u0131n\u0131 tutman\u0131z\u0131 sa\u011fl\u0131yor.<\/p>\n<p>Modern yaz\u0131l\u0131m mimarileri, \u00f6zellikle mikroservisler ve bulut tabanl\u0131 altyap\u0131lar, beraberinde ciddi operasyonel zorluklar getiriyor. Monolitik bir uygulaman\u0131n aksine, mikroservis tabanl\u0131 bir yap\u0131da bir i\u015f ak\u0131\u015f\u0131 birden fazla servisin etkile\u015fimiyle tamamlan\u0131r. Bu karma\u015f\u0131k etkile\u015fim a\u011f\u0131 i\u00e7inde bir sorun ortaya \u00e7\u0131kt\u0131\u011f\u0131nda, hatan\u0131n k\u00f6kenini bulmak adeta samanl\u0131kta i\u011fne aramaya benzer bir hale gelebilir. Geleneksel sunucu tabanl\u0131 g\u00fcnl\u00fck toplama y\u00f6ntemleri, yani her sunucuya tek tek ba\u011flan\u0131p g\u00fcnl\u00fck dosyalar\u0131n\u0131 incelemek, bu \u00f6l\u00e7ekteki sistemlerde hem zaman al\u0131c\u0131 hem de verimsizdir. \u00dcstelik, her bir servisin farkl\u0131 formatlarda g\u00fcnl\u00fck \u00fcretmesi, bu g\u00fcnl\u00fckleri standart bir \u015fekilde analiz etmeyi daha da zorla\u015ft\u0131r\u0131r.<\/p>\n<p>Da\u011f\u0131t\u0131k sistemlerde ya\u015fanan performans sorunlar\u0131, a\u011f gecikmeleri, hatal\u0131 konfig\u00fcrasyonlar veya yaz\u0131l\u0131m hatalar\u0131 gibi durumlar, g\u00fcnl\u00fck dosyalar\u0131nda de\u011ferli ipu\u00e7lar\u0131 bar\u0131nd\u0131r\u0131r. Ancak bu ipu\u00e7lar\u0131na h\u0131zl\u0131 ve etkin bir \u015fekilde eri\u015fmek, i\u015fletmelerin ar\u0131za s\u00fcresini (downtime) minimize etmesi ve m\u00fc\u015fteri memnuniyetini korumas\u0131 i\u00e7in hayati \u00f6neme sahiptir. G\u00f6r\u00fcn\u00fcrl\u00fck eksikli\u011fi, sorunlar\u0131n tespit edilmesini geciktirir, bu da do\u011frudan finansal kay\u0131plara ve marka itibar\u0131 erozyonuna yol a\u00e7abilir. Bu nedenle, merkezi, \u00f6l\u00e7eklenebilir ve kolayca sorgulanabilir bir g\u00fcnl\u00fck y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc, operasyonel m\u00fckemmelli\u011fe ula\u015fmak isteyen her kurulu\u015f i\u00e7in bir l\u00fcks de\u011fil, bir zorunluluktur. Ayr\u0131ca, g\u00fcvenlik olaylar\u0131n\u0131n tespiti ve uyumluluk denetimleri i\u00e7in de g\u00fcnl\u00fckler olmazsa olmaz bir veri kayna\u011f\u0131d\u0131r.<\/p>\n<p>\u0130\u015fte tam bu noktada, modern g\u00fcnl\u00fckleme \u00e7\u00f6z\u00fcmleri devreye girer. Bu \u00e7\u00f6z\u00fcmler, farkl\u0131 kaynaklardan gelen g\u00fcnl\u00fckleri tek bir merkezde toplar, standardize eder, etiketler ve h\u0131zl\u0131 sorgulamaya olanak tan\u0131r. B\u00f6ylece, operasyon ekipleri, geli\u015ftiriciler ve g\u00fcvenlik analistleri, ihtiya\u00e7 duyduklar\u0131 bilgilere an\u0131nda ula\u015fabilir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n sepetine \u00fcr\u00fcn ekleyemedi\u011fi bir senaryoda, ilgili servisin g\u00fcnl\u00fcklerini an\u0131nda filtreleyip hatan\u0131n nerede ve neden olu\u015ftu\u011funu saniyeler i\u00e7inde tespit etmek, modern bir g\u00fcnl\u00fckleme platformunun temel faydalar\u0131ndan biridir. Grafana Alloy ve Loki ikilisi, bu gereksinimleri kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, performans\u0131 ve maliyet etkinli\u011fi ile \u00f6ne \u00e7\u0131kan g\u00fc\u00e7l\u00fc bir kombinasyondur. Bu ara\u00e7lar, g\u00fcnl\u00fck verilerini sadece bir depolama alan\u0131 olmaktan \u00e7\u0131kar\u0131p, de\u011ferli bir operasyonel zeka kayna\u011f\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Loglar\u0131n\u0131z\u0131 anlamak ve onlardan eyleme d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir bilgiler \u00e7\u0131karmak, sistemlerinizin sa\u011fl\u0131\u011f\u0131n\u0131 koruman\u0131n ve proaktif bir \u015fekilde y\u00f6netmenin anahtar\u0131d\u0131r.<\/p>\n<h3>Peki, Grafana Loki ve Grafana Alloy Nedir ve Neden Birlikte Kullanmal\u0131y\u0131z?<\/h3>\n<p>G\u00fcnl\u00fck y\u00f6netiminin kritik \u00f6nemini anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi bu sorunu \u00e7\u00f6zmek i\u00e7in kullanaca\u011f\u0131m\u0131z temel ara\u00e7lara, yani Grafana Loki ve Grafana Alloy&#8217;a daha yak\u0131ndan bakal\u0131m. Bu iki ara\u00e7, Grafana ekosisteminin \u00f6nemli par\u00e7alar\u0131d\u0131r ve modern g\u00f6zlemlenebilirlik (observability) stratejilerinin temel ta\u015flar\u0131ndan birini olu\u015ftururlar. \u0130kisi bir araya geldi\u011finde, g\u00fcnl\u00fck verilerini toplama, depolama ve sorgulama s\u00fcre\u00e7lerini devrim niteli\u011finde basitle\u015ftirir ve h\u0131zland\u0131r\u0131r.<\/p>\n<p><strong>Grafana Loki nedir?<\/strong> Loki, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, Prometheus&#8217;un g\u00fcnl\u00fck e\u015fde\u011feri olmay\u0131 hedefleyen, ancak kendine \u00f6zg\u00fc bir mimariye sahip olan, yatay \u00f6l\u00e7eklenebilir ve y\u00fcksek oranda eri\u015filebilir bir g\u00fcnl\u00fck toplama sistemidir. Loki&#8217;nin en ay\u0131rt edici \u00f6zelli\u011fi, g\u00fcnl\u00fck i\u00e7eri\u011fini do\u011frudan indekslememesi, bunun yerine Promtail gibi bir ajan taraf\u0131ndan g\u00fcnl\u00fck verilerine eklenen etiketleri (labels) indekslemesidir. Bu &#8220;sadece etiketle indeksleme&#8221; yakla\u015f\u0131m\u0131, hem depolama maliyetlerini \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr hem de sorgulama performans\u0131n\u0131 art\u0131r\u0131r. Geleneksel g\u00fcnl\u00fckleme \u00e7\u00f6z\u00fcmleri, her bir g\u00fcnl\u00fck sat\u0131r\u0131ndaki her kelimeyi indeksleyerek devasa indeks boyutlar\u0131 olu\u015ftururken, Loki sadece meta verileri (etiketleri) indeksler. Bu, Loki&#8217;yi \u00f6zellikle y\u00fcksek hacimli g\u00fcnl\u00fck verileri i\u00e7in maliyet etkin bir se\u00e7im haline getirir. Etiketler, bir g\u00fcnl\u00fck ak\u0131\u015f\u0131n\u0131 (log stream) benzersiz \u015fekilde tan\u0131mlayan anahtar-de\u011fer \u00e7iftleridir; \u00f6rne\u011fin, <code>app=nginx<\/code>, <code>level=error<\/code>, <code>instance=web-01<\/code>. Bu etiketler sayesinde, kullan\u0131c\u0131lar belirli bir uygulamaya, hata seviyesine veya sunucuya ait g\u00fcnl\u00fckleri h\u0131zl\u0131ca filtreleyebilirler.<\/p>\n<p><strong>Grafana Alloy nedir?<\/strong> Daha \u00f6nce Promtail ad\u0131yla bilinen ve Loki&#8217;nin g\u00fcnl\u00fck toplama ajan\u0131 olarak g\u00f6rev yapan ara\u00e7, art\u0131k Grafana Alloy olarak kar\u015f\u0131m\u0131zda. Alloy, modern telemetri verilerini (metrikler, g\u00fcnl\u00fckler ve izler) Prometheus&#8217;tan ilham alan bir yap\u0131land\u0131rma dili (River) kullanarak toplamak, i\u015flemek ve y\u00f6nlendirmek i\u00e7in tasarlanm\u0131\u015f a\u00e7\u0131k kaynakl\u0131 bir ajand\u0131r. Asl\u0131nda, Alloy Prometheus&#8217;un <code>scrape_config<\/code> yap\u0131s\u0131na benzer bir \u015fekilde g\u00fcnl\u00fckleri ve metrikleri toplama yetene\u011fine sahiptir. Promtail, yaln\u0131zca g\u00fcnl\u00fck toplamak i\u00e7in tasarlanm\u0131\u015fken, Alloy \u00e7ok daha fazlas\u0131n\u0131 sunar. Mod\u00fcler yap\u0131s\u0131 sayesinde, hem Prometheus metriklerini hem de Loki g\u00fcnl\u00fcklerini ayn\u0131 ajan \u00fczerinden, merkezi ve tutarl\u0131 bir yap\u0131land\u0131rma ile toplaman\u0131za olanak tan\u0131r. Bu, operasyonel karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r ve g\u00f6zlemlenebilirlik ara\u00e7 setinizi basitle\u015ftirir. Alloy&#8217;un River yap\u0131land\u0131rma dili, kullan\u0131c\u0131lar\u0131n veri ak\u0131\u015flar\u0131n\u0131 deklaratif bir \u015fekilde tan\u0131mlamas\u0131n\u0131 sa\u011flar; bu da karma\u015f\u0131k i\u015fleme ad\u0131mlar\u0131n\u0131 (parsing, filtreleme, etiketleme) son derece esnek hale getirir.<\/p>\n<p><strong>Neden Birlikte Kullanmal\u0131y\u0131z?<\/strong> Grafana Alloy ve Loki, birbirini m\u00fckemmel \u015fekilde tamamlayan bir ikilidir. Alloy, sistemlerinizden ve uygulamalar\u0131n\u0131zdan g\u00fcnl\u00fckleri toplayan, onlar\u0131 i\u015fleyen (etiketler ekleyen, format\u0131 de\u011fi\u015ftiren) ve ard\u0131ndan Loki&#8217;ye g\u00f6nderen &#8220;\u00f6n cephe&#8221; ajan\u0131d\u0131r. Loki ise bu i\u015flenmi\u015f g\u00fcnl\u00fckleri etiketleyerek depolar ve g\u00fc\u00e7l\u00fc LogQL sorgulama dili ile sorgulanabilir hale getirir. Bu entegrasyonun ba\u015fl\u0131ca faydalar\u0131 \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>Birle\u015ftirilmi\u015f G\u00f6zlemlenebilirlik:<\/strong> Alloy, hem metrikleri hem de g\u00fcnl\u00fckleri tek bir ajanla toplama yetene\u011fi sayesinde, g\u00f6zlemlenebilirlik stratejinizi birle\u015ftirir. Bu, ara\u00e7 karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve y\u00f6netim y\u00fck\u00fcn\u00fc azalt\u0131r.<\/li>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> Loki&#8217;nin etiket tabanl\u0131 indeksleme yakla\u015f\u0131m\u0131 ve Alloy&#8217;un etkin veri i\u015fleme yetenekleri, depolama ve altyap\u0131 maliyetlerini geleneksel \u00e7\u00f6z\u00fcmlere k\u0131yasla \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr.<\/li>\n<li><strong>Esneklik ve Geni\u015fletilebilirlik:<\/strong> Alloy&#8217;un mod\u00fcler yap\u0131s\u0131 ve River yap\u0131land\u0131rma dili, neredeyse her t\u00fcrden g\u00fcnl\u00fck format\u0131n\u0131 ve veri kayna\u011f\u0131n\u0131 i\u015flemek i\u00e7in \u00fcst d\u00fczey esneklik sunar. Regex, JSON, logfmt gibi bir\u00e7ok i\u015flemciyi destekler.<\/li>\n<li><strong>Kolay Sorgulama ve G\u00f6rselle\u015ftirme:<\/strong> Loki&#8217;nin LogQL&#8217;i ve Grafana ile m\u00fckemmel entegrasyonu sayesinde, g\u00fcnl\u00fck verilerini h\u0131zl\u0131ca sorgulayabilir, filtreleyebilir ve anlaml\u0131 panolar olu\u015fturarak sistemlerinizin durumunu anl\u0131k olarak izleyebilirsiniz.<\/li>\n<li><strong>Operasyonel Basitlik:<\/strong> Tek bir ajanla hem metrik hem de g\u00fcnl\u00fck toplamak, da\u011f\u0131t\u0131k sistemlerde operasyonel basitli\u011fi art\u0131r\u0131r ve sorun giderme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r.<\/li>\n<\/ol>\n<p>K\u0131sacas\u0131, Grafana Alloy g\u00fcnl\u00fcklerinizi etkili bir \u015fekilde toplay\u0131p haz\u0131rlarken, Grafana Loki bu g\u00fcnl\u00fckleri d\u00fc\u015f\u00fck maliyetle depolar ve kolayca sorgulanabilir hale getirir. Bu sinerji, modern IT altyap\u0131lar\u0131nda g\u00fcnl\u00fck y\u00f6netimini bamba\u015fka bir boyuta ta\u015f\u0131yor.<\/p>\n<h2>Grafana Alloy Kurulumu ve Temel Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Bir K\u0131lavuz<\/h2>\n<p>Grafana Alloy ve Loki ikilisinin g\u00fcc\u00fcn\u00fc anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi s\u0131ra geldi bu ara\u00e7lar\u0131 pratik olarak sistemlerimize entegre etmeye. Alloy&#8217;un kurulumu ve temel yap\u0131land\u0131rmas\u0131 olduk\u00e7a basittir, ancak River dilinin getirdi\u011fi esneklik sayesinde \u00e7ok daha karma\u015f\u0131k senaryolara uyarlanabilir. Bu b\u00f6l\u00fcmde, Alloy&#8217;u bir sunucuya kurmay\u0131 ve ilk g\u00fcnl\u00fck toplama yap\u0131land\u0131rmas\u0131n\u0131 olu\u015fturmay\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<p><strong>Ad\u0131m 1: Grafana Alloy Kurulumu<\/strong><\/p>\n<p>Grafana Alloy&#8217;u \u00e7e\u015fitli yollarla kurabilirsiniz: ikili dosyadan, Docker container olarak veya Kubernetes ortam\u0131nda DaemonSet olarak. En basit y\u00f6ntemlerden biri, do\u011frudan ikili dosyas\u0131n\u0131 indirmektir. Linux tabanl\u0131 bir sistem i\u00e7in \u00f6rnek:<\/p>\n<pre><code>\n# En son s\u00fcr\u00fcm\u00fc indirin (s\u00fcr\u00fcm numaras\u0131n\u0131 kontrol edin)\nwget https:\/\/github.com\/grafana\/alloy\/releases\/download\/v1.0.0\/alloy-linux-amd64.zip\nunzip alloy-linux-amd64.zip\nmv alloy-linux-amd64 \/usr\/local\/bin\/alloy\n\n# \u00c7al\u0131\u015ft\u0131r\u0131labilir hale getirin\nchmod +x \/usr\/local\/bin\/alloy\n<\/pre>\n<p><\/code><\/p>\n<p>E\u011fer Docker kullan\u0131yorsan\u0131z, durum daha da basittir:<\/p>\n<pre><code>\ndocker pull grafana\/alloy:latest\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Ad\u0131m 2: Temel Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma (alloy.river)<\/strong><\/p>\n<p>Alloy, yap\u0131land\u0131rmas\u0131n\u0131 \"River\" adl\u0131, Prometheus'tan esinlenilmi\u015f bir DSL (Domain Specific Language) ile tan\u0131mlar. Bu dil, bile\u015fenler (components) arac\u0131l\u0131\u011f\u0131yla veri ak\u0131\u015flar\u0131n\u0131 (pipelines) olu\u015fturman\u0131z\u0131 sa\u011flar. Yeni bir dosya olan <code>alloy.river<\/code> olu\u015ftural\u0131m ve i\u00e7ine temel bir g\u00fcnl\u00fck toplama yap\u0131land\u0131rmas\u0131 ekleyelim:<\/p>\n<pre><code>\n\/\/ alloy.river\n\n\/\/ Ad\u0131m 1: G\u00fcnl\u00fckleri okuyaca\u011f\u0131m\u0131z bir kaynak tan\u0131mlayal\u0131m.\n\/\/ Bu \u00f6rnekte, \/var\/log\/myapp.log dosyas\u0131n\u0131 izleyece\u011fiz.\nloki.source.file \"myapp_logs\" {\n    targets    = loki.source.file.find_targets(\n        log_directory  = \"\/var\/log\/\",\n        log_file_name  = \"myapp.log\",\n        labels         = {\n            job = \"myapp\",\n            env = \"development\",\n        },\n    )\n    \/\/ Bu etiketler, her g\u00fcnl\u00fck sat\u0131r\u0131na eklenecektir.\n    forward_to = [loki.write.default.receiver] \/\/ Loki'ye g\u00f6nderilecek\n}\n\n\/\/ Ad\u0131m 2: G\u00fcnl\u00fckleri i\u015fleyelim (iste\u011fe ba\u011fl\u0131, ama genelde gerekli).\n\/\/ Bu \u00f6rnekte, logfmt format\u0131ndaki g\u00fcnl\u00fckleri parse edip etiketler \u00e7\u0131karaca\u011f\u0131z.\nloki.process \"myapp_parser\" {\n    forward_to = [loki.write.default.receiver] \/\/ \u0130\u015flenmi\u015f g\u00fcnl\u00fckler Loki'ye g\u00f6nderilecek\n\n    stage {\n        \/\/ Logfmt parser: key=value \u00e7iftlerini alg\u0131lar ve etiket yapar\n        logfmt {}\n    }\n\n    stage {\n        \/\/ Regex parser: Karma\u015f\u0131k metinlerden etiket \u00e7\u0131karmak i\u00e7in kullan\u0131l\u0131r\n        regex {\n            expression = \"level=(?P<log_level>\\\\w+) msg=\\\"(?P<message>.*)\\\"\"\n        }\n    }\n    \n    \/\/ myapp_logs'dan gelen g\u00fcnl\u00fckleri i\u015flemek i\u00e7in bu i\u015flemciyi kullan\n    source_address = loki.source.file.myapp_logs.receiver\n}\n\n\/\/ Ad\u0131m 3: Loki'ye g\u00fcnl\u00fckleri yazmak i\u00e7in bir hedef tan\u0131mlayal\u0131m.\n\/\/ Burada Loki sunucunuzun adresini belirtmelisiniz.\nloki.write \"default\" {\n    endpoint {\n        url = \"http:\/\/localhost:3100\/loki\/api\/v1\/push\" \/\/ Loki'nin push API adresi\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki yap\u0131land\u0131rma dosyas\u0131n\u0131 inceleyelim:<\/p>\n<ul>\n<li><code>loki.source.file \"myapp_logs\"<\/code>: Bu blok, Alloy'a belirli bir dosyadan veya dizinden g\u00fcnl\u00fckleri nas\u0131l alaca\u011f\u0131n\u0131 s\u00f6yler. <code>find_targets<\/code> fonksiyonu ile <code>\/var\/log\/myapp.log<\/code> dosyas\u0131n\u0131 hedef olarak belirledik. Ayr\u0131ca, t\u00fcm bu g\u00fcnl\u00fck ak\u0131\u015f\u0131na <code>job=myapp<\/code> ve <code>env=development<\/code> gibi temel etiketler ekledik. Bu etiketler, Loki'de sorgulama yaparken ana filtreleme noktalar\u0131n\u0131z olacakt\u0131r. <code>forward_to<\/code> ile bu g\u00fcnl\u00fcklerin <code>loki.write.default.receiver<\/code>'a, yani Loki'ye yazma bile\u015fenimize g\u00f6nderilece\u011fini belirtiyoruz.<\/li>\n<li><code>loki.process \"myapp_parser\"<\/code>: Bu k\u0131s\u0131m iste\u011fe ba\u011fl\u0131d\u0131r ancak g\u00fcnl\u00fcklerinizi daha anlaml\u0131 hale getirmek i\u00e7in \u00e7ok \u00f6nemlidir. Alloy, <code>stage<\/code> bloklar\u0131 arac\u0131l\u0131\u011f\u0131yla g\u00fcnl\u00fckler \u00fczerinde \u00e7e\u015fitli i\u015flemler yapabilir.\n<ul>\n<li><code>logfmt {}<\/code>: G\u00fcnl\u00fck sat\u0131r\u0131 <code>key=value<\/code> format\u0131ndaysa (\u00f6rne\u011fin, <code>level=info msg=\"User logged in\"<\/code>), bu i\u015flemci <code>level<\/code> ve <code>msg<\/code> gibi alanlar\u0131 otomatik olarak yeni etiketlere d\u00f6n\u00fc\u015ft\u00fcrecektir.<\/li>\n<li><code>regex {}<\/code>: Daha karma\u015f\u0131k formatlar i\u00e7in d\u00fczenli ifadeler (<code>regex<\/code>) kullanabilirsiniz. \u00d6rnekte, <code>level<\/code> ve <code>message<\/code> alanlar\u0131n\u0131 yakalay\u0131p bunlara <code>log_level<\/code> ve <code>message<\/code> adlar\u0131n\u0131 veriyoruz. Bu, daha sonra Loki'de bu alanlar \u00fczerinde filtreleme yapman\u0131z\u0131 sa\u011flar. <code>source_address<\/code> ile hangi g\u00fcnl\u00fck kayna\u011f\u0131n\u0131n bu i\u015flemciye y\u00f6nlendirilece\u011fini belirtiyoruz.<\/li>\n<\/ul>\n<\/li>\n<li><code>loki.write \"default\"<\/code>: Bu blok, i\u015flenmi\u015f g\u00fcnl\u00fcklerin nereye g\u00f6nderilece\u011fini tan\u0131mlar. <code>url<\/code> alan\u0131, Loki sunucunuzun push API adresini g\u00f6sterir. Varsay\u0131lan olarak, Loki 3100 portunda \u00e7al\u0131\u015f\u0131r. E\u011fer Loki farkl\u0131 bir sunucuda \u00e7al\u0131\u015f\u0131yorsa, <code>localhost<\/code> yerine o sunucunun IP adresi veya hostname'ini kullanmal\u0131s\u0131n\u0131z.<\/li>\n<\/ul>\n<p><strong>Ad\u0131m 3: Grafana Alloy'u \u00c7al\u0131\u015ft\u0131rma<\/strong><\/p>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydettikten sonra, Alloy'u basit\u00e7e \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>\n.\/alloy -config.file=.\/alloy.river\n<\/pre>\n<p><\/code><\/p>\n<p>E\u011fer Docker kullan\u0131yorsan\u0131z:<\/p>\n<pre><code>\ndocker run -d -v \/var\/log:\/var\/log:ro -v $(pwd)\/alloy.river:\/etc\/alloy\/config.river \\\n    grafana\/alloy:latest -config.file=\/etc\/alloy\/config.river\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Alloy'u arka planda \u00e7al\u0131\u015ft\u0131r\u0131r, yerel g\u00fcnl\u00fck dizininizi container'a ba\u011flar ve yap\u0131land\u0131rma dosyan\u0131z\u0131 kullanmas\u0131n\u0131 sa\u011flar. Alloy ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, belirtilen g\u00fcnl\u00fck dosyas\u0131ndaki yeni sat\u0131rlar\u0131 okuyacak, i\u015fleyecek ve Loki'ye g\u00f6ndermeye ba\u015flayacakt\u0131r. Art\u0131k g\u00fcnl\u00fckleriniz merkezi bir noktada toplanmaya haz\u0131r!<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: River yap\u0131land\u0131rma dosyan\u0131z\u0131 yazarken, s\u00f6zdizimi hatalar\u0131n\u0131 kontrol etmek i\u00e7in <code>alloy fmt<\/code> (format) ve <code>alloy validate<\/code> komutlar\u0131n\u0131 kullanabilirsiniz. Bu, \u00f6zellikle karma\u015f\u0131k konfig\u00fcrasyonlarda hata ay\u0131klama s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r.\n<\/div>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Mikroservis G\u00fcnl\u00fcklerini Grafana Alloy ile Toplama ve Loki'ye G\u00f6nderme Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>\u015eimdiye kadar Alloy'un temel kurulumunu ve basit bir g\u00fcnl\u00fck dosyas\u0131n\u0131 nas\u0131l i\u015fleyece\u011fini \u00f6\u011frendik. Ancak modern uygulamalar\u0131n \u00e7o\u011fu tek bir monolitik dosyadan g\u00fcnl\u00fck \u00fcretmez. Genellikle, \u00e7e\u015fitli mikroservisler, farkl\u0131 formatlarda (JSON, Apache access log, \u00f6zel metin formatlar\u0131 vb.) g\u00fcnl\u00fckler \u00fcretir ve bu g\u00fcnl\u00fckler farkl\u0131 dizinlerde veya stdout\/stderr'e yaz\u0131l\u0131r. Bu b\u00f6l\u00fcmde, bir e-ticaret uygulamas\u0131n\u0131n mikroservis mimarisindeki g\u00fcnl\u00fcklerini Grafana Alloy ile nas\u0131l toplayaca\u011f\u0131m\u0131z\u0131 ve Loki'ye nas\u0131l g\u00f6nderece\u011fimizi detayl\u0131 bir vaka analiziyle inceleyelim.<\/p>\n<p><strong>Senaryo: E-ticaret Uygulamas\u0131 Mikroservis G\u00fcnl\u00fckleri<\/strong><\/p>\n<p>Hayali e-ticaret uygulamam\u0131z\u0131n \u00fc\u00e7 ana mikroservisi oldu\u011funu varsayal\u0131m:<\/p>\n<ol>\n<li><strong>Sipari\u015f Servisi (Order Service):<\/strong> JSON format\u0131nda g\u00fcnl\u00fckler \u00fcretir. \u00d6rne\u011fin, <code>\/var\/log\/orders\/order-service.json<\/code> dosyas\u0131na yazar.<\/li>\n<li><strong>Kullan\u0131c\u0131 Servisi (User Service):<\/strong> Apache benzeri eri\u015fim g\u00fcnl\u00fckleri format\u0131nda (<code>common log format<\/code>) g\u00fcnl\u00fckler \u00fcretir. <code>\/var\/log\/users\/access.log<\/code> dosyas\u0131na yazar.<\/li>\n<li><strong>\u00d6deme Servisi (Payment Service):<\/strong> Standart metin format\u0131nda, logfmt benzeri g\u00fcnl\u00fckler \u00fcretir. <code>\/var\/log\/payments\/payment.log<\/code> dosyas\u0131na yazar.<\/li>\n<\/ol>\n<p>Amac\u0131m\u0131z, bu \u00fc\u00e7 farkl\u0131 kaynaktan gelen g\u00fcnl\u00fckleri Alloy ile toplay\u0131p i\u015flemek, do\u011fru etiketleri atamak ve ard\u0131ndan Loki'ye g\u00f6ndermektir. Bu sayede, Grafana \u00fczerinden belirli bir servise, HTTP durum koduna, kullan\u0131c\u0131 kimli\u011fine veya hata seviyesine g\u00f6re kolayca sorgulama yapabilece\u011fiz.<\/p>\n<p><strong>Grafana Alloy Yap\u0131land\u0131rmas\u0131 (alloy.river):<\/strong><\/p>\n<p>\u00d6ncelikle, her servis i\u00e7in ayr\u0131 bir <code>loki.source.file<\/code> bile\u015feni tan\u0131mlayarak g\u00fcnl\u00fck dosyalar\u0131n\u0131 izlemeye ba\u015flayaca\u011f\u0131z. Ard\u0131ndan, her bir kaynak i\u00e7in uygun <code>loki.process<\/code> bile\u015fenlerini kullanarak g\u00fcnl\u00fckleri formatlar\u0131na g\u00f6re ayr\u0131\u015ft\u0131r\u0131p etiketler \u00e7\u0131karaca\u011f\u0131z.<\/p>\n<pre><code>\n\/\/ alloy.river - Mikroservis G\u00fcnl\u00fck Toplama Yap\u0131land\u0131rmas\u0131\n\n\/\/ Loki'ye g\u00fcnl\u00fckleri yazmak i\u00e7in merkezi hedef\nloki.write \"default_loki_writer\" {\n    endpoint {\n        url = \"http:\/\/loki:3100\/loki\/api\/v1\/push\" \/\/ Loki servisi genellikle Kubernetes'te 'loki' ad\u0131yla \u00e7al\u0131\u015f\u0131r\n        \/\/ Kubernetes i\u00e7indeyseniz, bu URL'yi uygun \u015fekilde yap\u0131land\u0131r\u0131n\n    }\n}\n\n\/\/ ----------------------------------------------------\n\/\/ Sipari\u015f Servisi G\u00fcnl\u00fckleri (JSON Format\u0131)\n\/\/ ----------------------------------------------------\nloki.source.file \"order_service_logs\" {\n    targets = loki.source.file.find_targets(\n        log_directory  = \"\/var\/log\/orders\/\",\n        log_file_name  = \"order-service.json\",\n        labels         = {\n            job         = \"ecommerce-order-service\",\n            environment = \"production\",\n            service     = \"order-service\",\n        },\n    )\n    forward_to = [loki.process.order_parser.receiver]\n}\n\nloki.process \"order_parser\" {\n    forward_to = [loki.write.default_loki_writer.receiver]\n\n    stage {\n        json {\n            expressions = {\n                \"level\"      = \"level\",\n                \"message\"    = \"msg\",\n                \"order_id\"   = \"orderId\",\n                \"customer_id\"= \"customerId\"\n            }\n        }\n    }\n    stage {\n        \/\/ level de\u011ferini Loki etiketine d\u00f6n\u00fc\u015ft\u00fcr\n        labels {\n            level = json.level\n        }\n    }\n    stage {\n        \/\/ Hata seviyesi g\u00fcnl\u00fcklere \u00f6zel bir etiket ekleyelim\n        match {\n            selector = \"{level=\\\"error\\\"}\"\n            stage {\n                labels {\n                    error_type = \"application_error\"\n                }\n            }\n        }\n    }\n    source_address = loki.source.file.order_service_logs.receiver\n}\n\n\/\/ ----------------------------------------------------\n\/\/ Kullan\u0131c\u0131 Servisi G\u00fcnl\u00fckleri (Apache Access Log Format\u0131)\n\/\/ ----------------------------------------------------\nloki.source.file \"user_service_access_logs\" {\n    targets = loki.source.file.find_targets(\n        log_directory  = \"\/var\/log\/users\/\",\n        log_file_name  = \"access.log\",\n        labels         = {\n            job         = \"ecommerce-user-service\",\n            environment = \"production\",\n            service     = \"user-service\",\n        },\n    )\n    forward_to = [loki.process.user_access_parser.receiver]\n}\n\nloki.process \"user_access_parser\" {\n    forward_to = [loki.write.default_loki_writer.receiver]\n\n    stage {\n        \/\/ Apache Common Log Format i\u00e7in Regex\n        regex {\n            expression = \"(?P<ip>\\\\S+) \\\\S+ (?P<user>\\\\S+) \\\\[(?P<time>[\\\\w:\/]+\\\\s[+\\\\-]\\\\d{4})\\\\] \\\"(?P<method>\\\\S+)\\\\s(?P<path>\\\\S+)\\\\s(?P<protocol>\\\\S+)\\\" (?P<status_code>\\\\d{3}) (?P<size>\\\\d+)\"\n        }\n    }\n    stage {\n        \/\/ Regex ile yakalanan alanlar\u0131 Loki etiketlerine d\u00f6n\u00fc\u015ft\u00fcr\n        labels {\n            ip          = regex.ip,\n            user        = regex.user,\n            method      = regex.method,\n            path        = regex.path,\n            status_code = regex.status_code\n        }\n    }\n    stage {\n        \/\/ HTTP durum koduna g\u00f6re hata seviyesi etiketi ekle\n        match {\n            selector = \"{status_code=~\\\"[45]\\\\d{2}\\\"}\" \/\/ 4xx veya 5xx hatalar\u0131\n            stage {\n                labels {\n                    level = \"error\"\n                }\n            }\n            else_stage {\n                labels {\n                    level = \"info\"\n                }\n            }\n        }\n    }\n    source_address = loki.source.file.user_service_access_logs.receiver\n}\n\n\/\/ ----------------------------------------------------\n\/\/ \u00d6deme Servisi G\u00fcnl\u00fckleri (Logfmt Benzeri Metin Format\u0131)\n\/\/ ----------------------------------------------------\nloki.source.file \"payment_service_logs\" {\n    targets = loki.source.file.find_targets(\n        log_directory  = \"\/var\/log\/payments\/\",\n        log_file_name  = \"payment.log\",\n        labels         = {\n            job         = \"ecommerce-payment-service\",\n            environment = \"production\",\n            service     = \"payment-service\",\n        },\n    )\n    forward_to = [loki.process.payment_parser.receiver]\n}\n\nloki.process \"payment_parser\" {\n    forward_to = [loki.write.default_loki_writer.receiver]\n\n    stage {\n        logfmt {} \/\/ key=value \u00e7iftlerini otomatik yakalar\n    }\n    stage {\n        \/\/ logfmt taraf\u0131ndan yakalanan 'level' alan\u0131n\u0131 Loki etiketine d\u00f6n\u00fc\u015ft\u00fcr\n        labels {\n            level = logfmt.level\n        }\n    }\n    stage {\n        \/\/ 'transaction_id' alan\u0131n\u0131 da etiket olarak ekleyelim\n        labels {\n            transaction_id = logfmt.transaction_id\n        }\n    }\n    source_address = loki.source.file.payment_service_logs.receiver\n}\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Yap\u0131land\u0131rma Detaylar\u0131 ve A\u00e7\u0131klamalar:<\/strong><\/p>\n<ul>\n<li>Her bir mikroservis i\u00e7in <code>loki.source.file<\/code> blo\u011fu, ilgili g\u00fcnl\u00fck dosyas\u0131n\u0131 ve bu g\u00fcnl\u00fck ak\u0131\u015f\u0131na atanacak <code>job<\/code>, <code>environment<\/code>, <code>service<\/code> gibi temel etiketleri tan\u0131mlar. Bu etiketler, daha sonra Loki'de t\u00fcm g\u00fcnl\u00fckleri filtrelemek i\u00e7in kullan\u0131lacak anahtar-de\u011fer \u00e7iftleridir.<\/li>\n<li>Her bir <code>loki.source.file<\/code> bile\u015feninin \u00e7\u0131kt\u0131s\u0131, ilgili <code>loki.process<\/code> bile\u015fenine <code>forward_to<\/code> ile y\u00f6nlendirilir. Bu, her servisin g\u00fcnl\u00fcklerinin kendi format\u0131na \u00f6zel i\u015flemden ge\u00e7mesini sa\u011flar.<\/li>\n<li><strong>Sipari\u015f Servisi (<code>order_parser<\/code>):<\/strong> <code>json {}<\/code> a\u015famas\u0131, JSON format\u0131ndaki g\u00fcnl\u00fckleri ayr\u0131\u015ft\u0131r\u0131r. <code>expressions<\/code> ile JSON i\u00e7indeki alanlar\u0131 Alloy'un dahili alanlar\u0131na nas\u0131l e\u015fle\u015ftirece\u011fimizi belirtiriz. Ard\u0131ndan, <code>labels {}<\/code> a\u015famas\u0131, bu ayr\u0131\u015ft\u0131r\u0131lm\u0131\u015f alanlardan (<code>json.level<\/code>, <code>json.order_id<\/code> vb.) Loki etiketleri olu\u015fturur. Son olarak, <code>match {}<\/code> a\u015famas\u0131yla, g\u00fcnl\u00fckteki <code>level<\/code> alan\u0131 \"error\" ise, ek olarak <code>error_type=application_error<\/code> etiketini ekleyerek daha derinlemesine bir s\u0131n\u0131fland\u0131rma yapar\u0131z.<\/li>\n<li><strong>Kullan\u0131c\u0131 Servisi (<code>user_access_parser<\/code>):<\/strong> Bu k\u0131s\u0131m biraz daha karma\u015f\u0131kt\u0131r \u00e7\u00fcnk\u00fc Apache eri\u015fim g\u00fcnl\u00fckleri \u00f6zel bir <code>regex<\/code> deseni gerektirir. <code>regex {}<\/code> a\u015famas\u0131, belirtilen d\u00fczenli ifadeyle g\u00fcnl\u00fck sat\u0131r\u0131n\u0131 ayr\u0131\u015ft\u0131r\u0131r ve yakalad\u0131\u011f\u0131 gruplar\u0131 (<code>ip<\/code>, <code>user<\/code>, <code>status_code<\/code> vb.) Alloy'un dahili alanlar\u0131 olarak kaydeder. Yine <code>labels {}<\/code> a\u015famas\u0131yla bu alanlar Loki etiketlerine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. <code>match {}<\/code> a\u015famas\u0131, HTTP <code>status_code<\/code> 4xx veya 5xx ise <code>level=error<\/code> etiketi eklerken, di\u011fer durumlarda <code>level=info<\/code> etiketi ekleyerek g\u00fcnl\u00fck seviyesini otomatik olarak belirler.<\/li>\n<li><strong>\u00d6deme Servisi (<code>payment_parser<\/code>):<\/strong> Bu servis i\u00e7in <code>logfmt {}<\/code> i\u015flemcisi yeterlidir, \u00e7\u00fcnk\u00fc g\u00fcnl\u00fckler <code>key=value<\/code> \u00e7iftleri i\u00e7erir. Bu i\u015flemci, bu \u00e7iftleri otomatik olarak ayr\u0131\u015ft\u0131r\u0131r ve ard\u0131ndan <code>labels {}<\/code> a\u015famas\u0131yla istedi\u011fimiz alanlar\u0131 (\u00f6rne\u011fin <code>level<\/code>, <code>transaction_id<\/code>) etiketlere d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/li>\n<\/ul>\n<p>Bu yap\u0131land\u0131rma sayesinde, farkl\u0131 formatlardaki mikroservis g\u00fcnl\u00fcklerinizi merkezi bir \u015fekilde toplayabilir, anlaml\u0131 etiketlerle zenginle\u015ftirebilir ve Loki'ye g\u00f6ndererek g\u00fc\u00e7l\u00fc sorgulama ve g\u00f6rselle\u015ftirme yeteneklerinden faydalanabilirsiniz. Her bir servisin g\u00fcnl\u00fck ak\u0131\u015f\u0131, kendine \u00f6zg\u00fc etiket setleriyle Loki'de kolayca ay\u0131rt edilebilir ve izlenebilir hale gelir.<\/p>\n<h2>Loki'de Log Sorgulama ve Grafana ile G\u00f6rselle\u015ftirme: G\u00fcnl\u00fcklerinizden De\u011fer \u00c7\u0131karma<\/h2>\n<p>G\u00fcnl\u00fckleri Alloy ile ba\u015far\u0131yla toplad\u0131k ve Loki'ye g\u00f6nderdik. \u015eimdi as\u0131l \u00f6nemli k\u0131s\u0131m: Bu g\u00fcnl\u00fcklerden anlaml\u0131 bilgiler \u00e7\u0131karmak. Loki'nin kalbinde, Prometheus'un PromQL sorgulama dilinden esinlenerek geli\u015ftirilmi\u015f g\u00fc\u00e7l\u00fc bir g\u00fcnl\u00fck sorgulama dili olan LogQL bulunur. Grafana ise, Loki veri kayna\u011f\u0131n\u0131 kullanarak bu sorgular\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r ve g\u00fcnl\u00fckleri hem metin olarak g\u00f6stermenin hem de g\u00f6rselle\u015ftirmelerin kap\u0131s\u0131n\u0131 aralar. Bu b\u00f6l\u00fcmde, LogQL'in temellerini, Grafana ile nas\u0131l entegre edilece\u011fini ve g\u00fcnl\u00fck verilerinden nas\u0131l de\u011fer \u00e7\u0131kar\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<h3>LogQL Temelleri: G\u00fcnl\u00fcklerinizi Nas\u0131l Sorgulars\u0131n\u0131z?<\/h3>\n<p>LogQL, temelde iki ana bile\u015fenden olu\u015fur: <strong>G\u00fcnl\u00fck Ak\u0131\u015f\u0131 Se\u00e7icileri (Log Stream Selectors)<\/strong> ve <strong>G\u00fcnl\u00fck Borular\u0131 (Log Pipelines)<\/strong>. G\u00fcnl\u00fck Ak\u0131\u015f\u0131 Se\u00e7icileri, hangi g\u00fcnl\u00fck ak\u0131\u015flar\u0131n\u0131 sorgulamak istedi\u011finizi etiketler arac\u0131l\u0131\u011f\u0131yla belirlerken, G\u00fcnl\u00fck Borular\u0131 bu ak\u0131\u015flar \u00fczerinde metin filtreleme ve i\u015fleme i\u015flemleri yapar.<\/p>\n<p><strong>1. G\u00fcnl\u00fck Ak\u0131\u015f\u0131 Se\u00e7icileri:<\/strong><br \/>\nEtiketler, LogQL'in temelidir. Bir g\u00fcnl\u00fck ak\u0131\u015f\u0131 se\u00e7icisi, s\u00fcsl\u00fc parantezler <code>{}<\/code> i\u00e7inde bir veya daha fazla etiket anahtar-de\u011fer \u00e7ifti ile tan\u0131mlan\u0131r. \u00d6rne\u011fin, daha \u00f6nceki \u00f6rne\u011fimizdeki t\u00fcm Sipari\u015f Servisi g\u00fcnl\u00fcklerini se\u00e7mek i\u00e7in:<\/p>\n<pre><code>\n{job=\"ecommerce-order-service\"}\n<\/pre>\n<p><\/code><\/p>\n<p>Birden fazla etiketle filtreleme yapabilirsiniz:<\/p>\n<pre><code>\n{job=\"ecommerce-order-service\", level=\"error\"}\n<\/pre>\n<p><\/code><\/p>\n<p>Etiket de\u011ferleri i\u00e7in e\u015fle\u015fme operat\u00f6rleri:<\/p>\n<ul>\n<li><code>=<\/code> (e\u015fittir)<\/li>\n<li><code>!=<\/code> (e\u015fit de\u011fildir)<\/li>\n<li><code>=~<\/code> (regex e\u015fle\u015fir)<\/li>\n<li><code>!~<\/code> (regex e\u015fle\u015fmez)<\/li>\n<\/ul>\n<p>\u00d6rnek:<\/p>\n<pre><code>\n\/\/ T\u00fcm production ortam\u0131ndaki servislerin g\u00fcnl\u00fckleri\n{environment=\"production\"}\n\n\/\/ user-service ve payment-service d\u0131\u015f\u0131ndaki t\u00fcm servislerin g\u00fcnl\u00fckleri\n{service!=\"user-service\", service!=\"payment-service\"}\n\n\/\/ path etiketi '\/api\/v1\/orders' ile ba\u015flayan t\u00fcm g\u00fcnl\u00fckler\n{path=~\"\/api\/v1\/orders.*\"}\n<\/pre>\n<p><\/code><\/p>\n<p><strong>2. G\u00fcnl\u00fck Borular\u0131 (Log Pipelines):<\/strong><br \/>\nG\u00fcnl\u00fck ak\u0131\u015f\u0131 se\u00e7icisinden sonra gelen boru operat\u00f6r\u00fc <code>|<\/code>, g\u00fcnl\u00fck i\u00e7eri\u011fi \u00fczerinde i\u015flem yapman\u0131z\u0131 sa\u011flar. Bu i\u015flemler \u015funlar\u0131 i\u00e7erebilir:<\/p>\n<ul>\n<li><strong>Metin Filtreleme:<\/strong> G\u00fcnl\u00fck i\u00e7eri\u011finde belirli bir metni aramak i\u00e7in.\n<ul>\n<li><code>|= \"hata\"<\/code>: \"hata\" kelimesini i\u00e7eren sat\u0131rlar\u0131 se\u00e7.<\/li>\n<li><code>!~ \"ba\u015far\u0131l\u0131\"<\/code>: \"ba\u015far\u0131l\u0131\" kelimesini i\u00e7ermeyen sat\u0131rlar\u0131 se\u00e7.<\/li>\n<li><code>|~ \"userId=\\\\d+\"<\/code>: \"userId=\" ile ba\u015flayan ve rakam i\u00e7eren sat\u0131rlar\u0131 se\u00e7.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Ayr\u0131\u015ft\u0131rma (Parsing):<\/strong> G\u00fcnl\u00fck i\u00e7eri\u011findeki yap\u0131land\u0131r\u0131lm\u0131\u015f verileri (JSON, regex, logfmt) ayr\u0131\u015ft\u0131rmak ve ge\u00e7ici alanlar olu\u015fturmak i\u00e7in.\n<ul>\n<li><code>| json<\/code>: G\u00fcnl\u00fck sat\u0131r\u0131n\u0131 JSON olarak ayr\u0131\u015ft\u0131r.<\/li>\n<li><code>| logfmt<\/code>: G\u00fcnl\u00fck sat\u0131r\u0131n\u0131 logfmt olarak ayr\u0131\u015ft\u0131r.<\/li>\n<li><code>| regexp \"duration=(?P<duration>\\\\d+)\"<\/code>: \u00d6zel bir regex ile 'duration' alan\u0131n\u0131 yakala.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Etiket Olu\u015fturma\/Yeniden Etiketleme:<\/strong> Ayr\u0131\u015ft\u0131r\u0131lm\u0131\u015f alanlardan yeni etiketler olu\u015fturmak i\u00e7in.\n<ul>\n<li><code>| label_format duration_ms=\"{{.duration}}\"<\/code>: <code>duration<\/code> alan\u0131n\u0131 yeni bir etiket olarak ekle.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u00d6rnek bir LogQL sorgusu:<\/p>\n<pre><code>\n\/\/ Sipari\u015f servisi g\u00fcnl\u00fcklerinde \"ERROR\" i\u00e7eren ve customer_id etiketi olanlar\u0131 bul\n{service=\"order-service\", level=\"error\"} |= \"\u00f6deme ba\u015far\u0131s\u0131z\" | json customer_id=\"customerId\"\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Agregasyon Fonksiyonlar\u0131 (Metrics from Logs):<\/strong><br \/>\nLogQL, g\u00fcnl\u00fck ak\u0131\u015flar\u0131ndan metrikler t\u00fcretmek i\u00e7in de g\u00fc\u00e7l\u00fc fonksiyonlar sunar. Bunlar, g\u00fcnl\u00fck hacmini, hata oranlar\u0131n\u0131 veya belirli olaylar\u0131n s\u0131kl\u0131\u011f\u0131n\u0131 g\u00f6rselle\u015ftirmek i\u00e7in idealdir.<\/p>\n<ul>\n<li><code>count_over_time()<\/code>: Belirli bir zaman aral\u0131\u011f\u0131nda g\u00fcnl\u00fck sat\u0131r\u0131 say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>rate()<\/code>: Belirli bir zaman aral\u0131\u011f\u0131ndaki g\u00fcnl\u00fck sat\u0131rlar\u0131n\u0131n ortalama oran\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>sum by()<\/code>: Etiketlere g\u00f6re gruplayarak toplam alma.<\/li>\n<\/ul>\n<p>\u00d6rnek:<\/p>\n<pre><code>\n\/\/ Son 5 dakikadaki t\u00fcm hata g\u00fcnl\u00fcklerinin say\u0131s\u0131n\u0131 1 dakikal\u0131k aral\u0131klarla g\u00f6ster\nsum by (service) (count_over_time({level=\"error\"}[5m]))\n<\/pre>\n<p><\/code><\/p>\n<h3>Grafana ile G\u00f6rselle\u015ftirme: G\u00fcnl\u00fcklerinizi Canl\u0131 Tutun<\/h3>\n<p>Grafana, Loki'den gelen g\u00fcnl\u00fck verilerini ke\u015ffetmek, sorgulamak ve g\u00f6rselle\u015ftirmek i\u00e7in en ideal aray\u00fczd\u00fcr. Grafana'y\u0131 Loki ile entegre etmek olduk\u00e7a basittir.<\/p>\n<p><strong>1. Loki'yi Grafana Veri Kayna\u011f\u0131 Olarak Ekleme:<\/strong><br \/>\nGrafana web aray\u00fcz\u00fcnde \"Configuration\" -> \"Data Sources\" -> \"Add data source\" yolunu izleyin ve \"Loki\"yi se\u00e7in. Ard\u0131ndan Loki sunucunuzun URL'sini (\u00f6rne\u011fin, <code>http:\/\/loki:3100<\/code>) girin ve kaydedin.<\/p>\n<p><strong>2. Grafana Explore ile G\u00fcnl\u00fckleri Ke\u015ffetme:<\/strong><br \/>\nGrafana'n\u0131n \"Explore\" \u00f6zelli\u011fi, LogQL sorgular\u0131n\u0131z\u0131 canl\u0131 olarak test etmek ve g\u00fcnl\u00fck ak\u0131\u015flar\u0131n\u0131 do\u011frudan g\u00f6rmek i\u00e7in m\u00fckemmeldir. Veri kayna\u011f\u0131 olarak Loki'yi se\u00e7tikten sonra, sorgu \u00e7ubu\u011funa LogQL ifadenizi yaz\u0131n. Grafana, etiketler i\u00e7in otomatik tamamlama \u00f6nerileri sunarak i\u015finizi kolayla\u015ft\u0131r\u0131r. Sorgunuzu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, g\u00fcnl\u00fck sat\u0131rlar\u0131n\u0131 ve onlara ait etiketleri g\u00f6receksiniz. Ayr\u0131ca, <code>Log volume<\/code> grafi\u011fi ile g\u00fcnl\u00fck hacmini zaman i\u00e7inde g\u00f6rselle\u015ftirebilirsiniz.<\/p>\n<p><strong>3. Panolar (Dashboards) Olu\u015fturma:<\/strong><br \/>\nAnlaml\u0131 panolar olu\u015fturarak sistemlerinizin sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 anl\u0131k olarak izleyebilirsiniz. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>G\u00fcnl\u00fck Hacmi Paneli:<\/strong> <code>sum by (job) (count_over_time({job=~\".+\"}[1m]))<\/code> sorgusuyla her bir servisin dakikal\u0131k g\u00fcnl\u00fck hacmini g\u00f6steren bir grafik olu\u015fturabilirsiniz.<\/li>\n<li><strong>Hata Oran\u0131 Paneli:<\/strong> <code>sum by (service) (rate({level=\"error\"}[5m])) \/ sum by (service) (rate({job=~\".+\"}[5m])) * 100<\/code> sorgusuyla servis baz\u0131nda hata oranlar\u0131n\u0131 y\u00fczde olarak g\u00f6steren bir panel olu\u015fturabilirsiniz.<\/li>\n<li><strong>Belirli G\u00fcnl\u00fckleri G\u00f6steren Panel:<\/strong> <code>Logs<\/code> panel t\u00fcr\u00fcn\u00fc kullanarak, <code>{service=\"order-service\", level=\"error\"}<\/code> gibi bir sorguyla sadece belirli g\u00fcnl\u00fckleri g\u00f6steren bir tablo olu\u015fturabilirsiniz. Bu panel, canl\u0131 g\u00fcnl\u00fck ak\u0131\u015f\u0131n\u0131 izlemek i\u00e7in idealdir.<\/li>\n<\/ul>\n<p>Her bir panelde, LogQL sorgusunun yan\u0131 s\u0131ra zaman aral\u0131\u011f\u0131, g\u00f6rselle\u015ftirme t\u00fcr\u00fc (grafik, tablo, tek de\u011fer) gibi ayarlar\u0131 da yap\u0131land\u0131rabilirsiniz. Grafana, metrikleri g\u00fcnl\u00fcklerle ili\u015fkilendirme yetene\u011fi sayesinde, bir metrik grafi\u011findeki anormal bir art\u0131\u015f g\u00f6rd\u00fc\u011f\u00fcn\u00fczde, ayn\u0131 zaman aral\u0131\u011f\u0131ndaki g\u00fcnl\u00fckleri h\u0131zl\u0131ca filtreleyerek sorunun k\u00f6kenine inmenizi sa\u011flar.<\/p>\n<p>Bu entegrasyon sayesinde, operasyon ekipleri ve geli\u015ftiriciler, g\u00fcnl\u00fcklerden sadece metin y\u0131\u011f\u0131nlar\u0131 olarak de\u011fil, sistemlerinin davran\u0131\u015f\u0131n\u0131 anlamak i\u00e7in de\u011ferli bir telemetri kayna\u011f\u0131 olarak faydalanabilirler. Loki ve Grafana, g\u00f6zlemlenebilirlik stratejinizin merkezinde yer alarak, ar\u0131za tespiti ve sorun giderme s\u00fcre\u00e7lerinizi radikal bir \u015fekilde h\u0131zland\u0131r\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Kullan\u0131m \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: B\u00fcy\u00fck \u00d6l\u00e7ekli Sistemler \u0130\u00e7in Optimizasyon Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>Grafana Alloy ve Loki, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projelerden kurumsal seviyedeki karma\u015f\u0131k altyap\u0131lara kadar geni\u015f bir yelpazede kullan\u0131labilir. Ancak b\u00fcy\u00fck \u00f6l\u00e7ekli sistemlerde, g\u00fcnl\u00fck hacmi ve performans\u0131 y\u00f6netmek i\u00e7in baz\u0131 ileri d\u00fczey teknikler ve en iyi uygulamalar devreye girer. Bu b\u00f6l\u00fcmde, Alloy ve Loki kurulumunuzu optimize etmek, g\u00fcvenli\u011fini sa\u011flamak ve daha etkin kullanmak i\u00e7in ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>1. Performans ve \u00d6l\u00e7eklenebilirlik \u0130\u00e7in Optimizasyon<\/h3>\n<ul>\n<li><strong>Alloy'da Batchleme ve S\u0131k\u0131\u015ft\u0131rma:<\/strong> Alloy, g\u00fcnl\u00fckleri Loki'ye g\u00f6nderirken toplu (batch) halde g\u00f6nderme ve s\u0131k\u0131\u015ft\u0131rma (gzip) yeteneklerine sahiptir. Bu, a\u011f trafi\u011fini ve Loki'nin ingest y\u00fck\u00fcn\u00fc azalt\u0131r. Varsay\u0131lan de\u011ferler genellikle iyi olsa da, yo\u011fun g\u00fcnl\u00fck hacimlerinde bu ayarlar\u0131 optimize edebilirsiniz:\n<pre><code>\nloki.write \"default\" {\n    endpoint {\n        url = \"http:\/\/loki:3100\/loki\/api\/v1\/push\"\n        batch {\n            max_size    = 4 * 1024 * 1024 \/\/ 4MB\n            max_entries = 10000\n            delay       = \"5s\"\n        }\n        headers = {\n            \"X-Scope-OrgID\" = \"production\" \/\/ Multi-tenancy i\u00e7in\n        }\n    }\n    compression = \"gzip\"\n}\n    <\/pre>\n<p><\/code><br \/>\n    <code>delay<\/code> parametresi, Alloy'un g\u00fcnl\u00fckleri g\u00f6ndermeden \u00f6nce ne kadar bekleyece\u011fini kontrol eder; daha uzun gecikme, daha b\u00fcy\u00fck toplu i\u015flemler anlam\u0131na gelir ancak g\u00fcnl\u00fcklerin Loki'ye ula\u015fma s\u00fcresini art\u0131r\u0131r.<\/li>\n<li><strong>Etkin Etiket Kullan\u0131m\u0131:<\/strong> Loki'nin maliyet etkinli\u011fi ve performans\u0131, do\u011fru etiketleme stratejisine ba\u011fl\u0131d\u0131r. Y\u00fcksek kardinaliteli (\u00e7ok say\u0131da benzersiz de\u011fere sahip) etiketlerden ka\u00e7\u0131n\u0131n. \u00d6rne\u011fin, her g\u00fcnl\u00fck sat\u0131r\u0131 i\u00e7in benzersiz bir <code>request_id<\/code> etiketi eklemek, Loki indeksini \u015fi\u015firebilir. Bunun yerine, <code>request_id<\/code>'yi g\u00fcnl\u00fck mesaj\u0131 i\u00e7inde b\u0131rak\u0131n ve gerekti\u011finde LogQL'in <code>logfmt<\/code> veya <code>regexp<\/code> i\u015flemcileriyle ayr\u0131\u015ft\u0131r\u0131n. Genellikle <code>job<\/code>, <code>service<\/code>, <code>environment<\/code>, <code>level<\/code>, <code>instance<\/code>, <code>namespace<\/code> gibi d\u00fc\u015f\u00fck kardinaliteli etiketler tercih edilir.<\/li>\n<li><strong>Alloy'u Sidecar veya DaemonSet Olarak Da\u011f\u0131tma:<\/strong> Kubernetes gibi konteynerize ortamlarda, Alloy'u her bir pod'un yan\u0131nda bir sidecar konteyner olarak veya her bir d\u00fc\u011f\u00fcmde bir DaemonSet olarak \u00e7al\u0131\u015ft\u0131rmak en iyi uygulamad\u0131r. Sidecar modeli, her uygulaman\u0131n kendi g\u00fcnl\u00fcklerini toplamas\u0131n\u0131 sa\u011flarken, DaemonSet modeli d\u00fc\u011f\u00fcm seviyesindeki g\u00fcnl\u00fckleri (\u00f6rne\u011fin, <code>\/var\/log\/containers<\/code>) toplamak i\u00e7in idealdir.<\/li>\n<\/ul>\n<h3>2. G\u00fcvenlik ve Kimlik Do\u011frulama<\/h3>\n<ul>\n<li><strong>TLS Kullan\u0131m\u0131:<\/strong> Alloy ve Loki aras\u0131ndaki ileti\u015fimi g\u00fcvence alt\u0131na almak i\u00e7in TLS (HTTPS) kullan\u0131n. Loki'niz bir HTTPS u\u00e7 noktas\u0131 sa\u011fl\u0131yorsa, Alloy yap\u0131land\u0131rman\u0131zda <code>http:\/\/<\/code> yerine <code>https:\/\/<\/code> kullan\u0131n ve uygun sertifika do\u011frulamas\u0131 yap\u0131n.\n<pre><code>\nloki.write \"default\" {\n    endpoint {\n        url = \"https:\/\/loki.example.com\/loki\/api\/v1\/push\"\n        tls {\n            ca_pem_file = \"\/etc\/ssl\/certs\/ca-certificates.crt\"\n            # Sertifika do\u011frulamas\u0131n\u0131 kapatmak i\u00e7in insecure_skip_verify = true kullanmay\u0131n, sadece geli\u015ftirme ortam\u0131nda kullan\u0131n.\n        }\n    }\n}\n    <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>API Anahtarlar\u0131 veya Temel Kimlik Do\u011frulama:<\/strong> Loki, API anahtarlar\u0131 veya temel kimlik do\u011frulama ile g\u00fcvence alt\u0131na al\u0131nabilir. Alloy, bu kimlik bilgilerini yap\u0131land\u0131rma dosyas\u0131nda tutabilir:\n<pre><code>\nloki.write \"default\" {\n    endpoint {\n        url = \"https:\/\/loki.example.com\/loki\/api\/v1\/push\"\n        basic_auth {\n            username = \"admin\"\n            password = env(\"LOKI_PASSWORD\") \/\/ Ortam de\u011fi\u015fkeninden almak daha g\u00fcvenlidir\n        }\n    }\n}\n    <\/pre>\n<p><\/code><br \/>\n    Hassas bilgileri do\u011frudan yap\u0131land\u0131rma dosyas\u0131nda tutmak yerine, Kubernetes Secrets veya ortam de\u011fi\u015fkenleri gibi g\u00fcvenli y\u00f6ntemler kullanmak \u00f6nemlidir.<\/li>\n<li><strong>Multi-Tenancy (\u00c7ok Kirac\u0131l\u0131l\u0131k):<\/strong> Loki, <code>X-Scope-OrgID<\/code> ba\u015fl\u0131\u011f\u0131 arac\u0131l\u0131\u011f\u0131yla \u00e7ok kirac\u0131l\u0131l\u0131\u011f\u0131 destekler. Bu, farkl\u0131 ekiplerin veya m\u00fc\u015fterilerin g\u00fcnl\u00fcklerini ayn\u0131 Loki k\u00fcmesinde izole etmenizi sa\u011flar. Alloy yap\u0131land\u0131rman\u0131zda bu ba\u015fl\u0131\u011f\u0131 ayarlayabilirsiniz.<\/li>\n<\/ul>\n<h3>3. Yap\u0131land\u0131rma Y\u00f6netimi ve Hata Ay\u0131klama<\/h3>\n<ul>\n<li><strong>River'\u0131n Mod\u00fcler Yap\u0131s\u0131:<\/strong> Alloy'un River yap\u0131land\u0131rma dili, mod\u00fcler bir yap\u0131 sunar. B\u00fcy\u00fck ve karma\u015f\u0131k yap\u0131land\u0131rmalar\u0131 daha y\u00f6netilebilir hale getirmek i\u00e7in ayr\u0131 dosyalarda bile\u015fenler tan\u0131mlay\u0131p bunlar\u0131 ana yap\u0131land\u0131rma dosyan\u0131zda i\u00e7e aktarabilirsiniz. \u00d6rne\u011fin:\n<pre><code>\n\/\/ components\/order_service.river\nloki.source.file \"order_service_logs\" { ... }\nloki.process \"order_parser\" { ... }\n\n\/\/ alloy.river\nimport \"components\/order_service.river\"\nimport \"components\/user_service.river\"\n...\n    <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Alloy'un Dahili Metrikleri:<\/strong> Alloy'un kendisi Prometheus format\u0131nda metrikler sunar (varsay\u0131lan olarak 12345 portunda). Bu metrikler, Alloy'un sa\u011fl\u0131k durumunu, g\u00fcnl\u00fck toplama h\u0131z\u0131n\u0131, hata oranlar\u0131n\u0131 ve g\u00f6nderilmemi\u015f g\u00fcnl\u00fck say\u0131s\u0131n\u0131 izlemek i\u00e7in kullan\u0131labilir. Bu metrikleri bir Prometheus sunucusuyla toplay\u0131p Grafana'da g\u00f6rselle\u015ftirerek Alloy ajanlar\u0131n\u0131z\u0131n performans\u0131n\u0131 denetleyebilirsiniz.<\/li>\n<li><strong><code>alloy debug<\/code> Komutlar\u0131:<\/strong> Alloy CLI, hata ay\u0131klama i\u00e7in kullan\u0131\u015fl\u0131 komutlar sunar. \u00d6rne\u011fin, <code>alloy debug config-check<\/code> yap\u0131land\u0131rma dosyan\u0131zdaki hatalar\u0131 kontrol ederken, <code>alloy debug component<\/code> komutlar\u0131 \u00e7al\u0131\u015fan bile\u015fenlerin durumunu incelemenizi sa\u011flar.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Karma\u015f\u0131k g\u00fcnl\u00fck i\u015fleme senaryolar\u0131nda, <code>loki.process<\/code> a\u015famalar\u0131n\u0131 s\u0131rayla test edin. \u00d6rne\u011fin, \u00f6nce sadece <code>json<\/code> veya <code>logfmt<\/code> a\u015famas\u0131n\u0131 kullan\u0131n, Loki'de g\u00fcnl\u00fcklerin nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc kontrol edin. Ard\u0131ndan <code>regex<\/code> veya <code>labels<\/code> a\u015famalar\u0131n\u0131 ekleyerek kademeli olarak ilerleyin. Bu, hata ay\u0131klama s\u00fcrecini \u00e7ok daha y\u00f6netilebilir hale getirir.\n<\/div>\n<h3>4. Mobil Uyumlu HTML i\u00e7in \u00d6rnek (Bir Tablo i\u00e7in CSS)<\/h3>\n<p>Her ne kadar g\u00fcnl\u00fck verisi do\u011frudan HTML \u00e7\u0131kt\u0131s\u0131yla ilgili olmasa da, teknik makalelerde verilen HTML kod \u00f6rneklerinin veya tablolar\u0131n mobil uyumlu olmas\u0131 genel bir best practice'tir. A\u015fa\u011f\u0131da, bir tablonun mobil cihazlarda daha iyi g\u00f6r\u00fcnmesini sa\u011flayan basit bir CSS medya sorgusu \u00f6rne\u011fi verilmi\u015ftir. Bu t\u00fcr CSS kodlar\u0131, ana HTML \u00e7\u0131kt\u0131n\u0131zda yer almaz ancak <code><head><\/code> etiketine eklenerek sayfa d\u00fczenini optimize eder.<\/p>\n<pre><code>\n<style>\n  \/* Genel tablo stilizasyonu *\/\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em;\n  }\n  th, td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n  }\n\n  \/* Mobil cihazlar i\u00e7in \u00f6zel stiller *\/\n  @media screen and (max-width: 600px) {\n    table, thead, tbody, th, td, tr {\n      display: block; \/* Her eleman\u0131 blok seviyesinde g\u00f6ster *\/\n    }\n    thead tr {\n      position: absolute; \/* Ba\u015fl\u0131k sat\u0131r\u0131n\u0131 gizle *\/\n      top: -9999px;\n      left: -9999px;\n    }\n    tr {\n      border: 1px solid #ccc; \/* Sat\u0131rlar\u0131 ay\u0131rmak i\u00e7in kenarl\u0131k ekle *\/\n      margin-bottom: 10px;\n    }\n    td {\n      border: none; \/* H\u00fccre kenarl\u0131klar\u0131n\u0131 kald\u0131r *\/\n      border-bottom: 1px solid #eee; \/* Alt kenarl\u0131k ekle *\/\n      position: relative;\n      padding-left: 50%; \/* \u0130\u00e7eri\u011fi sa\u011fa kayd\u0131r *\/\n      text-align: right;\n    }\n    td:before {\n      \/* Her h\u00fccreye sanal bir ba\u015fl\u0131k ekle *\/\n      position: absolute;\n      top: 6px;\n      left: 6px;\n      width: 45%;\n      padding-right: 10px;\n      white-space: nowrap;\n      text-align: left;\n      font-weight: bold;\n      content: attr(data-label); \/* data-label \u00f6zelli\u011fini kullan *\/\n    }\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu CSS ile, \u00f6rne\u011fin bir <code><\/p>\n<table><\/code> \u00f6\u011feniz varsa, h\u00fccrelere <code>data-label<\/code> \u00f6zniteli\u011fi ekleyerek mobil g\u00f6r\u00fcn\u00fcmde ba\u015fl\u0131klar\u0131 otomatik olarak g\u00f6sterebilirsiniz:<\/p>\n<pre><code>\n<table>\n  <thead>\n    <tr>\n      <th>Servis Ad\u0131<\/th>\n      <th>Log Seviyesi<\/th>\n      <th>A\u00e7\u0131klama<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td data-label=\"Servis Ad\u0131\">Order Service<\/td>\n      <td data-label=\"Log Seviyesi\">Error<\/td>\n      <td data-label=\"A\u00e7\u0131klama\">\u00d6deme i\u015flemi ba\u015far\u0131s\u0131z oldu.<\/td>\n    <\/tr>\n    <tr>\n      <td data-label=\"Servis Ad\u0131\">User Service<\/td>\n      <td data-label=\"Log Seviyesi\">Info<\/td>\n      <td data-label=\"A\u00e7\u0131klama\">Kullan\u0131c\u0131 giri\u015f yapt\u0131.<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu t\u00fcr responsive tasar\u0131m ilkeleri, teknik i\u00e7eri\u011fin farkl\u0131 cihazlarda kolayca okunabilmesini sa\u011flar ve kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Alloy ve Loki'yi b\u00fcy\u00fck \u00f6l\u00e7ekli sistemlerde kullan\u0131rken, bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, g\u00f6zlemlenebilirlik altyap\u0131n\u0131z\u0131n hem performansl\u0131 hem de s\u00fcrd\u00fcr\u00fclebilir olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Sonu\u00e7: Modern G\u00fcnl\u00fckleme Yakla\u015f\u0131mlar\u0131 ile Operasyonel M\u00fckemmelli\u011fe Ula\u015fmak<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla evrilen ve s\u00fcrekli karma\u015f\u0131kla\u015fan dijital ortam\u0131nda, sistemlerimizin sa\u011fl\u0131\u011f\u0131n\u0131, performans\u0131n\u0131 ve g\u00fcvenli\u011fini sa\u011flamak i\u00e7in etkili bir g\u00fcnl\u00fck y\u00f6netimi stratejisi, art\u0131k sadece bir se\u00e7enek de\u011fil, bir zorunluluktur. Geleneksel g\u00fcnl\u00fckleme yakla\u015f\u0131mlar\u0131n\u0131n yetersiz kald\u0131\u011f\u0131 bu dinamik d\u00fcnyada, Grafana Alloy ve Loki ikilisi, modern g\u00f6zlemlenebilirlik gereksinimlerini kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc, maliyet etkin ve esnek bir \u00e7\u00f6z\u00fcm sunar. Bu kapsaml\u0131 k\u0131lavuz boyunca, Alloy'un g\u00fcnl\u00fckleri toplama ve i\u015fleme yeteneklerinden, Loki'nin etiket tabanl\u0131 d\u00fc\u015f\u00fck maliyetli depolama ve LogQL'in g\u00fc\u00e7l\u00fc sorgulama \u00f6zelliklerine kadar bir\u00e7ok konuyu ele ald\u0131k. Ayr\u0131ca, Grafana ile g\u00f6rselle\u015ftirme ve b\u00fcy\u00fck \u00f6l\u00e7ekli sistemler i\u00e7in optimizasyon ipu\u00e7lar\u0131 \u00fczerinde durduk.<\/p>\n<p>Grafana Alloy'un Prometheus'tan ilham alan River yap\u0131land\u0131rma dili sayesinde, farkl\u0131 formatlardaki g\u00fcnl\u00fckleri kolayca ayr\u0131\u015ft\u0131rabilir, zengin etiket setleriyle donatabilir ve istedi\u011finiz gibi y\u00f6nlendirebilirsiniz. Bu esneklik, her t\u00fcrl\u00fc uygulama ve altyap\u0131 g\u00fcnl\u00fcklerini merkezi bir \u015fekilde y\u00f6netmenizi sa\u011flar. Loki'nin \"sadece etiketle indeksleme\" felsefesi ise, depolama maliyetlerini dramatik bir \u015fekilde d\u00fc\u015f\u00fcr\u00fcrken, LogQL ile y\u00fcksek performansl\u0131 sorgulamalara olanak tan\u0131r. Sonu\u00e7 olarak, bu entegre \u00e7\u00f6z\u00fcm, ar\u0131za tespiti s\u00fcrelerini k\u0131salt\u0131r, operasyonel ekiplerin verimlili\u011fini art\u0131r\u0131r ve sistemleriniz hakk\u0131nda derinlemesine g\u00f6r\u00fcn\u00fcrl\u00fck sa\u011flayarak proaktif y\u00f6netim anlay\u0131\u015f\u0131n\u0131 destekler. Modern g\u00fcnl\u00fckleme yakla\u015f\u0131mlar\u0131n\u0131 benimseyerek, operasyonel m\u00fckemmelli\u011fe ula\u015fmak ve dijital hizmetlerinizin s\u00fcreklili\u011fini sa\u011flamak art\u0131k \u00e7ok daha eri\u015filebilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. Grafana Alloy, Promtail'in yerini mi ald\u0131?<\/strong><\/p>\n<p>Evet, Grafana Alloy, Promtail'in yerini alan yeni nesil telemetri ajan\u0131d\u0131r. Promtail yaln\u0131zca g\u00fcnl\u00fck toplamak i\u00e7in tasarlanm\u0131\u015fken, Alloy Prometheus metriklerini, Loki g\u00fcnl\u00fcklerini ve gelecekte OpenTelemetry izlerini de tek bir ajan \u00fczerinden, daha esnek bir yap\u0131land\u0131rma dili olan River ile toplama yetene\u011fine sahiptir. Bu nedenle, yeni kurulumlar i\u00e7in Alloy tercih edilmelidir.<\/p>\n<p><strong>2. Loki, tam metin arama (full-text search) yap\u0131yor mu?<\/strong><\/p>\n<p>Hay\u0131r, Loki g\u00fcnl\u00fck i\u00e7eri\u011fini tam metin olarak indekslemez. Bunun yerine, g\u00fcnl\u00fck ak\u0131\u015flar\u0131na atanan etiketleri indeksler. G\u00fcnl\u00fck i\u00e7eri\u011fi \u00fczerindeki aramalar, LogQL'in <code>|=<\/code> (i\u00e7erir) veya <code>|~<\/code> (regex e\u015fle\u015fir) gibi metin filtreleme operat\u00f6rleri ile yap\u0131l\u0131r ve bu, indekslenmi\u015f etiketlerle e\u015fle\u015fen ak\u0131\u015flar \u00fczerinde ger\u00e7ekle\u015ftirilir. Bu yakla\u015f\u0131m, maliyet etkinli\u011fi ve performans\u0131 art\u0131r\u0131r ancak di\u011fer baz\u0131 g\u00fcnl\u00fckleme \u00e7\u00f6z\u00fcmlerindeki kadar kapsaml\u0131 bir tam metin arama yetene\u011fi sunmaz.<\/p>\n<p><strong>3. Grafana Alloy sadece g\u00fcnl\u00fck toplamak i\u00e7in mi kullan\u0131l\u0131r, Prometheus entegrasyonu var m\u0131?<\/strong><\/p>\n<p>Hay\u0131r, Grafana Alloy sadece g\u00fcnl\u00fck toplamakla kalmaz, ayn\u0131 zamanda Prometheus metriklerini de toplayabilir. River yap\u0131land\u0131rma dili sayesinde, <code>prometheus.scrape<\/code> gibi bile\u015fenlerle Prometheus uyumlu hedeflerden metrikleri \u00e7ekebilir ve bunlar\u0131 Prometheus veya Mimir gibi metrik depolama \u00e7\u00f6z\u00fcmlerine g\u00f6nderebilir. Bu, Alloy'u hem metrik hem de g\u00fcnl\u00fck toplama i\u00e7in \u00e7ok y\u00f6nl\u00fc bir ajan yapar.<\/p>\n<p><strong>4. Alloy'un River yap\u0131land\u0131rma dili zor mu?<\/strong><\/p>\n<p>River yap\u0131land\u0131rma dili, Prometheus yap\u0131land\u0131rma modelinden esinlenerek tasarlanm\u0131\u015ft\u0131r ve Go programlama dilinden etkilenen basit bir s\u00f6zdizimine sahiptir. \u0130lk ba\u015fta biraz \u00f6\u011frenme e\u011frisi olabilir, ancak bile\u015fen bazl\u0131, deklaratif yap\u0131s\u0131 sayesinde olduk\u00e7a sezgiseldir. Karma\u015f\u0131k g\u00fcnl\u00fck i\u015fleme senaryolar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc esneklik sunar ve iyi dok\u00fcmantasyon ile h\u0131zl\u0131ca adapte olunabilir.<\/p>\n","protected":false},"excerpt":{"rendered":"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla geli\u015fen ve s\u00fcrekli b\u00fcy\u00fcyen dijital&hellip;","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":[1],"tags":[],"class_list":{"0":"post-35148","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?<\/title>\n<meta name=\"description\" content=\"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz\" \/>\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\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?\" \/>\n<meta property=\"og:description\" content=\"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-26T05:31:15+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=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?\",\"datePublished\":\"2025-11-26T05:31:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\"},\"wordCount\":5086,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\",\"name\":\"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-26T05:31:15+00:00\",\"description\":\"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?\"}]},{\"@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":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?","description":"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz","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\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/","og_locale":"tr_TR","og_type":"article","og_title":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?","og_description":"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz","og_url":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-26T05:31:15+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?","datePublished":"2025-11-26T05:31:15+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/"},"wordCount":5086,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/","url":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/","name":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-26T05:31:15+00:00","description":"Grafana Alloy ve Loki ile Modern G\u00fcnl\u00fck Y\u00f6netimi: Derinlemesine Bir K\u0131lavuz","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gunumuzun-karmasik-sistemlerinde-gunluk-yonetimi-neden-bu-kadar-kritik\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"G\u00fcn\u00fcm\u00fcz\u00fcn karma\u015f\u0131k sistemlerinde g\u00fcnl\u00fck y\u00f6netimi neden bu kadar kritik?"}]},{"@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\/35148","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=35148"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35148\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}