# Monitoring

Cílem není mít hezké grafy, ale dozvědět se o problému dřív než od uživatele. Tahle stránka jde od nejjednoduššího k nejsložitějšímu — ber to jako pořadí, ve kterém to zavádět.

## 1. Uptime Kuma

Začni tady. Instalace na pět minut, řekne ti, když něco spadne, a víc na začátku nepotřebuješ.

```yaml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    restart: unless-stopped
    volumes:
      - kuma:/app/data
    ports:
      - "127.0.0.1:3001:3001"
volumes:
  kuma:
```

Umí sledovat HTTP, TCP porty, ping, DNS, platnost certifikátů a docker kontejnery. Upozornění posílá do Telegramu, na e-mail, do Discordu a dalších padesáti míst.

**Nejdůležitější věc: nesleduj sám sebe.** Uptime Kuma běžící na stejném stroji jako sledované služby ti neřekne nic ve chvíli, kdy spadne stroj. Dej ho jinam — na Raspberry Pi, na VPS za dvě eura, kamkoliv mimo.

Co nastavit hned:

- dostupnost každé veřejné služby
- platnost TLS certifikátů (upozornění 14 dní předem)
- ping na bránu a na 8.8.8.8, ať poznáš výpadek linky
- kontrola zvenku, ne zevnitř

## 2. Netdata

Když chceš vidět, **proč** je něco pomalé. Jeden kontejner, nulová konfigurace, okamžitě máš stovky metrik s vteřinovým rozlišením.

```yaml
services:
  netdata:
    image: netdata/netdata
    hostname: server
    cap_add: [SYS_PTRACE]
    security_opt: [apparmor:unconfined]
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "127.0.0.1:19999:19999"
```

Skvělé na akutní ladění („teď je to pomalé, co se děje"), horší na dlouhodobé trendy, protože data ve výchozím nastavení dlouho nedrží.

Pozor na Docker socket, viz poznámka v [Traefiku](Traefik).

## 3. Prometheus a Grafana

Až když ti předchozí nestačí. Je to výrazně víc práce a dává smysl u víc strojů nebo když chceš historii v řádu měsíců.

```yaml
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prom_data:/prometheus
    ports:
      - "127.0.0.1:9090:9090"

  grafana:
    image: grafana/grafana
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "127.0.0.1:3000:3000"

  node-exporter:
    image: prom/node-exporter
    pid: host
    volumes:
      - /:/host:ro,rslave
    command: ['--path.rootfs=/host']
```

`prometheus.yml`:

```yaml
global:
  scrape_interval: 30s

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ['node-exporter:9100']

  - job_name: traefik
    static_configs:
      - targets: ['traefik:8082']
```

Do Grafany naimportuj hotový dashboard číslo 1860 (Node Exporter Full) — nemá cenu si to kreslit ručně.

## Co skutečně sledovat

Většina lidí sleduje vytížení procesoru, což je nejméně užitečná metrika z celé sady. Tohle je užitečnější:

| Metrika | Proč | Prahová hodnota |
|---|---|---|
| Volné místo na disku | nejčastější příčina pádu služby | upozornit na 80 % |
| Zaplnění inodů | disk má místo, ale soubory nejdou vytvořit | 80 % |
| Volná paměť a swap | swapování zabíjí výkon | swap nad nulou = pozor |
| Load average | vytížení včetně čekání na IO | nad počet jader |
| Teplota | u domácího hardwaru reálný problém | podle výrobce |
| SMART stavy disků | předchází ztrátě dat | jakákoliv změna |
| Platnost certifikátů | tichá časovaná bomba | 14 dní |
| Dostupnost zvenku | to jediné, co uživatele zajímá | okamžitě |

Ta zaplněnost inodů je záludná — `df -h` ukáže volné místo a přesto nejde nic zapsat. Zkontroluj `df -i`. Typicky u strojů s milionem malých souborů.

## Logy

Když máš víc strojů, hodí se logy sbírat na jedno místo. **Loki** s **Promtail** je nejjednodušší cesta, protože se integruje do Grafany.

Pro jeden stroj to nepotřebuješ — `journalctl` stačí:

```bash
journalctl -u sluzba -f
journalctl --since "1 hour ago" -p err
journalctl --disk-usage
journalctl --vacuum-time=30d
```

Ten poslední příkaz stojí za pozornost. Journal umí vyrůst do desítek gigabajtů a pak se divíš, kde je místo.

## Upozornění, která nefungují

**Příliš mnoho.** Když chodí deset upozornění denně, přestaneš je číst. Pak přijde to důležité a taky ho nepřečteš.

**Bez prahové hodnoty pro trvání.** Krátký výpadek při restartu služby není incident. Nastav si, že se hlásí až po dvou nebo třech neúspěšných kontrolách.

**Jen e-mailem.** Když ti spadne server, na kterém běží pošta, upozornění nedorazí. Použij něco nezávislého — Telegram, Pushover, SMS.

**Ze stejného stroje.** Zopakuji to, protože je to nejčastější chyba: monitoring musí běžet jinde než to, co sleduje.

## Minimální rozumná sestava

Když nechceš stavět observabilitu, ale chceš spát:

1. Uptime Kuma na jiném stroji nebo na levném VPS
2. Kontroly na všechny veřejné služby, na certifikáty a na ping brány
3. Upozornění do Telegramu
4. Netdata na hlavním stroji pro případ, že něco ladíš
5. Hlídač volného místa

To je odpoledne práce a pokryje devadesát procent situací, kdy se něco pokazí.
