{"id":1558,"date":"2025-11-08T21:15:20","date_gmt":"2025-11-08T18:15:20","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/"},"modified":"2025-11-08T21:15:20","modified_gmt":"2025-11-08T18:15:20","slug":"vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/","title":{"rendered":"VPS Log Y\u00f6netimi Nas\u0131l Ray\u0131na Oturur? Grafana Loki + Promtail ile Merkezi Loglama, Tutma S\u00fcreleri ve Alarm Kurallar\u0131"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><h2 id=\"section-1\">Ofisteki Gece Yar\u0131s\u0131 Sessizli\u011finde Gelen \u0130lham: Neden Merkezi Loglama?<\/h2>\n<p>Hi\u00e7 gece yar\u0131s\u0131 telefonunuz \u00e7al\u0131p siteniz eri\u015filemez oldu\u011funda paniklediniz mi? Ben ya\u015fad\u0131m. Ekran kar\u015f\u0131s\u0131nda g\u00f6zler yar\u0131 kapal\u0131, SSH ile ba\u011flan, sistem g\u00fcnl\u00fcklerine bak, uygulama loglar\u0131n\u0131 ara, Nginx ayr\u0131 bir \u015fey s\u00f6yl\u00fcyor, uygulama ba\u015fka bir \u015fey&#8230; Par\u00e7al\u0131 log d\u00fcnyas\u0131nda kaybolmak bir iki dakikal\u0131k i\u015f de\u011fil; hele kritik bir ak\u015fam sat\u0131\u015f kampanyas\u0131 varsa dakikalar uzun, sab\u0131r k\u0131sa. O gece kendime \u015funu s\u00f6yledim: \u201cBu i\u015f b\u00f6yle olmayacak, loglar tek bir yerde olacak, aramas\u0131 kolay olacak, bir de alarm kuraca\u011f\u0131m ki sorun b\u00fcy\u00fcmeden haberim olsun.\u201d<\/p>\n<p>\u0130\u015fte bu yaz\u0131da tam da bu derdin ilac\u0131n\u0131 konu\u015faca\u011f\u0131z. <strong>VPS log y\u00f6netimi<\/strong>ni Grafana Loki ve Promtail ile nas\u0131l merkezile\u015ftiririz, hangi loglar\u0131 ne kadar s\u00fcre tutar\u0131z, gereksiz g\u00fcr\u00fclt\u00fcy\u00fc nas\u0131l azalt\u0131r\u0131z ve en \u00f6nemlisi g\u00fcvenilir alarm kurallar\u0131n\u0131 nas\u0131l oturturuz ad\u0131m ad\u0131m payla\u015faca\u011f\u0131m. Teknik ad\u0131 <em>observability<\/em> olsun, g\u00fcnl\u00fck dilde \u201cakl\u0131m ba\u015f\u0131mda kals\u0131n\u201d diyelim; amac\u0131m\u0131z stres azaltmak ve netlik kazanmak. Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Loglar tek bir pencereden ak\u0131yor, arama saniyeler i\u00e7inde, etiketler (labels) sayesinde filtrelemek \u00e7ocuk oyunca\u011f\u0131 ve alarmlar ger\u00e7ek sorunlar\u0131 i\u015faret ediyor. Kula\u011fa iyi geliyor, de\u011fil mi?<\/p>\n<h2 id=\"section-2\">Loki ve Promtail\u2019i Basit\u00e7e D\u00fc\u015f\u00fcnelim: Kim Ne \u0130\u015f Yapar?<\/h2>\n<p>\u0130lk bulu\u015ftu\u011fumda Loki\u2019yi \u015f\u00f6yle bir benzetmeyle kafama oturttum: Promtail sahadan haber toplayan muhabir, Loki edit\u00f6r masas\u0131, Grafana da gazetenin sayfa tasar\u0131mc\u0131s\u0131. Promtail, <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a>\u2019inizdeki dosyalardan, journald\u2019dan ya da konteyner loglar\u0131ndan sat\u0131rlar\u0131 toplar, baz\u0131lar\u0131n\u0131 etiketler, baz\u0131lar\u0131n\u0131 budar ve Lokiye g\u00f6nderir. Loki bu loglar\u0131 ucuz ve h\u0131zl\u0131 aranabilir bir yap\u0131da saklar, etiketler sayesinde istedi\u011finiz ak\u0131\u015f\u0131 saniyeler i\u00e7inde \u00f6n\u00fcn\u00fcze getirir. Sonra Grafana ile panolar kurar, LogQL ile esnek aramalar yapar, gerekirse alarmlar tan\u0131mlars\u0131n\u0131z.<\/p>\n<p>Bu \u00fc\u00e7l\u00fcden ho\u015fland\u0131\u011f\u0131m \u015fey, a\u011f\u0131r bir indeksleme yerine etiket temelli yakla\u015f\u0131m\u0131 tercih etmeleri. Bu sayede disk ve CPU t\u00fcketimi daha sakin; arad\u0131\u011f\u0131n\u0131z\u0131 bulma i\u015fi de etiketleri mant\u0131kl\u0131 se\u00e7ti\u011finiz s\u00fcrece gayet h\u0131zl\u0131. Dezavantaj taraf\u0131nda ise etiket patlamas\u0131na yol a\u00e7acak \u015fekilde her ayr\u0131nt\u0131y\u0131 label\u2019a d\u00f6n\u00fc\u015ft\u00fcr\u00fcrseniz i\u015fler sarpa sarabiliyor. Yani dozaj \u00f6nemli. Benim rutinim \u015fu: minimum ama anlaml\u0131 etiketler; \u00f6rne\u011fin <strong>app<\/strong>, <strong>env<\/strong>, <strong>host<\/strong> ve gerekiyorsa <strong>level<\/strong>. Geri kalan zenginlik log sat\u0131r\u0131nda kals\u0131n, gerekti\u011finde arar buluruz.<\/p>\n<p>Kurarken ak\u0131ll\u0131 bir yol, \u00f6nce k\u00fc\u00e7\u00fck bir uygulamayla test etmek. Bir iki servisle ba\u015flay\u0131n, etiketleri azdan \u00e7o\u011fa do\u011fru evriltin, sorgular\u0131n\u0131z yerini bulduk\u00e7a kal\u0131c\u0131 kurallara d\u00f6n\u00fc\u015ft\u00fcr\u00fcn. Zaten bir noktada \u201c\u015fu aramay\u0131 \u00e7ok s\u0131k yap\u0131yorum\u201d dedi\u011finiz anda etiket stratejiniz de kendili\u011finden netle\u015fiyor.<\/p>\n<h2 id=\"section-3\">VPS\u2019te Basit Bir Plan: Servisleri Nerede, Nas\u0131l Ko\u015fturaca\u011f\u0131z?<\/h2>\n<p>Benim pratikte kulland\u0131\u011f\u0131m iki yakla\u015f\u0131m var: Docker Compose ile \u00fc\u00e7l\u00fcy\u00fc (Loki, Promtail, Grafana) konteyner olarak aya\u011fa kald\u0131rmak ya da systemd servisleriyle \u00e7\u0131plak VPS \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak. Konteyner y\u00f6ntemi h\u0131zl\u0131 d\u00f6nmek i\u00e7in harika; systemd ise daha ince ayar istiyorsan\u0131z, disk yollar\u0131n\u0131 ve izinleri kendiniz kurgulamak istiyorsan\u0131z daha kontroll\u00fc. Hangisini tercih ederseniz edin, bir <strong>depolama klas\u00f6r\u00fc<\/strong> ay\u0131r\u0131n, log ve indeks dosyalar\u0131 i\u00e7in temiz bir yap\u0131 kurun, disk boyutunuzu da ger\u00e7ek\u00e7i tutun. Burada es ge\u00e7meyin; loglar b\u00fcy\u00fcmeyi sever, siz s\u0131n\u0131ra gelmeden s\u0131n\u0131r\u0131 onlara g\u00f6sterin.<\/p>\n<p>\u00d6rne\u011fin Promtail i\u00e7in basit bir yap\u0131land\u0131rma ile ba\u015flayabiliriz. Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Nginx, uygulama ve sistem loglar\u0131n\u0131 toplayal\u0131m, makul etiketler atal\u0131m, baz\u0131 gereksiz sat\u0131rlar\u0131 d\u00fc\u015felim, sonra Loki\u2019ye yollayal\u0131m. A\u015fa\u011f\u0131daki \u00f6rnek, dosya tabanl\u0131 log toplayan bir senaryo. \u00c7ok karma\u015f\u0131k de\u011fil, ama i\u015fi g\u00f6r\u00fcyor:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \/etc\/promtail\/config.yml\nserver:\n  http_listen_port: 9080\n  grpc_listen_port: 0\n\npositions:\n  filename: \/var\/lib\/promtail\/positions.yaml\n\nclients:\n  - url: http:\/\/127.0.0.1:3100\/loki\/api\/v1\/push\n\nscrape_configs:\n  - job_name: nginx\n    static_configs:\n      - targets: [&quot;localhost&quot;]\n        labels:\n          job: nginx\n          app: web\n          env: prod\n          __path__: \/var\/log\/nginx\/*.log\n    pipeline_stages:\n      - match:\n          selector: '{job=&quot;nginx&quot;}'\n          stages:\n            - regex:\n                expression: '^(?P&lt;remote_addr&gt;S+) S+ S+ [(?P&lt;time_local&gt;[^]]+)] &quot;(?P&lt;request&gt;[^&quot;]+)&quot; (?P&lt;status&gt;d+) (?P&lt;body_bytes_sent&gt;d+) &quot;(?P&lt;http_referer&gt;[^&quot;]*)&quot; &quot;(?P&lt;http_user_agent&gt;[^&quot;]*)&quot;'\n            - labels:\n                status:\n                http_user_agent:\n            - drop:\n                expression: '.*.healthcheck$'\n\n  - job_name: app\n    static_configs:\n      - targets: [&quot;localhost&quot;]\n        labels:\n          job: app\n          app: api\n          env: prod\n          __path__: \/var\/log\/myapp\/*.log\n    pipeline_stages:\n      - match:\n          selector: '{job=&quot;app&quot;}'\n          stages:\n            - multiline:\n                firstline: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'\n            - regex:\n                expression: 'level=(?P&lt;level&gt;w+)' \n            - labels:\n                level:\n            - match:\n                selector: '{level=&quot;debug&quot;}'\n                action: drop\n\n  - job_name: system\n    journal:\n      json: false\n      max_age: 24h\n      labels:\n        job: systemd\n        app: system\n        env: prod\n    relabel_configs:\n      - source_labels: ['__journal__systemd_unit']\n        target_label: 'unit'\n<\/code><\/pre>\n<p>Bu yap\u0131, uygulama loglar\u0131ndan <strong>debug<\/strong> sat\u0131rlar\u0131n\u0131 d\u00fc\u015fer, Nginx taraf\u0131nda gereksiz healthcheck isteklerini filtreler ve sistem g\u00fcnl\u00fcklerini de bir etikete ili\u015ftirir. Multiline a\u015famas\u0131 ise uzun stack trace kay\u0131tlar\u0131n\u0131 tek olay olarak birle\u015ftirir; \u00f6zellikle Java, .NET gibi platformlarda hayat kurtar\u0131r. Yal\u0131n ama i\u015fe yarar.<\/p>\n<p>E\u011fer konteyner d\u00fcnyas\u0131nda geziyorsan\u0131z, Docker loglar\u0131n\u0131 da Promtail ile do\u011frudan alabilirsiniz. Zamanla kendi ak\u0131\u015f\u0131n\u0131za en uygun y\u00f6ntemi buluyorsunuz. Bu arada konteyner tabanl\u0131 WordPress veya benzeri sistemlerde log y\u00f6netimine de\u011findi\u011fim \u015fu yaz\u0131 pratik olabilir: <a href=\"https:\/\/www.dchost.com\/blog\/docker-ile-wordpressi-vpste-nasil-yasatiriz-nginx-mariadb-redis-ve-lets-encrypt-ile-kalici-depolama-macerasi\/\">Docker ile WordPress\u2019i VPS\u2019te ya\u015fat\u0131rken loglar\u0131 nerede, nas\u0131l tuttu\u011fumu anlatt\u0131\u011f\u0131m rehber<\/a>. Benzer desenleri Promtail taraf\u0131nda da kullanabilirsiniz.<\/p>\n<h2 id=\"section-4\">Loki Taraf\u0131nda Saklama (Retention): Ne Kadar, Nerede ve Neden?<\/h2>\n<p>\u0130tiraf edeyim: En \u00e7ok sorulan soru \u201cNe kadar s\u00fcre log tutal\u0131m?\u201d oluyor. Burada tek do\u011fru yok. \u00dc\u00e7 \u015feye bak\u0131yorum: sorun \u00e7\u00f6zme al\u0131\u015fkanl\u0131\u011f\u0131 (geriye d\u00f6n\u00fck ne kadar inceliyorsunuz), mevzuat\/denetim gereksinimleri ve disk\/b\u00fct\u00e7e ger\u00e7ekleri. K\u00fc\u00e7\u00fck bir uygulama i\u00e7in 7\u201314 g\u00fcn genelde huzurlu bir b\u00f6lge. Trafi\u011fin yo\u011fun oldu\u011fu bir e\u2011ticaret i\u00e7in kritik loglar\u0131 daha uzun, g\u00fcr\u00fclt\u00fcy\u00fc daha k\u0131sa tutuyorum. Mesela <strong>ERROR<\/strong> seviyesindeki uygulama loglar\u0131 30 g\u00fcn, Nginx access loglar\u0131 7 g\u00fcn gibi. Ama bunu tek bir devreyle y\u00f6netmek yerine Loki\u2019nin retention mekanizmas\u0131n\u0131 kullanmak i\u015fleri kolayla\u015ft\u0131r\u0131yor.<\/p>\n<p>Loki\u2019nin yeni nesil kompakt\u00f6r (compactor) yap\u0131s\u0131yla saklama s\u00fcrelerini global veya etiket bazl\u0131 tan\u0131mlayabiliyorsunuz. Global bir tutma s\u00fcresi, i\u015fe ba\u015flamak i\u00e7in iyi bir taban. Daha incelikli ak\u0131\u015flar i\u00e7in belirli etiket kombinasyonlar\u0131yla daha k\u0131sa\/uzun tutma s\u00fcresi kurgulanabiliyor. Senaryonuz b\u00fcy\u00fcd\u00fck\u00e7e \u00fczerine in\u015fa edersiniz. A\u015fa\u011f\u0131daki \u00f6rnek, global bir s\u00fcreyi ve kompakt\u00f6r\u00fc etkinle\u015ftirir; dosya sistemiyle de gayet iyi \u00e7al\u0131\u015f\u0131r. \u00dcretimde obje depolama (S3\/GCS) \u015fart de\u011fil ama b\u00fcy\u00fcd\u00fck\u00e7e g\u00f6n\u00fcl rahatl\u0131\u011f\u0131 veriyor.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \/etc\/loki\/config.yml\nserver:\n  http_listen_port: 3100\n  grpc_listen_port: 9096\n\ncommon:\n  path_prefix: \/var\/lib\/loki\n  storage:\n    filesystem:\n      chunks_directory: \/var\/lib\/loki\/chunks\n      rules_directory: \/var\/lib\/loki\/rules\n  replication_factor: 1\n  ring:\n    instance_addr: 127.0.0.1\n    kvstore:\n      store: inmemory\n\nschema_config:\n  configs:\n    - from: 2024-01-01\n      store: tsdb\n      object_store: filesystem\n      schema: v13\n      index:\n        prefix: index_\n        period: 24h\n\nlimits_config:\n  reject_old_samples: true\n  reject_old_samples_max_age: 168h  # 7 g\u00fcn\n  retention_period: 168h            # global saklama (7 g\u00fcn)\n\ncompactor:\n  working_directory: \/var\/lib\/loki\/compactor\n  shared_store: filesystem\n  compactor_ring:\n    kvstore:\n      store: inmemory\n  retention_enabled: true\n\nruler:\n  alertmanager_url: http:\/\/127.0.0.1:9093\n  rule_path: \/var\/lib\/loki\/rules-temp\n  storage:\n    type: local\n    local:\n      directory: \/var\/lib\/loki\/rules\n  ring:\n    kvstore:\n      store: inmemory\n  enable_api: true\n<\/code><\/pre>\n<p>Bu yap\u0131 \u00f6zetle \u015funu diyor: Tutma s\u00fcrem 7 g\u00fcn, kompakt\u00f6r etkin, kurallar ve depolar dosya sistemi \u00fczerinde. Daha ayr\u0131nt\u0131l\u0131 ve ak\u0131\u015f bazl\u0131 saklama i\u00e7in <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/\" rel=\"nofollow noopener\" target=\"_blank\">Loki\u2019nin resmi dok\u00fcmantasyonu<\/a> iyi bir yol arkada\u015f\u0131; etiket se\u00e7icilerle belli uygulama ve seviyeler i\u00e7in farkl\u0131 s\u00fcreler tan\u0131mlayabiliyorsunuz. Burada bir tavsiye: \u00f6nce global bir s\u00fcre belirleyin, disk bask\u0131s\u0131n\u0131 hissedince ya da i\u015f ihtiyac\u0131 do\u011funca ak\u0131\u015f baz\u0131nda uzat\u0131p k\u0131salt\u0131n. K\u00e2\u011f\u0131t \u00fczerinde m\u00fckemmel olan, pratikte nadiren m\u00fckemmel.<\/p>\n<p>Uzun s\u00fcre saklama gerektiren kurumlar i\u00e7in s\u0131cak-so\u011fuk yakla\u015f\u0131m\u0131 seviyorum. S\u0131cak tarafta Loki\u2019de g\u00fcncel loglar, so\u011fuk tarafta ise s\u0131k eri\u015filmeyen ar\u015fivler. So\u011fuk taraf\u0131 S3 uyumlu depoya at\u0131p, gerekti\u011finde geri alma stratejisi kurulabilir. Bu konuda <a href=\"https:\/\/www.dchost.com\/blog\/restic-ve-borg-ile-s3-uyumlu-uzak-yedekleme-surumleme-sifreleme-ve-saklama-ne-zaman-nasil\/\">S3 uyumlu uzak yedekleme ve saklama \u00fczerine anlatt\u0131klar\u0131m<\/a> size fikir verebilir; log ar\u015fivi de temelde ayn\u0131 mant\u0131kla ak\u0131yor.<\/p>\n<h2 id=\"section-5\">Promtail ile G\u00fcr\u00fclt\u00fcy\u00fc Azaltmak: Etiketler, Multiline ve \u0130nce Ayar<\/h2>\n<p>Promtail taraf\u0131nda k\u00fc\u00e7\u00fck dokunu\u015flar b\u00fcy\u00fck rahatl\u0131k getiriyor. Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: \u00dcretimde debug sat\u0131rlar\u0131na nadiren bak\u0131yorsunuz, ama onlar log hacmini \u015fi\u015firiyor. \u0130lk a\u015famada debug\u2019u d\u00fc\u015fmek bile disk ve a\u011f kullan\u0131m\u0131n\u0131 belirgin azalt\u0131r. Bir de gereksiz sa\u011fl\u0131k kontrollerini (healthcheck) filtrelediniz mi, Nginx trafi\u011fi yar\u0131 yar\u0131ya sakinle\u015febiliyor. Bunlar k\u00fc\u00e7\u00fck ama etkili.<\/p>\n<p>Etiket se\u00e7iminde cimri olun derim. Kullan\u0131\u015fl\u0131 bir set genelde \u015funlardan olu\u015fuyor: <strong>app<\/strong> (hangi uygulama), <strong>env<\/strong> (ortam: dev\/stage\/prod), <strong>host<\/strong> (sunucu ad\u0131), <strong>job<\/strong> (kaynak). Opsiyonel olarak <strong>level<\/strong> ve belli durumlarda <strong>status<\/strong>. Her kullan\u0131c\u0131 kimli\u011fi, her istek URL\u2019si, her parametre etiket olursa Loki\u2019nin g\u00fc\u00e7l\u00fc yan\u0131n\u0131 zay\u0131f noktaya \u00e7evirirsiniz. \u0130htiya\u00e7 olunca log sat\u0131r\u0131ndan arar buluruz; gerekirse sonra etiketleriz.<\/p>\n<p>Multiline kurallar\u0131 ise ayr\u0131 bir nimettir. Java stack trace, Python trace, Node.js hata y\u0131\u011f\u0131nlar\u0131; hepsi tek olay olarak birle\u015fince hem analiz hem alarm kurallar\u0131 derli toplu olur. <strong>firstline<\/strong> deseninizi uygulaman\u0131z\u0131n log format\u0131na g\u00f6re ayarlay\u0131n ve test edin. Bu test i\u00e7in en iyi y\u00f6ntem, bir staging ortam\u0131nda ger\u00e7ek loglar\u0131 birka\u00e7 g\u00fcn izlemek. Kendi deneyimimde, multiline\u2019\u0131 oturtunca yanl\u0131\u015f alarm say\u0131s\u0131 hissedilir \u015fekilde d\u00fc\u015f\u00fcyor.<\/p>\n<p>Bir not da g\u00fcvenlik i\u00e7in. Loglar, hassas bilgiler s\u0131zd\u0131rma konusunda sinsidir. Promtail pipeline\u2019\u0131na k\u00fc\u00e7\u00fck bir redaction (maskleme) a\u015famas\u0131 ekleyip e\u2011posta, token, kredi kart\u0131 benzeri desenleri y\u0131ld\u0131zlamak i\u015finizi kolayla\u015ft\u0131r\u0131r. Do\u011fru yerde bir <strong>regex<\/strong> ve <strong>replace<\/strong> a\u015famas\u0131, ileride \u00e7ok \u015fey kurtar\u0131r.<\/p>\n<h2 id=\"section-6\">Grafana ile Arama, Pano ve Alarm: LogQL\u2019e Dost\u00e7a Bir Bak\u0131\u015f<\/h2>\n<p>Gelelim i\u015fin e\u011flenceli k\u0131sm\u0131na. Grafana\u2019da Loki veri kayna\u011f\u0131n\u0131 ekleyip ilk sorgunuzu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda \u201cVay be\u201d dedirten o an\u0131 hat\u0131rl\u0131yorum. LogQL, Prometheus mant\u0131\u011f\u0131n\u0131 arkas\u0131na alm\u0131\u015f; \u00e7ok sert de\u011fil, ama g\u00fc\u00e7l\u00fc. Basit ba\u015flay\u0131n: <code>{app=\"api\", env=\"prod\"}<\/code> ile ak\u0131\u015f\u0131 yakalay\u0131p bir de <code>|= \"ERROR\"<\/code> ekleyin. Sonra \u201cka\u00e7 taneymi\u015f bunlar\u201d diyorsan\u0131z <code>count_over_time({app=\"api\", env=\"prod\"} |= \"ERROR\" [5m])<\/code> sizi hedefe g\u00f6t\u00fcr\u00fcr.<\/p>\n<p>Mesela \u015f\u00f6yle bir alarm d\u00fc\u015f\u00fcnelim: Son 5 dakikada bir uygulaman\u0131n hata sat\u0131rlar\u0131 belirli bir e\u015fi\u011fi a\u015ft\u0131ysa haber ver. Bunu iki yolla kurabilirsiniz. Birincisi, Grafana\u2019n\u0131n kendi alerting sistemiyle bir panelden kural t\u00fcretmek. \u0130kincisi, Loki\u2019nin ruler bile\u015feniyle LogQL tabanl\u0131 alarmlar\u0131 do\u011frudan Alertmanager\u2019a iletmek. Ben \u00e7o\u011fu zaman Grafana \u00fczerinden ba\u015fl\u0131yorum; g\u00f6rsel aray\u00fcz g\u00f6z dolduruyor, sonra kal\u0131c\u0131 hale getirmek i\u00e7in provisioning ekliyorum. Ruler yoluyla kal\u0131c\u0131 kurallar isterseniz a\u015fa\u011f\u0131daki gibi bir \u00f6rnek i\u015finizi g\u00f6r\u00fcr:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># \/var\/lib\/loki\/rules\/app-alerts.yml\ngroups:\n  - name: loki-app-alerts\n    rules:\n      - alert: UygulamaHataOraniYuksek\n        expr: sum(rate({app=&quot;api&quot;, env=&quot;prod&quot;} |= &quot;ERROR&quot; [5m])) by (app) &gt; 1\n        for: 2m\n        labels:\n          severity: warning\n        annotations:\n          summary: &quot;API uygulamas\u0131nda hata oran\u0131 y\u00fckseldi&quot;\n          description: &quot;Son 5 dakikada hata sat\u0131rlar\u0131 e\u015fi\u011fi a\u015ft\u0131. Bak\u0131lmas\u0131 \u00f6nerilir.&quot;\n<\/code><\/pre>\n<p>Buradaki <strong>for<\/strong> s\u00fcresi, anl\u0131k s\u0131\u00e7ramalar\u0131 elemek i\u00e7in \u00f6nemli. Bir dakika \u015fans eseri bir iki hata g\u00f6r\u00fcnd\u00fc diye telefonunuz \u00e7almas\u0131n; as\u0131l kal\u0131c\u0131 bozulmalar\u0131 tespit edin. E\u015fik de\u011ferini de ger\u00e7ek kullan\u0131m\u0131n\u0131za g\u00f6re ayarlay\u0131n. \u0130lk g\u00fcn y\u00fcksekten ba\u015flay\u0131n, g\u00fcr\u00fclt\u00fc yoksa d\u00fc\u015f\u00fcr\u00fcn. Tam tersi durumda e\u015fikleri biraz y\u00fckseltin ya da filtreyi daralt\u0131n. LogQL taraf\u0131nda yeniyseniz bu ikili kaynak \u00e7ok faydal\u0131: <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/\" rel=\"nofollow noopener\" target=\"_blank\">Loki\u2019nin resmi dok\u00fcmantasyonu<\/a> ve <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/alerting\/\" rel=\"nofollow noopener\" target=\"_blank\">Grafana\u2019n\u0131n yeni alerting sistemi<\/a>.<\/p>\n<p>Kendi pratiklerimden birka\u00e7\u0131 \u015f\u00f6yle: Hata oran\u0131 i\u00e7in uyar\u0131 ve kritik olmak \u00fczere iki e\u015fik kullan\u0131yorum; kritik alarmda telefon, uyar\u0131da Slack yeterli. Nginx 5xx dalgalanmalar\u0131n\u0131 ayr\u0131 ele al\u0131yorum; uygulama seviyesindeki hatalarla kar\u0131\u015fmas\u0131n. Bir de geceleri otomatik deploy yap\u0131yorsan\u0131z, o zaman diliminde k\u0131sa s\u00fcreli \u201cdeploy penceresi\u201d gerekebiliyor. Bu arada canl\u0131ya ge\u00e7i\u015f, servis y\u00f6netimi ve log d\u00fczeninin birbirini nas\u0131l tamamlad\u0131\u011f\u0131n\u0131 \u015fu yaz\u0131da \u00f6rneklerle konu\u015ftuk: <a href=\"https:\/\/www.dchost.com\/blog\/node-jsi-canliya-alirken-panik-yapma-pm2-systemd-nginx-ssl-ve-sifir-kesinti-deploy-nasil-kurulur\/\">PM2\/Systemd ve Nginx ile canl\u0131ya al\u0131rken panik yapmamak<\/a>. Alarmlar\u0131n gereksiz tetiklenmesini azaltmak i\u00e7in oradaki deploy ritmini de oyuna kat\u0131n.<\/p>\n<h2 id=\"section-7\">G\u00fcnl\u00fck Hayatta K\u00fc\u00e7\u00fck Dokunu\u015flar: Disk, Yedek, CI\/CD ve Temizlik<\/h2>\n<p>\u0130\u015fin bir de i\u015fletme taraf\u0131 var. Disk b\u00fcy\u00fcy\u00fcp doldu\u011funda kimse mutlu olmaz. Loki\u2019nin <strong>retention<\/strong> ayarlar\u0131 tamam ama yine de <strong>du<\/strong> ve <strong>df<\/strong> ile d\u00fczenli \u00f6l\u00e7\u00fcm iyidir; Grafana\u2019da basit bir panelle disk kullan\u0131m\u0131n\u0131 izlemek i\u00e7in Node Exporter gibi ara\u00e7lar\u0131 da oyuna katabilirsiniz. Temel ihtiya\u00e7 \u015fu: S\u0131n\u0131r\u0131n yak\u0131n\u0131nda alarm \u00e7als\u0131n, siz de saklama s\u00fcresini veya filtrelemeyi ayarlay\u0131n.<\/p>\n<p>Yedekleme k\u0131sm\u0131nda, loglar kritik bir denetim izi ta\u015f\u0131yorsa, sadece \u201csaklama s\u00fcresi var\u201d diye rahat etmeyin. Zaman zaman anl\u0131k ar\u015fiv almak iyi hissettirir. Burada <a href=\"https:\/\/www.dchost.com\/blog\/restic-ve-borg-ile-s3-uyumlu-uzak-yedekleme-surumleme-sifreleme-ve-saklama-ne-zaman-nasil\/\">restic ve borg ile S3 uyumlu uzak yedekleme<\/a> yaz\u0131s\u0131nda anlatt\u0131\u011f\u0131m yakla\u015f\u0131m, log ar\u015fivleri i\u00e7in de uygulanabilir. Elbette gizlilik ve maskeleme kurallar\u0131n\u0131 d\u0131\u015far\u0131 atmadan \u00f6nce iki kez kontrol edin.<\/p>\n<p>CI\/CD hatt\u0131n\u0131z varsa, log ak\u0131\u015f\u0131na deploy bilgisini etiket olarak ili\u015ftirmek \u00e7ok i\u015fe yarar. S\u00fcr\u00fcm numaras\u0131 ya da git SHA\u2019y\u0131 bir ortam de\u011fi\u015fkeni olarak uygulama loglar\u0131na eklemek, \u201cBu hata hangi s\u00fcr\u00fcmde g\u00f6r\u00fcnmeye ba\u015flad\u0131?\u201d sorusunun s\u00fcresini dakikalardan saniyelere indirir. CI\/CD taraf\u0131n\u0131 detayl\u0131 ele ald\u0131\u011f\u0131m <a href=\"https:\/\/www.dchost.com\/blog\/vpse-sifir-kesinti-ci-cd-nasil-kurulur-rsync-sembolik-surumler-ve-systemd-ile-sicacik-bir-yolculuk\/\">s\u0131f\u0131r kesinti CI\/CD rehberini<\/a> okursan\u0131z, bu ba\u011f\u0131 kurmak kolayla\u015f\u0131r. Ayr\u0131ca loglar\u0131n merkezi bir yerde toplanmas\u0131n\u0131n, da\u011f\u0131t\u0131ma haz\u0131rl\u0131k ve geri alma s\u00fcre\u00e7lerinde nas\u0131l moral verdi\u011fini g\u00f6receksiniz.<\/p>\n<p>Kapan\u0131\u015f\u0131 k\u00fc\u00e7\u00fck bir hat\u0131rlatmayla yapay\u0131m: Merkezi loglama tek ba\u015f\u0131na kahraman de\u011fil; izleme ve \u00f6l\u00e7\u00fcm ailesinin bir \u00fcyesi. Ben loglar\u0131 Grafana panolar\u0131, metrikler ve ping\/uptime kontrolleriyle birlikte kuruyorum. Bu b\u00fct\u00fcn\u00fc, daha \u00f6nce anlatt\u0131\u011f\u0131m <a href=\"https:\/\/www.dchost.com\/blog\/merkezi-loglama-ve-gozlemlenebilirlik-vpste-loki-promtail-grafana-ile-sakin-kalan-bir-zihin\/\">merkezi loglama ve g\u00f6zlemlenebilirlik \u00fczerine yaz\u0131da<\/a> daha geni\u015f \u00e7er\u00e7evede irdeledik. Hepsi bir arada olunca hem sakin, hem h\u0131zl\u0131 karar veren bir sistem do\u011fuyor.<\/p>\n<h2 id=\"section-8\">Son R\u00f6tu\u015flar: Taktikler, Tuzaklar ve Sa\u011fduyu<\/h2>\n<p>Biraz da sahadaki minik dersler. Fazla etiket, g\u00fczel g\u00f6r\u00fcnen ama pahal\u0131 bir al\u0131\u015fkanl\u0131kt\u0131r; \u00f6l\u00e7\u00fcl\u00fc olun. Bir anda alarm ya\u011fmuruna tutulduysan\u0131z, sorun \u00e7o\u011fu zaman <strong>e\u015fik<\/strong> ya da <strong>pencere<\/strong> boyutudur; \u00f6nce \u201cfor\u201d s\u00fcresini art\u0131rarak deneyin. Multiline kurallar\u0131 her \u015feyi sihirli de\u011fnekle d\u00fczeltmez; baz\u0131 uygulamalar \u00f6zel format kullan\u0131r, birka\u00e7 revizyon gerekebilir. Nginx taraf\u0131nda 4xx ile 5xx\u2019leri ayn\u0131 kekin dilimi gibi d\u00fc\u015f\u00fcnmeyin; biri kullan\u0131c\u0131 kaynakl\u0131, di\u011feri genelde sunucu kaynakl\u0131d\u0131r; alarm mant\u0131\u011f\u0131 ayr\u0131 olunca de\u011ferlendirme daha tutarl\u0131 olur.<\/p>\n<p>Dok\u00fcmantasyona sar\u0131lmay\u0131 da unutmay\u0131n. Loki i\u00e7in <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/\" rel=\"nofollow noopener\" target=\"_blank\">Loki\u2019nin resmi dok\u00fcmantasyonu<\/a> a\u00e7\u0131k ve g\u00fcncel, Promtail\u2019in detaylar\u0131 i\u00e7in <a href=\"https:\/\/grafana.com\/docs\/loki\/latest\/clients\/promtail\/\" rel=\"nofollow noopener\" target=\"_blank\">Promtail yap\u0131land\u0131rma rehberi<\/a> elinizin alt\u0131nda dursun. Ad\u0131m ad\u0131m giderseniz k\u0131sa s\u00fcrede \u201cBunu daha \u00f6nce niye yapmam\u0131\u015f\u0131m\u201d noktas\u0131na geliyorsunuz. Ve son bir not: Log y\u00f6netimi canl\u0131 bir organizma. Bug\u00fcn \u00e7al\u0131\u015fan ayar, yar\u0131n trafi\u011finiz de\u011fi\u015fince k\u00fc\u00e7\u00fck bir dokunu\u015f isteyebilir. Sa\u011fduyuyu elden b\u0131rakmadan \u00f6l\u00e7, g\u00f6zle, ayarla d\u00f6ng\u00fcs\u00fcn\u00fc al\u0131\u015fkanl\u0131k haline getirin.<\/p>\n<h2 id=\"section-9\">Kapan\u0131\u015f: Sakin Zihin, Net Loglar ve G\u00fcvenilir Alarmlar<\/h2>\n<p>Toparlayal\u0131m. VPS\u2019te log y\u00f6netimini ray\u0131na oturtmak i\u00e7in dev bir b\u00fct\u00e7eye ya da devasa bir k\u00fcmeye ihtiyac\u0131n\u0131z yok. Grafana Loki ve Promtail, do\u011fru se\u00e7ilmi\u015f etiketler ve ak\u0131ll\u0131 filtrelerle son derece pratik bir merkez sunuyor. Saklama s\u00fcresini \u00f6nce makul bir seviyede ba\u015flat\u0131n; disk kullan\u0131m\u0131n\u0131 izledik\u00e7e, i\u015f ihtiya\u00e7lar\u0131n\u0131za g\u00f6re uzat\u0131p k\u0131salt\u0131n. Alarm kurallar\u0131nda k\u00fc\u00e7\u00fck ad\u0131mlarla gidin; gereksiz bildirimleri eleyip ger\u00e7ekten \u00f6nemi olan olaylar\u0131 \u00f6ne \u00e7\u0131kar\u0131n. S\u00fcr\u00fcm bilgisi gibi zenginle\u015ftirici detaylar\u0131 loglara ili\u015ftirin; sorun giderme seanslar\u0131 daha k\u0131sa, daha keyifli ge\u00e7sin.<\/p>\n<p>Umar\u0131m bu yaz\u0131 size fikir vermi\u015ftir. Ben bu d\u00fczeni kurduktan sonra gece yar\u0131s\u0131 gelen telefonlar azald\u0131; gelse bile panik yerine bir plan\u0131m oluyor. Siz de kendi ak\u0131\u015f\u0131n\u0131za uyarlay\u0131n, ufak bir servisle ba\u015flay\u0131n, sonra yayg\u0131nla\u015ft\u0131r\u0131n. Tak\u0131ld\u0131\u011f\u0131n\u0131z yerde d\u00f6n\u00fcp bir kez daha bakabilece\u011finiz bir rehber b\u0131rakmak istedim. Bir dahaki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere; loglar\u0131n\u0131z sakin, alarmlar\u0131n\u0131z tam yerinde \u00e7als\u0131n.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Ofisteki Gece Yar\u0131s\u0131 Sessizli\u011finde Gelen \u0130lham: Neden Merkezi Loglama? Hi\u00e7 gece yar\u0131s\u0131 telefonunuz \u00e7al\u0131p siteniz eri\u015filemez oldu\u011funda paniklediniz mi? Ben ya\u015fad\u0131m. Ekran kar\u015f\u0131s\u0131nda g\u00f6zler yar\u0131 kapal\u0131, SSH ile ba\u011flan, sistem g\u00fcnl\u00fcklerine bak, uygulama loglar\u0131n\u0131 ara, Nginx ayr\u0131 bir \u015fey s\u00f6yl\u00fcyor, uygulama ba\u015fka bir \u015fey&#8230; Par\u00e7al\u0131 log d\u00fcnyas\u0131nda kaybolmak bir iki dakikal\u0131k i\u015f de\u011fil; hele kritik [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1559,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1558","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1558"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1558\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1559"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}