Sıfırdan Zirveye Enterprise Observability: Docker, Prometheus, Grafana ve Loki ile Çözülemeyen “No…
Gelişen mikroservis mimarilerinde ve büyük veri altyapılarında, sistemlerin anlık durumunu görememek (kör uçuşu yapmak), production…

Sıfırdan Zirveye Enterprise Observability: Docker, Prometheus, Grafana ve Loki ile Çözülemeyen “No Labels Found” Gizemi
Gelişen mikroservis mimarilerinde ve büyük veri altyapılarında, sistemlerin anlık durumunu görememek (kör uçuşu yapmak), production ortamlarında felakete davetiye çıkarmaktır. Bir sistemin donanım metriklerini, canlı log akışlarını ve akıllı alarm mekanizmalarını tek bir merkezde toplamak, modern DevOps ve Veri Mühendisliğinin kalbidir.
Bu yazıda; Prometheus, Grafana, Loki ve Node Exporter kullanarak sıfırdan kurumsal bir Gözlemlenebilirlik (Observability) Altyapısı kuracağız. Ancak bu yazı sadece “kusursuz çalışan” bir rehber değil; Windows ortamında Docker Desktop kullanırken karşımıza çıkan inatçı kilitlenmeleri ve meşhur Grafana Loki “No labels found” hatasını nasıl gerçek bir mühendislik yaklaşımıyla çözdüğümüzün hikayesidir!
🎯 1. Projenin Amacı ve İş Hayatındaki Önemi Ne?
Büyük ölçekli veri hatlarında (Data Pipelines) veya mikroservis sistemlerinde bir hata oluştuğunda şu soruların cevabını ararız:
- Hata anında sunucunun RAM ve CPU kullanımı ne durumdaydı? (Metrik)
- Konteynerler o saniyede tam olarak hangi teknik hatayı fırlattı? (Log)
- Sistem kritik eşiğe geldiğinde mühendislere haber verildi mi? (Alarm)
Bu Proje Nerelerde Kullanılır?
- Büyük Veri & MLOps Altyapıları: Apache Spark, Kafka veya Airflow gibi dağıtık sistemlerin kaynak tüketimlerini izlemede.
- Kurumsal Mikroservisler: Docker ve Kubernetes üzerinde koşan onlarca servisin loglarını tek bir merkezde filtrelemede.
- Sistem Yönetimi (SysAdmin & SAP Basis): Sunucu sağlığını saniyelik takip edip kesintileri (Downtime) minimize etmede.
🏗️ 2. Mimari Yapı ve Kullanılan Teknolojiler
Altyapımızı tamamen izole ve kurumsal bir Docker köprü ağı (observability_mesh) üzerinde kurguladık:
- Node Exporter: İşletim sisteminin çekirdeğine inerek CPU, bellek ve disk metriklerini ham olarak toplar.
- Prometheus: Node Exporter’ın topladığı bu ham metrikleri belirli aralıklarla (scraping) çekip saklayan zaman serisi veritabanıdır (TSDB).
- Grafana Loki: Logların Prometheus’u olarak bilinir. Logları indekslemek yerine etiketleyerek (metadata) saklar ve yüksek performans sunur.
- Grafana: Tüm bu metrik, log ve alarmları jilet gibi arayüzlerde birleştiren merkezi izleme panelimiz.
🛠️ 3. Kurumsal Konfigürasyon: docker-compose.yml
Projemizi ayağa kaldırırken kullandığımız, her servis için merkezi loglama kuralının mühürlendiği nihaî production-ready dosyamız:
version: '3.8'
networks:
observability_mesh:
driver: bridge
# Konteyner loglarını doğrudan Loki'ye üfleyen sürücü tanımı
x-logging: &default-logging
logging:
driver: loki
options:
loki-url: "http://localhost:3100/loki/api/v1/push"
services:
# 1. NODE EXPORTER
node-exporter:
image: prom/node-exporter:v1.8.0
container_name: enterprise_node_exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)'
networks:
- observability_mesh
restart: unless-stopped
<<: *default-logging
# 2. PROMETHEUS
prometheus:
image: prom/prometheus:v2.51.0
container_name: enterprise_prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
ports:
- "9090:9090"
networks:
- observability_mesh
depends_on:
- node-exporter
restart: unless-stopped
<<: *default-logging
# 3. GRAFANA
grafana:
image: grafana/grafana:10.4.1
container_name: enterprise_grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
networks:
- observability_mesh
depends_on:
- prometheus
restart: unless-stopped
<<: *default-logging
# 4. GRAFANA LOKI
loki:
image: grafana/loki:2.9.4
container_name: enterprise_loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- observability_mesh
restart: unless-stopped
volumes:
prometheus_data:
driver: local
grafana_data:
driver: local
🛑 4. Savaş Hikayesi: Karşılaştığımız Sürekli Hatalar ve Çözümleri
Mühendislik, dökümantasyondaki her şeyin tıkır tıkır çalışmadığı anlarda başlar. İşte bizim bu projede saatlerce göğüs göğüse çarpıştığımız o kritik hatalar:
Hata 1: Windows Dosya İzinleri ve Kilitlenmeler (docker compose down Çıkmazı)
Sistemi tazelemek için docker compose down --images local --volumes komutunu çalıştırdığımızda terminalden unknown flag: --images uyarısı aldık. Bazı Docker CLI sürümleri bu parametreyi doğrudan desteklemez.
- Çözüm: İmajları ve diskleri güvenli bir şekilde eritmek için doğru sözdiziminin
**docker compose down --rmi local --volumes** olduğunu saptadık ve kilitli kalıntıları temizledik.
Hata 2: Loki Bağlantı Kilitleri (“Unable to connect with Loki”)
Sıfırlama sonrası Grafana arayüzünden Loki’ye bağlanmak istediğimizde kırmızı bir hata kutusu bizi karşıladı: “Unable to connect with Loki.” Windows dosya sistemi, Docker birimleri (volumes) üzerindeki kilitleri bırakmadığı için Loki diske yazma yapamıyor ve çöküyordu.
- Çözüm: Loki’nin
commandsatırındaki depolama parametrelerini en yalın hale getirerek, Windows izin engellerine çalım attık ve Loki'nin tamamen stabil ve hafif çalışmasını sağladık. Tarayıcıdahttp://localhost:3100/readyadresinde**ready** mesajını mühürledik.
🔍 Hata 3: Büyük Kabus — Label Browser’ın Bir Türlü Açılmaması ve “No Labels Found” Krizi
Gözlemlenebilirlik ağımız ayaktaydı, Grafana Loki’ye yeşil ışık yakarak bağlanmıştı. Ancak Grafana **Explore sekmesine gidip `Label browser` butonuna tıkladığımızda saatlerce o sinir bozucu hatayı gördük: "No labels found."**
Loki oradaydı, Grafana oradaydı ama içeride tek bir etiket (container_name, job vb.) yoktu. Bu kör noktayı tam 3 aşamalı bir mühendislik hamlesiyle çözdük:
1. Perde: Eksik Docker Log Sürücüsünün Keşfi
Terminalde docker plugin disable loki --force komutunu verdiğimizde acı gerçekle yüzleştik: plugin "loki" not found. Bilgisayarımızda Docker'ın logları yakalayıp Loki'ye üfleyecek bir sürücü eklentisi (driver) kurulmamıştı! Hemen sistem düzeyinde eklentiyi kurduk:
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
2. Perde: YAML Dosyasındaki Gizli Bağlantı (YAML Anchors)
Eklentiyi kurmak yetmezdi; Docker konteynerlerine loglarını bu eklentiye basması gerektiğini söylemeliydik. docker-compose.yml dosyamızın tepesine x-logging objesini tanımladık ve izlemek istediğimiz her servisin altına **<<: *default-logging** köprüsünü miras bıraktık.
3. Perde: Hard Reset ve Mutlu Son
Tüm bu ayarlardan sonra köprülerin uyanması için konteynerleri tamamen aşağı çekip zorla yeniden oluşturduk:
docker compose down --volumes
docker compose up -d
Grafana Explore ekranına dönüp Label browser butonuna tıkladığımızda; container_name, compose_project gibi tüm kurumsal etiketler jilet gibi listelendi! container_name -> enterprise_grafana -> Show Logs dediğimiz an canlı log şelalesi ekranda akmaya başladı.
🚨 5. Proaktif Yaklaşım: Akıllı Alarm (Alerting) Katmanı
Sadece izlemek yetmez, sistem kendi kendini korumalıydı. Grafana üzerinde kurumsal bir alarm kuralı (Alert Rule) kurguladık.
- Kural:
Enterprise_Alertsadında yeni bir klasör ve dakikalık kontrol sağlayanram-check-groupoluşturduk. - Eşik Değer (Threshold): Eğer test makinemizin RAM kullanımı %50'nin üzerine çıkarsa (
IS ABOVE 50), alarm durumu 5 dakika beklemek yerine 1 dakika içinde (Pending->Firing) kırmızıya dönecek şekilde optimize edildi.
🎯 Sonuç ve Kazanımlar
Bu projenin sonunda, bir production ortamında karşılaşılabilecek en zorlu senaryolardan birini simüle ettik. Windows işletim sisteminin dosya sınırlarını, Docker eklenti mimarisini ve Grafana Loki’nin etiketleme mantığını derinlemesine tecrübe ettik.
Artık arkamızda; metrikleriyle canlı grafik çizen, loglarıyla satır satır konuşan ve anomalilerde alarm fırlatan canavar gibi bir altyapı var!
Eğer siz de mikroservislerinizde “No labels found” hatasıyla boğuşuyorsanız, Docker sürücülerinizi ve YAML miras yapılarınızı kontrol etmeyi unutmayın! Sorularınızı yorumlarda tartışabiliriz. 🛠️
메타데이터
- post_id
- bb64c35824f9
- slug
- sıfırdan-zirveye-enterprise-observability-docker-prometheus-grafana-ve-loki-ile-çözülemeyen-no-bb64c35824f9
- url
- https://medium.com/@bengisubostanci0/s%C4%B1f%C4%B1rdan-zirveye-enterprise-observability-docker-prometheus-grafana-ve-loki-ile-%C3%A7%C3%B6z%C3%BClemeyen-no-bb64c35824f9
- canonical_url
- https://medium.com/@bengisubostanci0/s%C4%B1f%C4%B1rdan-zirveye-enterprise-observability-docker-prometheus-grafana-ve-loki-ile-%C3%A7%C3%B6z%C3%BClemeyen-no-bb64c35824f9
- author_url
- https://medium.com/@bengisubostanci0
- status
- ok
- fetched_at
- 2026-06-20 20:29:01