Murat ÖZDEMİR 58d5c24f41
Some checks failed
Deploy Environment Monitoring to Production Environment / deploy (push) Failing after 10s
feat(health-agent): add CI/CD pipeline, Uptime Kuma setup, and runtime configuration
Deploy workflows:
- Integrate health-agent build (test) and image promotion (prod) into monitoring stack workflows
- Add storagebox download of health-agent runtime (.env.monitoring.health-agent-runtime → health-agent/.env) and setup (.env.monitoring.health-agent-setup → health-agent/.env.setup) env files
- Add "Run Uptime Kuma Setup" step: runs setup_uptime_kuma.py inside the built image only when uk_tokens.yml is missing, writes tokens to HEALTH_AGENT_CONFIG_GENERATED_DIR (/mnt/storagebox/monitoring/uk_generated)
- Add health-agent/** and health-agent/deploy/prod.env path triggers to test and prod workflows respectively
- Add HARBOR_CI_TOKEN login and HARBOR_PULL_TOKEN login before stack deploy in both workflows
- Source health-agent/.env before docker stack deploy to expose HEALTH_AGENT_CONFIG_GENERATED_DIR

Dockerfile:
- Copy config/ and scripts/ into image so setup_uptime_kuma.py can run inside the container

setup_uptime_kuma.py:
- Load .env and .env.setup automatically via python-dotenv (no manual export needed)
- Write uk_tokens.yml to config/generated/ (aligned with container volume mount)

Health checks:
- PATRONI_HOSTS and VAULT_HOSTS are now configurable via env vars (comma-separated host:port); no code change needed when node count changes
- REDIS_SENTINEL_HOSTS now correctly parses host:port format; default updated to redis-sentinel:26379
- Fix NameError in check_patroni_cluster() caused by leftover node variable after loop refactor
- Remove verify_ssl=False from Vault check; vault.iklim.co has a valid certificate

Ops:
- Add ops/build-and-push-health-agent.sh for manual bypass of CI pipeline
- Add health-agent/deploy/prod.env template for prod image promotion manifest

Project structure:
- Move .env.example and .env.setup.example to health-agent/env-example/ (root .gitignore excludes health-agent/.env*)
- Add root .gitignore: excludes uk_tokens.yml, __pycache__, .venv, and env files
- Remove health-agent/.gitignore (superseded by root .gitignore)
2026-06-26 18:45:17 +03:00

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 sourceLoki 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:

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

  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 → EditAdd 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

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.

Description
No description provided
Readme 211 KiB
Languages
Python 81.4%
Shell 16.8%
Smarty 1%
Dockerfile 0.8%