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.
144 lines
4.9 KiB
Markdown
144 lines
4.9 KiB
Markdown
# 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ır
|
||
- `portainer` — tek replica, manager node'da; `portainer-net` overlay ü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 == service` node'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:
|
||
|
||
1. Grafana UI → Sol menü → **Connections → Data sources**
|
||
2. **Add new data source** → **Loki** seç
|
||
3. URL: `http://loki:3100`
|
||
4. **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:
|
||
|
||
```bash
|
||
# 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
|
||
|
||
1. Sol menü → **Explore** (pusula ikonu)
|
||
2. Üst sol köşeden datasource olarak **Loki** seç
|
||
3. **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
|
||
|
||
```logql
|
||
# 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.
|
||
|
||
1. Prometheus dashboard panelinde anomali noktasına tıkla
|
||
2. **Explore** linkine tıkla → aynı zaman aralığı Explore'da açılır
|
||
3. Datasource'u Loki'ye geçir, ilgili servisi filtrele
|
||
4. Metrik spike'ı ile log hataları aynı anda görünür
|
||
|
||
### Dashboard'a Log Paneli Ekleme
|
||
|
||
Mevcut dashboard'lara log paneli eklemek için:
|
||
|
||
1. Dashboard → **Edit** → **Add visualization**
|
||
2. Panel tipi: **Logs** seç
|
||
3. Datasource: **Loki**
|
||
4. Query: `{service="<servis_adı>"}`
|
||
5. **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
|
||
|
||
```bash
|
||
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. `.env` dosyasında `IMAGE_LOKI` ve `IMAGE_PROMTAIL` değişkenlerinin tanımlı olması zorunludur.
|