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.