Pular para o conteúdo

Caddy

O servidor web e proxy inverso: upstreams a falhar as suas verificações de saúde, uma recarga de configuração que falhou, erros de handler e a fração de respostas 5xx.

O DumbMonit lê três coisas da API de administração do Caddy, todas com GET: /config/apps/http/servers (a configuração HTTP que o Caddy executa, nunca a secção tls onde vivem os tokens dos fornecedores de DNS), /reverse_proxy/upstreams (os backends e as falhas que a verificação de saúde passiva memoriza) e /metrics (saúde dos upstreams, recargas, pedidos e erros).

A API de administração do Caddy não é só de leitura: quem a alcançar pode carregar uma nova configuração ou parar o Caddy. Escuta em localhost:2019 por essa razão. A configuração abaixo mantém-a aí e deixa o próprio Caddy publicar uma vista só de leitura dela, protegida por senha, que responde a GET nos três caminhos acima e recusa tudo o resto.

Todas as métricas têm o prefixo dumbmonit_caddy_. Os totais são contadores: os gráficos e as regras convertem-nos em taxas.

MétricaO quêEtiquetas
config_loaded1 quando o Caddy executa pelo menos um servidor HTTP
servers, routesservidores HTTP e rotas na configuração
config_last_reload_ok0 quando a última recarga de configuração falhou
config_last_reload_timestamp_secondshora da última recarga bem-sucedida
upstreams, upstreams_unhealthybackends de cada reverse_proxy, e os que estão a falhar
upstream_healthy1 quando nem a verificação de saúde ativa nem a passiva exclui o backendupstream
upstream_failspedidos falhados que a verificação de saúde passiva memoriza atualmenteupstream
upstream_requestspedidos em curso para o backendupstream
requests_total, requests_5xx_total, request_errors_totalcom a opção metrics: pedidos, respostas 5xx e erros de handler
server_requests_total, server_requests_5xx_total, server_request_errors_totalo mesmo por servidor (srv0, srv1… ou os nomes que deu)server

upstream_healthy precisa de /metrics: a verificação de saúde ativa só é visível aí. Uma vista só de leitura que não deixa passar /metrics continua a reportar os backends e as suas falhas memorizadas. O Caddy não publica a sua versão através da API de administração.

As regras incorporadas que se aplicam: Caddy upstream unhealthy, Caddy configuration reload failed, Reverse proxy answering 5xx, mais Monitor unreachable.

O painel acima dos gráficos lê o que a verificação guardou; abrir a página nunca consulta o Caddy. Diz o que está mal numa frase (sem configuração, uma recarga falhada, upstreams não saudáveis, uma fração alta de 5xx), depois os servidores, rotas, upstreams, taxa de pedidos, fração de 5xx e erros de handler ao longo de 24 horas, depois cada upstream com as suas falhas memorizadas.

Publicar uma vista só de leitura da API de administração do Caddy

Seção intitulada “Publicar uma vista só de leitura da API de administração do Caddy”
  1. A API de administração do Caddy pode carregar uma nova configuração e parar o Caddy: tem de ficar fora de alcance de tudo excepto o DumbMonit. Deixe-a onde o Caddy a coloca, em localhost:2019, e deixe o Caddy publicar uma vista só de leitura dela: só GET, nos três caminhos que o DumbMonit lê, atrás de uma senha.

  2. Crie o hash da senha para o utilizador dumbmonit.

    caddy hash-password --plaintext 'a-long-password'
  3. Adicione este site ao Caddyfile, com esse hash em vez de HASH, depois recarregue o Caddy. Responde na porta 2020 e recusa tudo exceto essas três leituras.

    :2020 {
    basic_auth {
    dumbmonit HASH
    }
    @readonly {
    method GET
    path /config/apps/http/servers /reverse_proxy/upstreams /metrics
    }
    handle @readonly {
    reverse_proxy localhost:2019 {
    header_up Host localhost:2019
    }
    }
    respond 403
    }
  4. Opcional: adicione metrics ao bloco de opções globais no topo do Caddyfile para contar pedidos, erros e respostas 5xx por servidor. A saúde dos upstreams e as recargas são reportadas sem isso.

    metrics
  5. Filtre a porta 2020 para que só o anfitrião do DumbMonit a alcance. No DumbMonit, introduza o anfitrião do Caddy com essa porta, por exemplo «caddy.lan:2020», e o utilizador dumbmonit com a sua senha.

O Caddyfile mantém o seu significado sem indentação; caddy fmt indenta-o. header_up Host localhost:2019 é necessário porque a API de administração só responde a pedidos dirigidos ao endereço em que escuta. Com a imagem do contentor Caddy, execute o comando de hash com docker exec.

Uma configuração carregada como JSON em vez de a partir de um Caddyfile recebe o mesmo site como um servidor extra com um handler basic_auth, um correspondente method e path e um reverse_proxy para localhost:2019.

CredencialCampos
Vista só de leituraO utilizador e a senha do bloco basic_auth acima (recomendado).
Sem senhaNada: a própria API de administração, filtrada para que só o DumbMonit a alcance.

Endereço: um nome de anfitrião ou IP com a porta da vista só de leitura (caddy.lan:2020), ou um URL completo. Opções: protocolo (HTTP por predefinição), porta (2019, a própria API de administração), verificação de certificado e tempo limite do pedido (10 s).

A verificação de saúde passiva (fail_duration) só memoriza as falhas durante essa duração: um backend que falha uma vez e recupera é reportado como não saudável até então. A regra espera cinco minutos antes de disparar.