ťařina
Obsah Soubory
Provoz a bezpečnost

Monitoring

Aktualizováno 3 min čtení 513 slov

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š.

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.

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.

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ů.

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:

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čí:

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í.