Uptime Kuma: monitoramento self-hosted

    Uptime Kuma é a alternativa self-hosted ao UptimeRobot — monitora disponibilidade de URLs, portas TCP, containers Docker e serviços DNS, envia alertas por Telegram/Slack/e-mail e gera uma página de status pública. Leve (~50 MB RAM) e com interface moderna, é a primeira ferramenta de monitoramento que qualquer VPS deveria ter.

    Instalar Uptime Kuma com Docker Compose

    Setup em um único arquivo:

    yaml
    # /opt/uptime-kuma/docker-compose.yml
    services:
      uptime-kuma:
        image: louislam/uptime-kuma:1
        restart: always
        volumes:
          - uptime_kuma_data:/app/data
        ports:
          - "127.0.0.1:3001:3001"     # apenas loopback — acesse via Nginx
    
    volumes:
      uptime_kuma_data:
    
    # Subir
    docker compose up -d
    
    # Acessar via tunel SSH:
    # ssh -L 3001:localhost:3001 deploy@IP_DA_VPS
    # Abrir: http://localhost:3001
    
    # Ou expor via Nginx (recomendado):
    # server_name status.seudominio.com.br;
    # proxy_pass http://localhost:3001;

    Configurar monitores via API

    Após o setup inicial no browser, adicione monitores programaticamente:

    javascript
    # Uptime Kuma tem API REST e WebSocket
    # Para automatizar via CLI, use uptime-kuma-api (npm package)
    
    npm install -g uptime-kuma-api
    
    # Ou via script Node.js:
    const { UptimeKumaClient } = require("uptime-kuma-api")
    
    const client = new UptimeKumaClient({ baseURL: "http://localhost:3001" })
    await client.login("admin", "sua_senha")
    
    // Adicionar monitor HTTP(S)
    await client.addMonitor({
      type: "http",
      name: "API de Produção",
      url: "https://api.seudominio.com.br/health",
      interval: 60,           // verificar a cada 60 segundos
      maxretries: 3,          // marcar down após 3 falhas
      keyword: '"status":"ok"',  // verificar conteúdo da resposta
      accepted_statuscodes: [["200-299"]],
    })
    
    // Monitor TCP (ex: banco de dados)
    await client.addMonitor({
      type: "tcp",
      name: "PostgreSQL",
      hostname: "localhost",
      port: 5432,
      interval: 60,
    })

    Tipos de monitores disponíveis

    Uptime Kuma suporta múltiplos tipos de verificação:

    bash
    # HTTP(S) — verificar status code e tempo de resposta
    # Tipo: http — URL: https://seudominio.com.br
    # Aceitar: 200-299 — Timeout: 30s
    
    # TCP — verificar se porta está aberta
    # Tipo: tcp — Host: localhost — Porta: 5432
    
    # Ping — verificar latência ICMP
    # Tipo: ping — Host: 8.8.8.8
    
    # DNS — verificar resolução de domínio
    # Tipo: dns — Nome: seudominio.com.br — Resolver: 8.8.8.8
    
    # Docker Container — verificar estado do container
    # Tipo: docker — Container ID/Nome: minha_api
    
    # Keyword — verificar conteúdo da resposta
    # Tipo: http — URL: /health
    # Keyword: "status":"ok" (a resposta deve conter este texto)
    
    # JSON Query — validar resposta JSON
    # Tipo: json-query — URL: /health
    # Query: $.status == "ok"
    
    # Certificate Expiry — alertar antes do SSL expirar
    # Tipo: certificate — URL: https://seudominio.com.br
    # Alertar quando faltarem: 14 dias

    Status Page pública

    Crie uma página de status pública para comunicar incidentes aos usuários:

    nginx
    # Via interface Grafana: Status Pages → New Status Page
    
    # Configurações:
    # - Slug: status (URL será: status.seudominio.com.br)
    # - Título: Status dos Serviços
    # - Selecionar monitores a exibir (pode escolher um subset)
    # - Mostrar histórico: últimos 90 dias
    # - Incident management: criar e comunicar incidentes
    
    # Nginx para a status page:
    server {
        listen 443 ssl;
        server_name status.seudominio.com.br;
    
        ssl_certificate /etc/letsencrypt/live/status.seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/status.seudominio.com.br/privkey.pem;
    
        location / {
            proxy_pass http://localhost:3001;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";  # necessário para WebSocket
            proxy_set_header Host $host;
        }
    }

    Configurar notificações Telegram

    Configure alertas instantâneos via Telegram:

    bash
    # Via interface: Settings → Notifications → Add Notification
    
    # Telegram:
    # - Notification Type: Telegram
    # - Bot Token: SEU_TOKEN_DO_BOTFATHER
    # - Chat ID: SEU_CHAT_ID (ou ID do grupo negativo)
    # - Mensagem customizada: disponível com variáveis
    
    # Template de mensagem:
    # 🔴 [DOWN] {{ monitor.name }}
    # URL: {{ monitor.url }}
    # Reason: {{ msg }}
    # Duração: {{ duration }}
    # Time: {{ time }}
    
    # Ou 🟢 [UP] {{ monitor.name }} — duração do downtime: {{ duration }}
    
    # Associar notificação a monitores específicos:
    # Monitor → Edit → Notifications → selecionar a notificação configurada

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes