diff --git a/README.md b/README.md index 67b41c1..30c32eb 100644 --- a/README.md +++ b/README.md @@ -141,3 +141,7 @@ docker stack deploy \ 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. + +### Health Agent Güncellemesi + +Health-agent'ta yapılan hiçbir değişiklik (kod veya `monitors.yml`) yalnızca repo'ya merge etmekle prod'a yansımaz: `monitors.yml` imaja gömülüdür, prod workflow'u imajı build etmeyip `health-agent/deploy/prod.env`'deki digest'i promote eder ve tag değişmediği sürece Swarm çalışan servisi güncellemez. Her güncellemede versiyon yükseltme → build → `prod.env` güncelleme zinciri izlenmelidir; adım adım prosedür için `health-agent/README.md` → **Güncelleme / Release Prosedürü** bölümüne bakın. diff --git a/health-agent/README.md b/health-agent/README.md index d1d9bed..7a93d41 100644 --- a/health-agent/README.md +++ b/health-agent/README.md @@ -182,12 +182,17 @@ python -m health_agent.main ## Deployment -Monitoring stack ve health-agent ayrı Gitea workflow'larıyla deploy edilir: +Monitoring stack ve health-agent Gitea workflow'larıyla deploy edilir: -- `.gitea/workflows/deploy-monitoring-prod.yml` — prod ortamı -- `.gitea/workflows/deploy-monitoring-test.yml` — test ortamı +- `.gitea/workflows/deploy-monitoring-test.yml` — `test` branch'ine push ile tetiklenir. Sırası: (1) imajı **build edip** Harbor'a `health-agent:-rc` olarak push'lar ve log'a "Promotion Manifest" (digest + tag) yazdırır, (2) `uk_tokens.yml` yoksa `setup_uptime_kuma.py`'yi çalıştırır, (3) monitoring stack'ini deploy eder. +- `.gitea/workflows/deploy-monitoring-prod.yml` — `prod-env` branch'ine push ile tetiklenir. **İmaj build etmez**; `health-agent/deploy/prod.env` dosyasındaki `SOURCE_IMAGE_DIGEST`'i çekip `PROD_IMAGE_TAG` ile yeniden etiketleyerek promote eder. Sonrası test ile aynıdır: `uk_tokens.yml` yoksa setup, ardından stack deploy. -Her iki workflow da şu sırayı izler: (1) `setup_uptime_kuma.py` çalıştır → `uk_tokens.yml` üret, (2) monitoring stack'i deploy et, (3) health-agent stack'ini deploy et. +> ⚠️ **İki kritik davranış:** +> +> 1. **Setup adımı `uk_tokens.yml` varken hiç çalışmaz.** Workflow'daki `if [ ! -s uk_tokens.yml ]` koşulu nedeniyle dosya host'ta durduğu sürece `setup_uptime_kuma.py` atlanır. `monitors.yml`'e yeni monitor/group eklediyseniz, deploy öncesinde host'taki `${HEALTH_AGENT_CONFIG_GENERATED_DIR}/uk_tokens.yml` dosyasını silmelisiniz — yoksa yeni monitörler Uptime Kuma'da asla oluşmaz. Script idempotent olduğu için mevcut monitörler güncellenir, yenileri eklenir, token'lar yeniden yazılır. +> 2. **Aynı tag ile deploy servisi güncellemez.** Stack deploy `--resolve-image changed` kullanır: servis tanımındaki imaj referansı (repo/tag string'i) değişmediyse Swarm digest'i yeniden çözmez ve çalışan container **eski imajla devam eder** — Harbor'da tag'in üzerine yeni imaj yazılmış olsa bile. Bu yüzden her kod değişikliğinde versiyon yükseltmek zorunludur (aşağıdaki release prosedürüne bakın). + +Ayrıca `config/monitors.yml` ve `scripts/setup_uptime_kuma.py` **imaja gömülüdür** — setup adımı `docker run` ile yalnızca `config/generated/` dizinini mount eder. Repo'da `monitors.yml`'i değiştirip merge etmek tek başına hiçbir şeyi değiştirmez; değişikliğin etkili olması için imajın yeniden build edilmesi gerekir. Manuel deploy için: @@ -206,6 +211,33 @@ Health-agent `iklimco-net` overlay ağına bağlı olmalı ve Docker socket'a sa --- +## Güncelleme / Release Prosedürü + +Health-agent'ta herhangi bir değişiklik (kod, `monitors.yml`, bağımlılık) prod'a şu adımlarla çıkar. Adımların hiçbiri atlanamaz — özellikle versiyon yükseltme (bkz. yukarıdaki ⚠️ notları): + +1. **Versiyonu yükselt:** `health-agent/pyproject.toml` içindeki `version` alanını artır (ör. `0.2.0` → `0.3.0`). Build script tag'i buradan okur; tag değişmezse Swarm çalışan servisi güncellemez. +2. **İmajı build et ve push'la** (`main` branch'inde, `Environment_Monitoring/` kökünden): + ```bash + HARBOR_CI_TOKEN= ./ops/build-and-push-health-agent.sh + ``` + Alternatif: `test` branch'ine push'lamak test workflow'unda aynı build'i yapar. Her iki yol da çıktının sonunda "Promotion Manifest" basar: + ``` + SOURCE_IMAGE_DIGEST=registry.tarla.io/iklimco/health-agent@sha256: + PROD_IMAGE_TAG= + ``` +3. **Manifest'i prod'a yaz:** `prod-env` branch'inde `health-agent/deploy/prod.env` dosyasına yukarıdaki iki satırı aynen yaz (`PROD_IMAGE_TAG` `-rc` içeremez). Bu dosyanın kaynak doğrusu `prod-env` branch'idir; `main`'deki kopyası kullanılmaz. +4. **Gerekliyse `uk_tokens.yml`'i sil:** Yalnızca `monitors.yml`'e yeni monitor/group/status-page eklediyseniz, prod host'taki `${HEALTH_AGENT_CONFIG_GENERATED_DIR}/uk_tokens.yml` dosyasını silin ki setup adımı yeniden çalışsın. Salt kod değişikliğinde dosyaya ve Uptime Kuma'daki monitörlere dokunmayın. +5. **`prod-env`'i push'la:** `main`'i `prod-env`'e merge edip `prod.env` değişikliğiyle birlikte push'layın — push, prod workflow'unu tetikler. +6. **Doğrula:** + ```bash + docker service inspect monitoring_health-agent --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}' + ``` + Çıktı `health-agent:@sha256:` olmalı. Ardından `docker service logs monitoring_health-agent` ile check'lerin push'landığını ve Uptime Kuma'da monitörlerin yeşile döndüğünü kontrol edin. Deploy `stop-first` olduğu için heartbeat'lerde 1-2 dakikalık boşluk normaldir. + +**Sıfırdan kurulum / monitörleri yeniden yaratma:** Uptime Kuma'daki monitörler silinip baştan oluşturulacaksa, hem UK'daki eski monitör/grupları hem de host'taki `uk_tokens.yml`'i silin; aksi halde eski push monitörlerine heartbeat gelmeyeceği için sahte "down" alarmları üretilir. + +--- + ## Log Formatı Agent JSON formatında log üretir. Grafana Explore (Loki datasource, `{service="monitoring_health-agent"}`) veya `docker service logs monitoring_health-agent` ile izlenebilir. Her log girdisi şu alanları içerir: