The Node.js backend of Uptime Kuma 2.4.0 seems to crash on DNS monitors with 'Cannot read properties of null (reading length)' if the 'url' field is not explicitly set, because the API defaults it to null instead of 'https://' like the UI does.
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 \
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.