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 \
|
||
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.
|