1. Instalace serveru

Server spouští kontroly, přijímá data od agentů, posílá upozornění a zobrazuje stavové stránky. Je to obyčejné PHP s databází MySQL: žádný obraz ke stažení a na hostingu se nic nesestavuje.

Změřená doba instalace: 1 min (od ZIPu vydání po první běh sběru dat na čistém serveru s PHP 8.2 a MySQL, podle tohoto návodu; nahrávání přes FTP a klikání v administraci hostingu jde navíc)

  1. Ověřte, co hosting nabízí

    • PHP 8.2 nebo novější s rozšířeními PDO MySQL, cURL, mbstring a OpenSSL
    • Databáze MySQL nebo MariaDB
    • Cron každou minutu (stačí Cron Jobs v cPanelu)
    • Apache s .htaccess a mod_rewrite, jako na většině sdílených hostingů
    • Jedna doména nebo subdoména, v jejímž kořeni leží /status i /app: aplikace mluví s /status na stejném hostu
    • Odchozí HTTP a HTTPS z hostingu, pro kontroly

    Umístěte ho mimo síť, kterou hlídáte. Server doma spadne s domácí linkou a pak už vám to nemá kdo říct.

  2. Stáhněte a nahrajte

    Poslední vydání: —

    Rozbalte ho a nahrajte status/ do public_html/status/ a app/ do public_html/app/. Soubor app/.htaccess nevynechávejte: bez něj skončí obnovení stránky uvnitř aplikace chybou 404. Stažený soubor ověříte proti zveřejněnému kontrolnímu součtu tak, že SHA256SUMS uložíte vedle ZIPu a spustíte:

    sha256sum -c SHA256SUMS --ignore-missing

    Ještě žádné vydání? Sestavte obě složky ze zdrojů

    S gitem a Node.js 22 na svém počítači:

    git clone --recursive https://github.com/BKPepe/monitoring.git
    cd monitoring
    npm ci
    npm run build -w apps/monitor
    cp agents/vps-agent/agent.sh agents/vps-agent/agent.py agents/vps-agent/agent.ps1 \
       agents/vps-agent/agent_openwrt.sh agents/vps-agent/docker-compose.agent.yml apps/status/

    Pak nahrajte apps/status/ (bez složky tests/) jako status/ a apps/monitor/dist/ (i s jeho .htaccess) jako app/. Agenti patří vedle agent_api.php: odtud se stahují a odtud se i sami aktualizují.

  3. Založte prázdnou databázi

    Založte databázi MySQL nebo MariaDB a uživatele se všemi právy k ní (v cPanelu: MySQL Databases) a poznamenejte si název, uživatele a heslo. Nechte ji prázdnou: tabulky založí instalátor. Jen když chcete všechno udělat ručně, naimportujte status/schema.sql sami:

    mysql -u YOUR_DB_USER -p YOUR_DB_NAME < schema.sql
  4. Spusťte instalátor

    Otevřete https://YOUR-DOMAIN/app/setup. Zkontroluje PHP, vyzkouší přihlášení k databázi, zapíše status/config.php (nebo soubor ukáže k nahrání, když do složky PHP zapisovat nesmí), založí tabulky a pak prvního správce. Žádný výchozí účet ani heslo neexistuje a jakmile účet je, instalátor se znovu nespustí. Do té doby ho může spustit kdokoli, kdo adresu najde, proto databázi založte ještě před nahráním a instalátor spusťte hned po něm. Ručně místo toho: ve složce status/ zkopírujte config.sample.php na config.php a vyplňte připojení:

    define('DB_HOST', 'localhost');
    define('DB_PORT', 3306);
    define('DB_NAME', 'YOUR_DB_NAME');
    define('DB_USER', 'YOUR_DB_USER');
    define('DB_PASS', 'YOUR_DB_PASSWORD');

    Volitelné klíče patří do stejného souboru jako konstanty velkými písmeny, nebo později do aplikace v Nastavení: CRON_KEY, AGENT_REGISTRATION_TOKEN a METRICS_TOKEN. Instalátor dá každé nové instalaci vlastní CRON_KEY. Při ruční cestě zůstane prázdný, dokud ho nenastavíte, a dokud je prázdný, spustí sběr dat kdokoli, kdo zná adresu cron.php.

    config.php obsahuje heslo k databázi. V ZIPu není a nahrání nového vydání ho nepřepíše.

  5. Spouštějte sběr dat každou minutu

    Všechny kontroly spouští jeden cron. Poslední krok instalátoru ukáže tenhle řádek se skutečnou cestou k PHP a k cron.php na vašem serveru. V cPanelu otevřete Cron Jobs, zvolte Once Per Minute (* * * * *) a příkaz vložte do pole Command. USER je váš účet na hostingu; domovskou složku ukazuje cPanel na hlavní stránce.

    php -q /home/USER/public_html/status/cron.php >/dev/null 2>&1

    Bez cPanelu je to stejná úloha jako řádek pro crontab -e:

    * * * * * php -q /home/USER/public_html/status/cron.php >/dev/null 2>&1
  6. Přihlaste se

    Přihlaste se na https://YOUR-DOMAIN/app/ účtem, který založil instalátor. Po ruční cestě ten první účet místo toho založí /app/setup.

  7. Ověřte, že běží

    Instalátor na první běh sběru dat počká a po něm zezelená, do minuty od přidání cronu. Později, nebo po ruční cestě, to ověříte takhle (adresa se dá otevřít i v prohlížeči):

    curl -s "https://YOUR-DOMAIN/status/api.php?action=collection_health"

    Hledejte čas v lastRunAt a "stale": false. "stale": true s lastRunAt null znamená, že sběr ještě nikdy neběžel: zkontrolujte řádek cronu a cestu v něm.

    Dál: v aplikaci přidejte monitory a na stroje a routery, do kterých chcete vidět, agenty. Instalace agenta →

2. Agenti na strojích a routerech

Chcete-li vidět, co se děje uvnitř stroje (CPU, paměť, disky, síť) nebo na routeru (Wi-Fi, WAN, připojení klienti), nainstalujte na něj agenta.

Nejsnáz z vlastní aplikace: Infrastruktura → Přidat nový monitor → OpenWrt Router nebo VPS Agent a uložit. Dialog pak vypíše tytéž kroky s vaší adresou a klíčem monitoru. Níže je zastupují https://YOUR-DOMAIN a YOUR_AGENT_KEY.

Bash agent. Adresu serveru a svůj klíč čte z agent.cfg vedle skriptu a hlásí přes HTTPS; cron ho spouští každých 5 minut.

Nejnovější verze
—
Potřebuje
Bash, cron a wget; curl pro registraci tokenem. Práva roota pro /opt.
Nejdřív si přečtěte skript
agent.sh

Instalace

  1. Stáhněte agenta

    mkdir -p /opt/bk-agent && wget -O /opt/bk-agent/agent.sh https://YOUR-DOMAIN/status/agent.sh && chmod +x /opt/bk-agent/agent.sh
  2. Vytvořte konfiguraci s adresou serveru a klíčem

    cat > /opt/bk-agent/agent.cfg <<'EOF'
    API_URL="https://YOUR-DOMAIN/status/agent_api.php"
    AGENT_KEY="YOUR_AGENT_KEY"
    AUTO_UPDATE="1"
    EOF

    Soubor musí ležet ve stejné složce jako skript.

  3. Spusťte agenta ručně a zkontrolujte výpis

    /opt/bk-agent/agent.sh --verbose
  4. Zařaďte agenta do cronu, jednou za pět minut

    ( crontab -l 2>/dev/null || true; echo '*/5 * * * * /opt/bk-agent/agent.sh >/dev/null 2>&1' ) | crontab -
Odinstalace
( crontab -l 2>/dev/null | grep -v /opt/bk-agent/agent.sh || true ) | crontab -
rm -rf /opt/bk-agent

Pak v přehledu smažte monitor agenta, aby jeho klíč přestal platit.

Víc strojů: registrace tokenem

Agent pro Bash a pro OpenWrt si umí monitor založit sám. Stáhněte skript (první krok na jeho kartě) a místo zápisu konfigurace spusťte řádek níže: server odpoví novým klíčem a agent ho uloží do agent.cfg (na routeru agent_openwrt.cfg) vedle skriptu. Pak pokračujte ručním spuštěním a cronem. Oba argumenty jsou poziční; bez adresy se agent registruje proti výchozímu localhost.

Bash (Linux, Raspberry Pi)
/opt/bk-agent/agent.sh --register YOUR_REGISTRATION_TOKEN https://YOUR-DOMAIN/status/agent_api.php
OpenWrt / Turris
/usr/bin/agent_openwrt.sh --register YOUR_REGISTRATION_TOKEN https://YOUR-DOMAIN/status/agent_api.php

Token je v aplikaci v Nastavení → Token pro auto-registraci agentů. Dokud je prázdný, server místo něj přijme klíč cronu (CRON_KEY), takže kdo má klíč cronu, může přidávat monitory. Agenti pro Python, PowerShell a Docker registrační příkaz nemají.

Agent se v aplikaci neukáže

Pro každou platformu tři kontroly v tomto pořadí: je agent naplánovaný, co vypíše jeden ruční běh a co je na konci jeho logu.

Linux / Raspberry Pi
crontab -l | grep agent.sh
/opt/bk-agent/agent.sh --verbose
tail -n 50 /opt/bk-agent/agent.log
OpenWrt / Turris
crontab -l | grep agent_openwrt.sh
/usr/bin/agent_openwrt.sh --verbose
tail -n 50 /tmp/status-agent-openwrt.log; logread | grep -i agent | tail -n 20
Windows (PowerShell jako správce)
Get-ScheduledTask -TaskName "BloodKingsAgent"
powershell.exe -ExecutionPolicy Bypass -File C:\bloodkings\agent.ps1 -Verbose
Get-Content C:\bloodkings\agent.log -Tail 50
Docker (výpis kontejneru)
cd /opt/bk-agent && docker compose -f docker-compose.agent.yml logs --tail 50

Server označí monitor agenta za nedostupný po 50 minutách bez hlášení. Limit je v Nastavení → Časový limit pro označení agenta za offline (minuty); 0 kontrolu vypne.

Chcete přispět k vývoji?

Projekt Blood Kings Monitoring je open source pod licencí MIT. Přibalený PHPMailer (odesílání e-mailů) má vlastní licenci LGPL-2.1, viz THIRD_PARTY_NOTICES.md. Zdrojové kódy, dokumentaci a tracker chyb naleznete na našem GitHubu.