Svako ime koje ova tri imanja drže, stroj ispod njega, i odluka o svakom alatu koji se na njima vrti — s odgovorom koji je stvarno vratio, ne s onim koji piše u konfiguraciji.
Sedam imena razrješava se i ne odgovara, i to nitko nije prijavio. plant-garden.hr na apexu vraća 000 — veza se ne uspostavlja uopće. Pet od šest self-legal imena vraća 520, što znači da Cloudflare ne dobiva valjani odgovor od ishodišta; jedino pure-neem.eu odgovara. flora-dev-hr.pages.dev vraća 522 jer se na taj projekt nikad nije deployalo.
Uz njih pet imena postoji samo u kodu i nema DNS zapis — www.plant-garden.hr, slike.plant-garden.hr, api.plant-garden.hr, dev-child-hr i monitor.rasadnik-milic.hr. To nije kvar nego smeće, i kandidat za čišćenje.
Nijedan od njih nije „pao". Svi su prestali odgovarati u nekom trenutku koji nitko ne zna, jer ih ništa ne gleda izvana. To je isti oblik kvara koji je na starom nexusu pet mjeseci držao retenciju koja ne briše — tišina koja izgleda kao zdravlje.
Jedna zona po kartici. Traka ispod naslova je udio stanja u toj zoni, pa se bolesna zona vidi prije nego se pročita ijedno ime.
Stupac „gdje je definirano" nije ukras: ime se mijenja na dva mjesta — u DNS-u i u kodu — i ovo je popis drugog mjesta. Prazan stupac znači da se ime nigdje u kodu ne pojavljuje.
| Ime | Odgovor | Adresa | Što je | Stroj | Gdje je definirano | Bilješka | |
|---|---|---|---|---|---|---|---|
| plant-garden.com | 301 | 172.67.149.152 | apex → plant-garden.si | — | Cloudflare | Zona nove platforme; sam apex je samo preusmjerenje. | |
| www.plant-garden.com | 301 | 172.67.149.152 | → plant-garden.si | — | Cloudflare | — | |
| dev-platform.plant-garden.com | 404 | 104.21.29.182 | dev Vendure API — /shop-api, /admin-api, /dashboard, /assets, /graphiql, /mailbox | flora-dev | flora-infra/tofu/env/dev/dns.tf | 404 na korijenu je točan odgovor — Vendure ondje nema stranicu, API je pod putanjom. Jedina aplikacija u imanju koja sama poslužuje više putanja pod svojim korijenom. | |
| platform.plant-garden.com | plan | — | produkcijski Vendure API | — | — | Jedna oznaka ispod domene, kao i dev-platform — ne platform.dev. | |
| control.plant-garden.com | plan | — | landing sa svim linkovima — dev i prod stranice, API-ji, dashboard, alati nadzora | — | — | Linka, ne proxya. Ako proxya, postaje jedinstvena točka pada za svaki alat i vlasnik je svih routing bugova. Statična stranica koja linka ne može srušiti ništa. | |
| monitoring.plant-garden.com | plan | — | Grafana na flora-nexusu | flora-nexus | flora-nexus · nexus_name | Poddomena, ne podputanja — vidi karticu „Pravilo imenovanja". Danas je ekvivalent control.rasadnik-milic.hr/monitoring, i ondje prometheus job vraća 404. | |
| ingest.plant-garden.com | faza 2 | — | push strojeva — /loki/api/v1/push, /api/v1/write | flora-nexus | flora-nexus/ansible/roles/nexus_gateway | Bez Zero Trusta, i to je razlog postojanja. Alloy nema preglednik i ne može odraditi SSO. Zaštita: basic auth (već napisan) plus service token. Tako monitoring. ostaje Access aplikacija bez ijedne iznimke. | |
| actions.plant-garden.com | faza 5 | — | OliveTin — klijent pritišće gumbe | flora-nexus | — | Danas control-ui.rasadnik-milic.hr. Prijedlog imena, nije odlučeno. | |
| status.plant-garden.com | prijedlog | — | Uptime Kuma | — | — | Kuma se ne seli po odluci od 19. 9. Kad dođe na red, vrijedi razmisliti da ide izvan oba nexusa — status stranica na infrastrukturi koju nadzire šuti baš kad treba govoriti. | |
| alerts.plant-garden.com | vjerojatno ne treba | — | Alertmanager UI | — | — | Gotovo sigurno ne treba. Alerting se radi u Grafani (vlasnikova potvrda 20. 9.), pa je Alertmanagerov vlastiti UI uglavnom silences. U fazi 1 namjerno nema nikakvu putanju. Ako se ipak pokaže da treba — vlastito ime, ne podputanja. | |
| plant-garden.si | 301 | 104.21.13.9 | apex → www | — | Cloudflare | — | |
| www.plant-garden.si | 200 | 172.67.167.222 | produkcijska SI trgovina — WordPress | production-child | rasadnik-infrastructure/ansible/ host_vars/production-child/nginx.yml |
Živa produkcija. Nova SI trgovina je dev-v2.plant-garden.si i još je ne zamjenjuje. | |
| dev.plant-garden.si | 200 | 104.21.13.9 | stari dev SI trgovine | dev-child | host_vars/dev-child/nginx.yml | Star sustav. Ne miješati s dev-v2. | |
| dev-v2.plant-garden.si | 200 | 104.21.13.9 | nova SI trgovina — Astro na Cloudflare Pages | Cloudflare Pages flora-dev-si | flora-infra/tofu/env/dev/cloudflare.tf | CI faza 3, živa od 20. 9. Gradi se na vlastitom runneru, wrangler diže gotov direktorij — Cloudflare ništa ne klonira i ne gradi. | |
| plant-garden.hr | 000 | 172.67.179.169 | apex | — | — | Veza se ne uspostavlja uopće. DNS razrješava na Cloudflare, ali ništa ne odgovara. Koliko dugo — ne zna se, jer ništa ne gleda izvana. | |
| www.plant-garden.hr | nema DNS | — | — | — | — | Ne razrješava. | |
| dev.plant-garden.hr | 200 | 104.21.18.25 | stari dev HR trgovine | dev-child | host_vars/dev-child/nginx.yml | — | |
| status.plant-garden.hr | 200 | 104.21.18.25 | — | dev-child | — | Odgovara, ali nije zapisano čemu služi. Kandidat za čišćenje. | |
| api-dev.plant-garden.hr | 404 | 172.67.179.169 | stari naziv dev API-ja | flora-dev | flora-infra · api_hostname_aliases | Namjerno zadržan. Zamijenjen s dev-platform.plant-garden.com 19. 9., ali ostaje živ da postoji na što pasti natrag. Alias nikad ne dobiva novi certifikat. | |
| slike.plant-garden.hr | nema DNS | — | — | — | u kodu | Ime se pojavljuje u kodu, u DNS-u ne postoji. Ostatak ranijeg plana za slike. | |
| api.plant-garden.hr | nema DNS | — | — | — | u kodu | Isto — ime u kodu bez zapisa u DNS-u. | |
| rasadnik-milic.hr | 301 | 172.67.139.213 | apex → www | — | Cloudflare | Najgušća zona u imanju. | |
| www.rasadnik-milic.hr | 200 | 172.67.139.213 | produkcijska HR trgovina — WordPress | production-child | host_vars/production-child/nginx.yml | Živa produkcija. | |
| master.rasadnik-milic.hr | 302 | 104.21.62.223 | WordPress master (izvor istine za katalog) | production-master | host_vars/production-master/nginx.yml | 302 vodi na /wp-login.php — očekivano. | |
| dev-master.rasadnik-milic.hr | 302 | 104.21.62.223 | dev master | dev-master | host_vars/dev-master/nginx.yml | dev-master i dev-child nemaju vlastiti terraform — dio uzroka mrtvih scrape ciljeva. | |
| dev.rasadnik-milic.hr | 200 | 104.21.62.223 | dev trgovina | dev-child | host_vars/dev-child/nginx.yml | — | |
| test.rasadnik-milic.hr | 302 | 104.21.62.223 | test trgovina, auto-restore iz produkcije | test-child | host_vars/test-child/{nginx,autorestore}.yml | — | |
| test-master.rasadnik-milic.hr | 200 | 172.67.139.213 | test master | test-master | host_vars/test-master/nginx.yml | — | |
| dev-child-hr.rasadnik-milic.hr | nema DNS | — | — | — | u kodu | U kodu, mrtvo u DNS-u. | |
| monitor.rasadnik-milic.hr | nema DNS | — | — | — | u kodu | Ranije ime za nadzor. Grafana je završila na control./monitoring, a ovo ime nikad nije zaživjelo. | |
| sync-probe.rasadnik-milic.hr | 302 | 104.21.62.223 | sync zaliha — u pogonu od 14. 9. | rasadnik-nexus | sync-nexus/ansible/inventory.yml | Isti stroj kao nadzor (23.88.40.182), ali potpuno nepovezana stvar. Selidba nadzora s tog stroja ne dira ovu aplikaciju. | |
| control.rasadnik-milic.hr | 200 | 172.67.139.213 | Homer na korijenu i Grafana na /monitoring | rasadnik-nexus | host_vars/rasadnik-nexus/ {nginx,homer,monitoring-grafana}.yml |
Ovo je oblik koji se ne ponavlja. grafana_server_sub_path: true, root_url na /monitoring, Prometheus pod /prometheus — i u tom sustavu prometheus job vraća 404. Uz to root_url počinje s http:// iza TLS proxyja. | |
| control-ui.rasadnik-milic.hr | 200 | 172.67.139.213 | OliveTin — akcije kroz gumbe | rasadnik-nexus | host_vars/rasadnik-nexus/nginx.yml | ACL po akciji, prijava, argumenti kao forma, potvrda i zapis tko je što pokrenuo. Zato se vlastiti GUI ne gradi. | |
| status.rasadnik-milic.hr | 302 | 172.67.139.213 | Uptime Kuma | rasadnik-nexus | host_vars/rasadnik-nexus/nginx.yml | Vrti se na infrastrukturi koju nadzire. Vidi karticu „Nadzor", točka 2. | |
| stats.rasadnik-milic.hr | 307 | 172.67.139.213 | Umami — analitika | rasadnik-nexus | host_vars/rasadnik-nexus/nginx.yml | Ne seli se. | |
| pass.rasadnik-milic.hr | 200 | 104.21.62.223 | Vaultwarden — lozinke | rasadnik-nexus | host_vars/rasadnik-nexus/nginx.yml | Ne seli se. | |
| n8n.rasadnik-milic.hr | 200 | 104.21.62.223 | n8n — automatizacija, UI i webhookovi na istom imenu | rasadnik-nexus | host_vars/rasadnik-nexus/nginx.yml | Cloudflare Zero Trust već čuva ovaj host na rubu — piše u komentaru uz vhost. To je presedan koji potvrđuje shemu za monitoring. | |
| self-legal.com | 520 | 172.67.149.191 | self-legal, produkcija | self-legal | environments/self-legal/infrastructure.tf | 520 znači da Cloudflare ne dobiva valjani odgovor od ishodišta. Nije DNS i nije certifikat — stroj ili servis na njemu. | |
| dev.self-legal.com | 520 | 172.67.149.191 | self-legal, dev | self-legal | host_vars/self-legal/ | Isto. | |
| e-ugovor.com | 520 | 172.67.157.9 | e-ugovor, produkcija | self-legal | host_vars/self-legal/ | Isto. | |
| dev.e-ugovor.com | 520 | 172.67.157.9 | e-ugovor, dev | self-legal | host_vars/self-legal/ | Isto. | |
| pure-neem.eu | 200 | 104.21.14.239 | pure-neem, produkcija | self-legal | host_vars/self-legal/ | Jedina self-legal stranica koja odgovara. | |
| dev.pure-neem.eu | 520 | 104.21.14.239 | pure-neem, dev | self-legal | host_vars/self-legal/ | Isto. | |
| flora-dev-si.pages.dev | 200 | 172.66.46.246 | Cloudflare Pages projekt ispod dev-v2.plant-garden.si | Cloudflare | flora-infra/tofu/env/dev/cloudflare.tf | Projekti se stvaraju bez build_config — Cloudflare ništa ne klonira i ne gradi, pa besplatnih 500 buildova mjesečno nije brojka koju treba gledati. | |
| flora-dev-hr.pages.dev | 522 | 172.66.44.73 | Cloudflare Pages projekt za HR trgovinu | Cloudflare | flora-infra/tofu/env/dev/cloudflare.tf | Projekt postoji i nikad se na njega nije deployalo. 522 je Cloudflare bez ishodišta. CI faza 3 namjerno ne objavljuje .hr; ta trgovina ostaje susjed u estateu da pravni manifest izađe cijel. |
| Zona | Imanje | Napomena |
|---|---|---|
| plant-garden.com | plant-garden | nova platforma; DNS token ju vidi |
| plant-garden.si | plant-garden | SI trgovina; DNS token ju vidi |
| plant-garden.hr | plant-garden | DNS token ju je izgubio 19. 9. 2026 — čitanje zapisa vraća 403, a data source za tu zonu obarao je tofu plan |
| rasadnik-milic.hr | rasadnik | najgušća zona — 16 imena |
| self-legal.com | self-legal | — |
| e-ugovor.com | self-legal | — |
| pure-neem.eu | self-legal | — |
Besplatni Universal SSL pokriva zona.tld i *.zona.tld — dakle jednu razinu. Na nesto.drugo.plant-garden.com Cloudflare ne nudi certifikat uopće i preglednik javi ERR_SSL_VERSION_OR_CIPHER_MISMATCH; za to treba plaćeni Advanced Certificate Manager.
Zato u imanju stoji dev-platform, a ne platform.dev, i zato je staro ime bilo api-dev, a ne api.dev. Zapisano u flora-infra/tofu/env/dev/dns.tf.
| Stroj | Adresa | Imanje | Što nosi |
|---|---|---|---|
| production-master | 5.75.251.209 | rasadnik | WordPress master — izvor istine za katalog |
| production-child | 167.235.250.142 | rasadnik | obje produkcijske trgovine, HR i SI |
| dev-master | 159.69.113.88 | rasadnik | dev master — nema vlastiti terraform |
| dev-child | 49.12.190.231 | rasadnik | dev trgovine — nema vlastiti terraform |
| test-master · test-child | — | rasadnik | test s auto-restoreom iz produkcije |
| rasadnik-other | 159.69.248.184 | rasadnik | — |
| rasadnik-nexus | 23.88.40.182 | rasadnik | dvije nepovezane stvari: nadzor (Prometheus, Loki, Grafana, Alertmanager) i sync zaliha, plus Homer, OliveTin, Uptime Kuma, Umami, Vaultwarden, n8n |
| self-legal | 46.224.10.201 | self-legal | cx33, fsn1 — tri stranice, pet od šest imena ne odgovara |
| flora-dev | 2.28.228.193 | plant-garden | Vendure, Postgres, worker — rootless Podman i Quadlet |
| flora-runner | 46.224.217.20 | plant-garden | GitLab runner, zaseban OpenTofu stack |
| flora-nexus | — | plant-garden | ne postoji — faza 1 je napisana i pushana, apply nije pokrenut |
23.88.40.182 nosi nadzor — ono što flora-nexus preuzima — i sync zaliha, koji je od 14. 9. živ i koji infrastruktura.html zove „jedini stroj koji ovaj projekt drži u pogonu".
Selidba nadzora ne dira aplikaciju ispod njega. Stari stroj se smanjuje, ne gasi: prestaje biti nadzor, ostaje domaćin aplikacija, i u fazi 3 ulazi na popis kao nadzirani klijent.
Lijevo je što stoji danas, desno kamo ide. Ništa se ne gasi — stari nexus prestaje biti nadzor i ostaje domaćin aplikacija.
Odluke su ulaz, ne prijedlog. Gdje nešto stoji kao prijedlog, tako i piše — i čeka riječ vlasnika.
| Alat | Uloga | Stanje | Gdje | Odluka i razlog | Bilješka | |
|---|---|---|---|---|---|---|
| Grafana | jedno okno nad svime i alerting | u upotrebi | stari nexus, control./monitoring | Ne izvršava akcije — one idu kroz OliveTin, isti posao iz terminala kroz CLI/TUI. Alarme ipak drži: vlasnikova potvrda 20. 9. | U flora-nexusu na vlastitoj poddomeni, s auth.anonymous isključenim — mjereno: 302 → /login, /api/datasources → 401. | |
| Prometheus | metrike | u upotrebi | stari nexus 3.11.2 | LGTM komplet, odluka vlasnika. Ne uvodi se VictoriaMetrics. | U flora-nexusu retencija 90 d, veže se na 127.0.0.1, nema web putanju — vidi „Pravilo imenovanja". | |
| Loki | logovi | u upotrebi | stari nexus 3.7.1 | LGTM komplet. Ne uvodi se VictoriaLogs. | Retencija 30 d, i dokazana čitanjem iz pokrenutog procesa. Na starom stroju je 5 mjeseci stajala na 0s. | |
| Tempo | tragovi | planirano | — | Dio LGTM kompleta; stroj je dimenzioniran za njega. | Nije u fazi 1: dolazi kad postoji nešto što proizvodi trag. Peti prazan servis je peta stvar za provjeriti i ništa za vidjeti. | |
| Grafana alerting | alarmi — ovo se koristi | u upotrebi | stari nexus, grafana_alerting_enabled: "true" | Vlasnikova potvrda, 20. 9.: alerting ide kroz Grafanu. Ondje su pravila, ondje je povijest, ondje se gleda. | Otvoreno i dalje: pravila su klikana, ne u kodu. files/grafana/alerting/ sadrži samo README, a grafana_alerts nije definiran nigdje — pa preživljavaju samo kroz blob backup, ne kroz git. To je posao faze 2 i 3. | |
| Alertmanager | prihvaća alarme iz Prometheusa | sporedno | stari nexus — default-receiver, critical-receiver | Nije glavni put. Postoji jer Prometheus treba kamo slati pravila koja se evaluiraju izvan Grafane. | U fazi 1 stoji prazan i veže se na 127.0.0.1. Dobiva jedan pravi posao u točki 1 kartice „Nadzor" — otkucaj koji ide van. | |
| Alloy | agent — gura metrike, logove i tragove | faza 2 | već aktivan na starom nexusu | Zamjenjuje promtail i 19 zasebnih exportera — ugrađuje unix, process, cadvisor, redis, memcached, nginx, kubernetes i blackbox. | Zamka: predložak kolekcije nabraja collectore izrijekom, pa je textfile isključen i svaka .prom datoteka nevidljiva. Treba dodati "textfile" u popis. | |
| Telegram | kanal za obavijesti | u upotrebi | group_vars/all/secret.telegram.yml | Ne uvodi se PagerDuty ni Opsgenie. Kanal postoji, alarmi kroz njega već idu. | Ali je pretrpan. Koriste ga fail2ban, update checker i alarmi — pa se ono što traži potez utopi u onome što ne traži. Odluka 20. 9.: izvještaji (nadogradnje, stanja) sele u Grafanu kao metrike, Telegram ostaje samo za alarme. Vidi „Nadzor", točka 3b. | |
| Cloudflare Zero Trust | prijava na rubu | u upotrebi | n8n.rasadnik-milic.hr | Već čuva n8n — piše u komentaru uz vhost. Presedan koji potvrđuje shemu za monitoring. | Ne radi za strojeve. Alloy nema preglednik; njemu ostaje service token ili zasebno ime bez Zero Trusta. | |
| OliveTin | akcije kroz gumbe, za klijenta | u upotrebi | control-ui.rasadnik-milic.hr | Vlastiti GUI se ne gradi. Značio bi ponovno pisati prijavu, ACL, validaciju argumenata i reviziju — točno ono što se u takvim alatima prvo pogriješi. | Faza 5. Klijentov gumb i devops CLI zovu istu skriptu; dvije izvedbe znače da jedna nije testirana, i to će biti ona koju klijent pritisne. | |
| Homer | landing s linkovima | u upotrebi | control.rasadnik-milic.hr | Statičan, konfiguracija u gitu, nema što pasti. | Isti oblik za control.plant-garden.com — linka, ne proxya. | |
| Uptime Kuma | dostupnost izvana | u upotrebi | status.rasadnik-milic.hr | Ne seli se — odluka od 19. 9. | Vrti se na infrastrukturi koju nadzire. Vidi „Nadzor", točka 2: treba joj jedan vanjski čuvar. | |
| Umami | analitika posjeta | u upotrebi | stats.rasadnik-milic.hr | Ne seli se. | — | |
| Vaultwarden | lozinke | u upotrebi | pass.rasadnik-milic.hr | Ne seli se. | Odvojeno od Ansible vaulta, koji drži tajne koje idu na stroj. | |
| n8n | automatizacija, webhookovi | u upotrebi | n8n.rasadnik-milic.hr | Ne seli se. | Nadzire se u fazi 3, kad Alloy dođe na taj stroj — logovi, procesi, kontejneri i HTTP proba. | |
| watchtower --monitor-only | javlja nove Docker slike | u upotrebi | ansible/files/updateNotify/update_checker.sh.j2 | Ne ažurira, samo javlja. Uz apt list --upgradable, na cron, u Telegram. | Dvije rupe. Ne vidi binarije iz GitHub releaseova — Loki, Prometheus, Grafana, Alloy, exporteri; odatle Loki 3.7.1 naspram deklariranih 3.5.1. I javlja u Telegram, gdje se ne vidi — ista brojka seli u Grafanu, „Nadzor" točka 3b. | |
| blackbox_exporter | HTTP izvana i istek TLS-a | faza 3 | — | Danas nitko ne mjeri ističe li certifikat. Alloy ga ugrađuje; kolekcija nema rolu. | Uz njega ide i vanjska proba (točka 2) — blackbox koji se vrti na nexusu ne vidi vlastitu smrt. | |
| restic + wal-g | kopije i povrat | faza 4 | — | Backup i restore pripadaju nexusu, i s njima se vraća brana pred migracijom izvađena iz flora-deploya 19. 9. | Povrat mora biti izveden, ne tvrđen: broj tablica i redaka nakon vraćanja, i vrijeme koje je trebalo. | |
| gitlab-ci-pipelines-exporter | pipelineovi u Grafani | faza 3 | — | Ne postoji rola; stvarni razvoj, ne konfiguracija. | — | |
| Dead man's switch healthchecks.io | javlja kad nadzor zašuti | prijedlog | — | Najvažnija pojedinačna stavka. Jedina koja hvata smrt samog nadzora. | Vidi „Nadzor", točka 1. | |
| GlitchTip | greške aplikacija, Sentry-kompatibilan | prijedlog | — | Za sve aplikacije u stacku, ne samo Vendure — i za same alate nadzora. Vlasnikova želja, 20. 9. | Jedna zamka: ako GlitchTip živi na nexusu, a nexus padne, greške o tom padu nemaju kamo. Ili ide na drugi stroj, ili se prihvaća da pokriva aplikacije a ne infrastrukturu. | |
| Renovate | otvara MR-ove za nove verzije | prijedlog | — | Vidi „Nadzor", točka 6 — što to uopće je. | Pokriva rupu koju watchtower ne vidi: verzije pribijene u Ansible varijablama i digeste skenera. | |
| Vanjska proba UptimeRobot / Better Stack | gleda Uptime Kumu izvana | prijedlog | — | Vlasnikov prijedlog 20. 9.: jedan čuvar nad Kumom, jer ako je Kuma dostupna, njoj je ostalo dostupno. | Uz jednu ogradu — vidi „Nadzor", točka 2. | |
| VictoriaMetrics / VictoriaLogs | zamjena za Prometheus i Loki | ne | — | Odluka vlasnika: ne u ovoj fazi. Alati su LGTM. | — | |
| Vlastiti GUI | sučelje za akcije | ne | — | Značio bi ponovno pisati prijavu, ACL, validaciju argumenata i reviziju. OliveTin to ima. | — | |
| Cloudflare obavijesti | istek certifikata, nedostupno ishodište | ne | — | Odluka vlasnika, 20. 9. Ne koristi se. | Posljedica: taj posao u cijelosti pada na blackbox i vanjsku probu. | |
| Web klijent nad bazom | pregled Postgresa u pregledniku | ne | — | Nova površina za malo. Postgres nije HTTP i nema ime. | Pristup kroz SSH tunel. | |
| PagerDuty / Opsgenie | dežurstvo i eskalacija | ne | — | Telegram već radi i alarmi kroz njega već idu. Treći kanal za istu poruku. | — |
Ovaj sustav ima jedan oblik kvara i vidljiv je sedam puta. Ništa nije palo — sve je prestalo javljati, a tišina je izgledala kao zdravlje.
| Što je tiho stalo | Koliko dugo | Tko je primijetio |
|---|---|---|
| compactor briše ništa | 5 mjeseci, 12 465 „uspješnih" prolaza | nitko, do 19. 9. |
| 21 od 34 scrape cilja mrtvo | mjesecima | nitko, do 19. 9. |
| logrotate.service u stanju failed | ne zna se | nitko |
| 8 GB smeća na runneru, 10 mrtvih tokena | mjesecima | „nitko nije prijavio jer nitko nije gledao" |
| flora-dev-hr.pages.dev → 522 | od postanka | nitko, do 20. 9. |
| plant-garden.hr apex → 000 | ne zna se | nitko, do 20. 9. |
| 5 od 6 self-legal imena → 520 | ne zna se | nitko, do 20. 9. |
Jednostavno rečeno: Alertmanager šalje jedan alarm koji uvijek gori — recimo svakih pet minuta pingne vanjsku adresu. Vanjski servis ne gleda taj alarm; gleda je li stigao. Kad prestane stizati, on diže uzbunu.
Zvuči naopako i nije: svi ostali alarmi javljaju da je nešto palo. Ovaj jedini javlja da je pao onaj koji javlja. Bez njega flora-nexus ima točno istu sljepoću kao stari — ako cijeli nadzor umre, alarmi o svemu drugom su uredno tihi i sve izgleda mirno.
healthchecks.io, besplatni plan. Jedan URL, jedan cron, ništa za održavati.
Jedan vanjski čuvar nad Uptime Kumom, i to je sve. Ako je Kuma dostupna, njoj je ostalo dostupno — pa nema potrebe za vanjskom probom po stranici.
Vlasnikova odluka, 20. 9. Postavljeno je pitanje može li Kuma biti živa dok su joj provjere pauzirane, i odgovor je: to je ljudska greška, velika i izravna, a ne kvar. Nadzor se gradi protiv kvarova; protiv nekoga tko svjesno ugasi provjere ne brani ga nijedna metrika, i ne isplati se plaćati složenošću za taj slučaj.
Dakle: vanjski servis gleda odgovara li Kuma. Jedan monitor, besplatna razina, ništa za održavati. Danas je ne gleda ništa.
Kako se to prati, konkretno:
1. Skripta na stroju pročita stvarnu verziju: loki --version
2. Upiše je u .prom datoteku, kao metriku:
grafana_obs_version_info{component="loki",installed="3.7.1",declared="3.5.1"} 1
3. Alloyev textfile collector tu datoteku pokupi — bez ijednog novog porta
4. Prometheus pravilo: installed != declared → alarm
Deklarirana verzija dolazi iz iste Ansible varijable kojom se instalira, pa ne postoji treće mjesto koje bi se razišlo.
Jedna prepreka, već poznata: Alloyev unix exporter ima textfile uključen po zadanom, ali predložak kolekcije nabraja collectore izrijekom — pa je isključen i svaka .prom datoteka nevidljiva. Treba dodati "textfile" u set_collectors i blok textfile { directory = … }. Isto blokira smartmon i lvm role.
Isti put rješava i „da znam kad ima update", i rješava ga na pravom mjestu. Ista skripta zapiše i najnoviji GitHub release, pa se dobije installed / declared / latest — tri broja po komponenti, u Prometheusu.
Problem s onim što danas postoji nije da ne radi — nego da se ne vidi. update_checker.sh šalje popis nadogradnji u Telegram, gdje se utopi među fail2ban obavijestima i svime ostalim. Poruka koja stigne svaki dan i traži ništa je poruka koju nitko ne čita.
Zato ista brojka ide u Grafanu umjesto u chat — istim putem kao točka 3, bez ijednog novog porta:
update_checker.sh → .prom datoteka → Alloy textfile → Prometheus → Grafana
pending_updates{host="rasadnik-nexus",kind="apt"} 7
pending_updates{host="rasadnik-nexus",kind="docker"} 2
version_info{component="loki",installed="3.7.1",declared="3.5.1",latest="3.8.0"} 1
Razlika je u tome tko koga zove. Telegram gura poruku na vas svaki dan. Ploča u Grafani stoji i čeka da je pogledate, a alarm se digne samo kad prijeđe prag koji vi postavite — na primjer „sigurnosna nadogradnja starija od 7 dana" ili „installed ≠ declared". Chat tada dobiva samo ono što stvarno traži potez.
Telegram ostaje kanal za alarme. Prestaje biti kanal za izvještaje.
Kako se to prikazuje — dva stupnja, i prvi je dovoljan:
Jednostavno: zakazani CI job vrti tofu plan -detailed-exitcode
izlaz 0 = nema razlike · 2 = drift · 1 = greška
job padne → GitLab javi
Ako se želi na grafu:
isti job upiše metriku u .prom (isti put kao točka 3)
tofu_drift{stack="nexus"} 1
Grafana panel: tri stacka, tri kvadratića, zeleno ili crveno
Tri stacka su dev, utils i nexus, sa stanjem u GitLabu. Danas vam ništa ne kaže je li netko nešto promijenio kroz Hetznerovu konzolu.
Ovo je i jedini način da se drift uhvati prije nego ga uhvati sljedeći apply — a sljedeći apply ga hvata tako što ga pregazi.
Vlasnikova odluka, 20. 9.: ne koristi se. Zapisano zbog posljedice — istek certifikata i nedostupnost ishodišta u cijelosti padaju na blackbox rolu (faza 3, ne postoji) i na vanjsku probu iz točke 2.
Do tada te dvije stvari ne mjeri ništa, i to je stanje a ne plan.
Bot koji čita vaše repozitorije, gleda ima li novija verzija svega što u njima stoji pribijeno, i sam otvara merge request s tom izmjenom. Ne ažurira ništa — otvara MR, pipeline se vrti nad njim, vi odlučujete.
Konkretno u ovom imanju:
| Što danas stoji pribijeno | Tko javlja da ima novije |
|---|---|
| npm ovisnosti u pet repozitorija | nitko |
| digesti skenera — Kaniko, Trivy, hadolint | nitko — flora-infra README to i kaže: „raising a digest belongs to a scheduled job, not to memory" |
| wrangler, pribijen točnom verzijom | nitko |
| verzije Lokija, Prometheusa, Grafane u Ansible varijablama | nitko — Renovate to zna kroz custom regex manager |
| apt paketi i Docker slike | update_checker.sh → Telegram već radi |
Razlika prema onome što već imate: update_checker.sh javi da ima novije. Renovate otvori izmjenu koja to podiže, i pusti gate preko nje — pa se vidi hoće li puknuti prije nego što se odluči.
Self-hosted, na vašem runneru, besplatno. Nije hitno; postaje vrijedan kad broj pribijenih verzija naraste preko onoga što se pamti.
Svi su na rasadnik-nexusu i dolaze na red kad Alloy stigne na taj stroj — kao nadzirani klijent, ne kao ugašeni prethodnik.
| Sloj | Što se dobiva | Čime |
|---|---|---|
| stroj | CPU, RAM, disk, load | Alloy unix |
| procesi | po servisu: RAM, restartovi | Alloy process |
| kontejneri | ako su u Dockeru | Alloy cadvisor |
| logovi | journal i /var/log | Alloy, gura kroz 443 |
| dostupnost i TLS | odgovara li, i kad ističe certifikat | blackbox — rola ne postoji |
| aplikacijski | vlastite metrike servisa | treba provjeriti po servisu |
Zadnji red je iskren, ne mlak. Nudi li n8n vlastite Prometheus metrike i pod kojim prekidačem, ima li Vaultwarden health endpoint — to se provjerava na živom servisu, a ne prepisuje iz dokumentacije. Ova stranica ne tvrdi ništa što nije izmjereno, pa ni ovdje.
Pitanje je bilo: control.plant-garden.com/monitoring ili monitoring.plant-garden.com. Odgovor ne ovisi o ukusu nego o tome tko posjeduje usmjeravanje.
| Slučaj | Primjer | Radi? | Zašto |
|---|---|---|---|
| Aplikacija sama poslužuje više putanja pod svojim korijenom | dev-platform.plant-garden.com/shop-api · /admin-api · /dashboard · /graphiql · /mailbox | da | Vendure zna svoj base path jer ga sam poslužuje. Nema prefiksa koji se može razići. |
| Tuđoj aplikaciji se kaže da se preseli u podputanju | control./monitoring → Grafana … /prometheus → Prometheus |
ne | Svaki alat traži vlastiti prekidač — root_url, web.route-prefix, web.external-url — i svaki se lomi pri nadogradnji. Tiho, jer stranica i dalje radi. |
ansible/host_vars/rasadnik-nexus/monitoring-grafana.yml
grafana_server_domain: "control.rasadnik-milic.hr"
grafana_server_sub_path: true
grafana_server_root_url: "http://{{ grafana_server_domain }}/monitoring"
grafana_datasources:
- name: monitoring
url: "http://0.0.0.0:9090/prometheus"
Homer na korijenu, Grafana pod /monitoring, Prometheus pod /prometheus. U tom sustavu prometheus job vraća HTTP 404 i ne skreipa ni sam sebe — web.route-prefix pisan za 2.52 ne pogađa put u 3.11.
I druga bomba u istom bloku: root_url počinje s http:// iza TLS proxyja.
U flora-nexusu zato Prometheus i Alertmanager nemaju web putanju uopće: Grafana ih doseže na 127.0.0.1, a čovjek kojem treba sirovo sučelje ide kroz SSH tunel. Podputanja koja postoji samo da bi bila kriva ne vrijedi svoju površinu.
Ljudi naspram strojeva — jer Zero Trust ide samo prvima.
| Promet | Primjer | Zero Trust | Čime se štiti |
|---|---|---|---|
| čovjek, preglednik | Grafana, OliveTin, n8n | da | SSO i kolačić — već radi za n8n |
| stroj, bez preglednika | Alloy → /loki/api/v1/push, /api/v1/write | ne | basic auth (napisan) plus service token — CF-Access-Client-Id i -Secret kao zaglavlja |
Odatle zasebno ime ingest.: tada je monitoring. Access aplikacija bez ijedne iznimke. „Cijeli host, nitko bez prijave" je pravilo koje se ne da krivo napisati; „cijeli host osim ove dvije putanje" je pravilo u kojem se greška skriva — a ta greška znači da netko gura izmišljene metrike ili čita tuđe.