DIY Uptime Robot: SMS‑alarm za cenu dvou piv (a proč to nechceš svěřit jen cloudu) Webseidon Lukáš Adámek Odry, Vítkov, Fulnek, Klokočov webdeveloper a webdesignér

DIY Uptime Robot: SMS‑alarm za cenu dvou piv (a proč to nechceš svěřit jen cloudu)

DIY Uptime Robot: SMS‑alarm za cenu dvou piv (a proč to nechceš svěřit jen cloudu)

DIY Uptime Robot: SMS‑alarm za cenu dvou piv (a proč to nechceš svěřit jen cloudu)

Cloudové služby typu UptimeRobot, BetterStack nebo HetrixTools jsou fajn, dokud free tier nestačí nebo GDPR nepíchne do žeber. Za dvě piva (≈ 120 Kč) rozjedeš plnohodnotný monitor s SMS alarmy na vlastním železe či VPS a budeš mít data pod kontrolou. Ukážu ti, jak na Raspberry Pi 4 (nebo libovolném Debian serveru) spustit Prometheus + Blackbox Exporter + Alertmanager + Grafana, posílat SMS přes Twilio a logovat výpadky do Google Sheets. Všechno open‑source, všechno tvoje.



1 · Proč self‑hosted uptime monitor

  • Kontrola dat – výpis IP adres, latence, hlavičky HTTPS zůstávají u tebe.
  • GDPR – data fyzicky v EU (či v tvém sklepě).
  • Custom checks – TLS expirace, DNS SEC, vlastní API endpointy.
  • Flexibilita alertů – Slack, Teams, e‑mail, SMS, Ansible hook…
  • Cena – Twilio 0,8 Kč/SMS, zbytek free/open‑source.

2 · Architektura stacku

[Targets] ←→ Blackbox Exporter ↔ Prometheus ↔ Alertmanager ↔ Twilio SMS
                                    ↘
                                     ↘ Grafana ↔ Public Status Page

Blackbox Exporter aktivně testuje ping/HTTP/TLS. Prometheus scrapuje metriky každých 30 s a uchovává historii. Alertmanager vyhodnocuje pravidla (up==0) a triggeruje SMS. Grafana zobrazuje grafy i public status page typu statuspage.io – bez měsíčního paušálu.


3 · Instalace na Raspberry Pi / VPS

3.1 Předpoklady

  • Debian 12 (bookworm) 64‑bit
  • Docker + Docker‑Compose
  • 1 GB RAM, 10 GB storage

3.2 docker‑compose.yml

version: "3.9"
services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prom_data:/prometheus
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
  blackbox:
    image: prom/blackbox-exporter:latest
    ports: ["9115:9115"]
    volumes:
      - ./blackbox.yml:/etc/blackbox/blackbox.yml
  alertmanager:
    image: prom/alertmanager:latest
    ports: ["9093:9093"]
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
  grafana:
    image: grafana/grafana-oss
    ports: ["3000:3000"]
volumes:
  prom_data:

Stačí docker compose up -d a běží základní stack.


4 · Blackbox Exporter: ping, HTTP, TCP, TLS

4.1 Konfigurace blackbox.yml

modules:
  http_2xx:
    prober: http
    timeout: 10s
    http:
      preferred_ip_protocol: "ip4"
  tcp_connect:
    prober: tcp
    timeout: 5s
  icmp:
    prober: icmp
    timeout: 3s
  tls_cert:
    prober: http
    timeout: 10s
    http:
      tls_config:
        insecure_skip_verify: false
      preferred_ip_protocol: "ip4"

4.2 Přidání cílů do prometheus.yml

scrape_configs:
  - job_name: "blackbox_icmp"
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
        - 8.8.8.8
        - example.cz
  - job_name: "blackbox_http"
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://webseidon.cz
        - https://posta.cz
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox:9115

5 · Prometheus scrape a retence

Default retence 15 dní; zvedni na 90 dní:

--storage.tsdb.retention.time=90d
--storage.tsdb.max-block-duration=24h

Při 100 cílů / 30 s periodě zabere cca 5 GB/90 dní.


6 · Alertmanager + Twilio SMS

6.1 Twilio SID, AuthToken, From/To number

6.2 alertmanager.yml

global:
  resolve_timeout: 1m
route:
  receiver: sms
receivers:
  - name: sms
    webhook_configs:
      - url: "http://sms-gateway:8080/send"

6.3 SMS gateway (tiny‑go server)

func sendSMS(to,msg string){
  sid := os.Getenv("TWILIO_SID")
  tok := os.Getenv("TWILIO_TOKEN")
  from:= os.Getenv("TWILIO_FROM")
  twilio.NewClient(sid,tok,nil).Messages.SendMessage(from,to,msg,nil)
}

Alert rule:

- alert: TargetDown
  expr: probe_success == 0
  for: 1m
  labels:
    severity: critical
  annotations:
    summary: "{{ $labels.instance }} nedostupný"

7 · Grafana dashboard & public status page

  • Plugin prometheus‑blackbox‑exporter‑dashboard
  • Variable $instance → filtr cílů.
  • Public status: Enable Anonymous View Only, složka StatusPage.
  • Crt‑sh embed pro cert‑info pod graf.

8 · Kontrola expirace certifikátu

Metrika probe_ssl_earliest_cert_expiry v Blackboxu. Alert:

- alert: TLS_Expiring_30d
  expr: (probe_ssl_earliest_cert_expiry - time()) < 2.592e+06
  for: 4h
  labels:
    severity: warning
  annotations:
    summary: "Certifikát domény {{$labels.instance}} expíruje do 30 dnů"

9 · Logování do Google Sheets přes Apps Script

9.1 Alertmanager Webhook → Cloud Function

function doPost(e){
  var data = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.openById('SHEETID').getSheets()[0];
  data.alerts.forEach(a=>{
    sheet.appendRow([new Date(),a.labels.instance,a.status,a.annotations.summary]);
  });
}

Takhle máš historii výpadků pro klienta „na klik“.


10 · Case study: Vlastní Pingdom pro pět klientů

ParametrUptimeRobot ProDIY Stack
Počet cílů8080
Frekvence1 min30 s
Ukládání 1 rok datBusiness plán 30 €/mSSD 10 GB (0,5 €/m)
Custom TLS alertNeAno
Roční náklad≈ 9 000 Kč≈ 1 400 Kč

Návratnost < 2 měsíce, přidaná hodnota – vlastní brandovaná status stránka.


11 · Bezpečnost a hardening

  • Raspberry Pi za Nginx reverse proxy + Let’s Encrypt.
  • Prometheus jen localhost / VPN; Grafana anonym‑view read‑only.
  • Alertmanager --web.external-url + basic auth.
  • Twilio token v Docker Secret, ne v yaml.
  • Automatický update image → Watchtower.

12 · Kolik to stojí (spoiler: málo)

  • Raspberry Pi 4 2 GB – 1 700 Kč jednorázově (nebo VPS 2 €/m)
  • SMS Twilio – 0,038 € ≈ 0,9 Kč za 1 SMS v CZ.
  • Doména + DNS API – 150 Kč/rok (status sub‑doména).
  • Elektrika Pi – 4 W → 120 Kč/rok.

Suma: první rok ≈ 2 000 Kč, další roky < 400 Kč. Dvě piva měsíčně.


13 · Troubleshooting 101

Blackbox vrací tls: handshake timeout
Zvětši timeout: na 15 s nebo vypni TLS 1.3 fallback.
SMS nechodí
Chekni Twilio balance a whitelist CZ geo v Console → Messaging → Geo Permissions.
Grafana neukazuje data
Datasource URL správně? http://prometheus:9090 v docker net.
Prometheus disk full
Promtool delete series staré metriky, zkrať retenci.

14 · Závěr

Nebýt offline je dnes minimální hygiena každého webu. Místo měsíčního paušálu můžeš mít domácí „pingdom“, který víc umí a míň stojí. Raspberry na poličce štěká na výpadek dřív, než Google Bot sníží rank. A ty mezitím můžeš v klidu vypustit psa na louku – server si zkontroluje sám.


Klíčová slova

uptime monitoring, diy uptime robot, raspberry pi monitor, sms alert, twilio api, grafana uptime, prometheus blackbox, tls expiry check, ping monitor, http latency, self hosted status, downtime alert

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32