144 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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