Replace the single-purpose Dozzle log viewer with a comprehensive monitoring stack covering metrics, container telemetry, and persistent log aggregation. Stack changes (docker-stack-service.yml -> docker-stack-monitoring.yml): - remove Dozzle service and dozzle_users Docker secret - add Portainer CE + portainer-agent (Swarm management UI) - add node-exporter (global) — host CPU, memory, disk, network metrics - add cAdvisor (global) — per-container resource usage metrics - add Loki (replicated, service node) — persistent log storage, 31-day retention - add Promtail (global) — Docker service discovery; ships logs with service, stack, container, and project labels; sends to Loki - rename stack to iklimco-monitoring; add loki-vl persistent volume Workflow (.gitea/workflows/deploy-prod.yml -> deploy-monitoring-prod.yml): - rename file and add paths filter (Environment_Monitoring/**) - remove Dozzle secret creation and auth handling - add IMAGE_LOKI / IMAGE_PROMTAIL; clean up legacy dozzle_users Docker secret - update SWAG step to loop swag/site-confs/*.conf.tpl (portainer only) - remove DOZZLE_SUBDOMAIN; remove dozzle DNS record; keep portainer DNS - replace "Wait for Dozzle" with "Wait for Loki" SWAG: - remove swag/dozzle.conf.tpl (Dozzle no longer in stack) - add swag/site-confs/portainer.conf.tpl (moved from main repo template dir; monitoring stack manages its own SWAG configs independently) - remove init/apisix-dozzle.sh (superseded by SWAG reverse proxy) README: - rewrite in Turkish; document Portainer, node-exporter, cAdvisor, Loki, Promtail - add Grafana log viewing guide: datasource setup, label filter table, LogQL examples, metric-log correlation workflow, adding log panels to dashboards Requires IMAGE_LOKI and IMAGE_PROMTAIL to be defined in .env and corresponding custom images (build/loki/, build/promtail/) pushed to Harbor.
Environment Monitoring
Tüm izleme servisleri docker-stack-monitoring.yml stack'inde yönetilir: Portainer, node-exporter, cAdvisor, Loki ve Promtail.
Servisler
Portainer
Docker Swarm yönetim arayüzü.
portainer-agent— global mode, tüm node'larda çalışır; Docker socket ve volume bilgisini Portainer CE'ye aktarırportainer— tek replica, manager node'da;portainer-netoverlay üzerinden agent'lara bağlanır- Dış erişim SWAG üzerinden:
portainer.iklim.co
node-exporter
Host / işletim sistemi metriklerini Prometheus'a aktarır. Her node'da çalışır (deploy.mode: global).
Toplanan metrikler: CPU kullanımı, bellek, disk I/O, ağ trafiği, sistem yükü, dosya sistemi doluluk oranları.
cAdvisor
Container ve Swarm servis bazlı kaynak tüketimini Prometheus'a aktarır. Her node'da çalışır (deploy.mode: global).
Toplanan metrikler: container başına CPU/bellek/ağ/disk I/O.
Loki
Container loglarını toplayan ve saklayan log aggregation servisi. Grafana'nın native Loki datasource entegrasyonu ile metriklerle birlikte sorgulanabilir.
- Tek replica,
node.labels.type == servicenode'unda çalışır - Log saklama süresi: 31 gün (
limits_config.retention_period) - Konfigürasyon:
build/loki/loki.yml
Promtail
Her node'daki container loglarını Docker API üzerinden toplayarak Loki'ye gönderir. Her node'da çalışır (deploy.mode: global).
- Docker service discovery: container adı, servis adı, stack adı ve proje label'larını otomatik etiket olarak ekler
- Konfigürasyon:
build/promtail/promtail.yml
Health Agent
Cluster içi servis sağlığını Uptime Kuma'ya push eden Python servisi. Ayrıntılar için health-agent/README.md.
Grafana'da Log Görüntüleme
İlk Kurulum — Loki Datasource Ekleme
Loki deploy edildikten sonra tek seferlik yapılır:
- Grafana UI → Sol menü → Connections → Data sources
- Add new data source → Loki seç
- URL:
http://loki:3100 - Save & test — "Data source connected" mesajı görünmeli
Alternatif olarak template/grafana/provisioning/datasources/loki.yaml dosyasını Grafana'nın provisioning dizinine kopyalayarak otomatik yüklenebilir:
# Grafana veri dizinine provisioning dosyasını kopyala
cp template/grafana/provisioning/datasources/loki.yaml \
<GRAFANA_DATA_DIR>/provisioning/datasources/loki.yaml
# Grafana'yı yeniden başlat
docker service update --force iklimco_grafana
Log Görüntüleme — Explore
- Sol menü → Explore (pusula ikonu)
- Üst sol köşeden datasource olarak Loki seç
- Label filters ile filtrele:
| Etiket | Açıklama | Örnek |
|---|---|---|
service |
Swarm servis adı | iklimco_vault |
stack |
Stack adı | iklimco |
container |
Container adı | iklimco_vault.1.xxx |
project |
project label değeri | co.iklim |
logstream |
stdout / stderr | stderr |
LogQL Örnekleri
# Belirli bir servisin tüm logları
{service="iklimco_vault"}
# Tüm stack'teki hata logları
{stack="iklimco"} |= "ERROR"
# Exception içeren loglar (tüm servisler)
{project="co.iklim"} |= "Exception"
# APISIX erişim logları — sadece 5xx'ler
{service="iklimco_apisix"} | json | status >= 500
# Belirli zaman aralığında servis logları (UI'dan zaman seçimi de yapılabilir)
{service="iklimco_rabbitmq"} |= "error" | line_format "{{.line}}"
Metrik — Log Korelasyonu
Grafana'nın en güçlü özelliklerinden biri: bir Prometheus metriğinde anomali gördüğünde aynı zaman aralığındaki logları yan yana inceleyebilirsin.
- Prometheus dashboard panelinde anomali noktasına tıkla
- Explore linkine tıkla → aynı zaman aralığı Explore'da açılır
- Datasource'u Loki'ye geçir, ilgili servisi filtrele
- Metrik spike'ı ile log hataları aynı anda görünür
Dashboard'a Log Paneli Ekleme
Mevcut dashboard'lara log paneli eklemek için:
- Dashboard → Edit → Add visualization
- Panel tipi: Logs seç
- Datasource: Loki
- Query:
{service="<servis_adı>"} - Deduplication seçeneğini açabilirsin (tekrar eden satırları gizler)
Ağ Yapısı
| Network | Tür | Kullananlar |
|---|---|---|
iklimco-net |
external overlay | Portainer, node-exporter, cAdvisor, Loki, Promtail, Health Agent |
portainer-net |
stack overlay | portainer-agent ↔ portainer iletişimi |
Deployment
docker stack deploy \
--with-registry-auth \
-c Environment_Monitoring/docker-stack-monitoring.yml \
iklimco-monitoring
Prod için Gitea workflow'u: Environment_Monitoring/.gitea/workflows/deploy-monitoring-prod.yml
Not: Loki ve Promtail custom image kullanır (
build/loki/,build/promtail/). Deploy öncesinde imajların Harbor'a build edilip push edilmesi gerekir..envdosyasındaIMAGE_LOKIveIMAGE_PROMTAILdeğişkenlerinin tanımlı olması zorunludur.