Nos primeiros três meses de funcionamento do OpenClaw, minha estratégia de monitoramento era: verificar o terminal a cada poucas horas e torcer para que nada estivesse pegando fogo. Spoiler: às vezes, as coisas estavam pegando fogo e eu não sabia até que alguém me dissesse.
Depois, configurei um painel no Grafana, e foi como colocar óculos pela primeira vez. De repente, eu podia ver tudo — tempos de resposta, uso dos tokens, taxas de erro, atividade dos agentes — tudo em um só lugar, em tempo real, com gráficos bonitos que me fazem sentir como se estivesse pilotando uma nave espacial.
Veja como eu o construí, o que estou monitorando e por que isso é mais importante do que você pensa.
Por que se dar ao trabalho de ter um painel
“Os logs são suficientes” é o que eu dissera antes do painel. Não é suficiente. Os logs te dizem o que aconteceu depois que alguém reclamou. Um painel te informa o que está acontecendo antes que alguém perceba.
Três coisas que meu painel detectou que os logs sozinhos não teriam:
Degradação gradual dos tempos de resposta. Ao longo de duas semanas, o tempo de resposta médio subiu de 2,3 segundos para 4,8 segundos. O aumento foi gradual demais para ser notado em interações individuais, mas a linha de tendência no painel claramente estava errada. Causa raiz: um contexto de conversa crescente que não estava sendo cortado.
Pico no custo dos tokens. Em uma terça-feira, meu uso diário de tokens triplicou. Não por causa de mais requisições — mas por causa de respostas mais longas. Uma mudança no prompt que eu fiz na véspera fazia com que o modelo gerasse saídas muito mais verbosas do que o esperado. O painel detectou isso em algumas horas; caso contrário, eu teria notado quando a fatura mensal chegasse.
Falhas silenciosas de cron jobs. Duas tarefas agendadas falhavam silenciosamente há uma semana. O painel mostrava que o padrão esperado (picos de execução diária em momentos específicos) tinha lacunas. Sem o modelo visual, eu talvez não tivesse notado por mais uma semana.
A configuração
Pilha: Prometheus para coleta de métricas, Grafana para visualização, Node Exporter para métricas de sistema. Tempo total de configuração: cerca de 3 horas. Custo total: gratuito (auto-hospedado) ou 15 $/mês (o nível gratuito do Grafana Cloud cobre a maioria das necessidades).
Se você já está usando um VPS para o OpenClaw, pode rodar o Grafana no mesmo servidor. Minha configuração executa Prometheus e Grafana no mesmo VPS por 20 $/mês como o OpenClaw, sem impacto notável nas performances.
Extraindo métricas do OpenClaw: Os logs do OpenClaw são a principal fonte de dados. Escrevi um script simples que analisa os arquivos de log e expõe as métricas como um ponto de extremidade Prometheus. As principais métricas a serem extraídas:
– Número de requisições (total e por tipo)
– Tempo de resposta (média, p95, p99)
– Uso dos tokens (entrada e saída, por requisição)
– Número de erros (por tipo)
– Sessões ativas
– Estado de execução dos cron jobs
O layout do meu painel
Eu tenho quatro linhas:
Linha 1: Saúde em um relance. Quatro grandes números: tempo de resposta atual, requisições na última hora, taxa de erro e custo diário estimado. Verde quando normal, amarelo quando alto, vermelho quando algo requer atenção. Eu olho essa linha 10 vezes por dia.
Linha 2: Tendências. Gráficos de séries temporais para tempo de resposta, volume de requisições e uso dos tokens nas últimas 24 horas e nos últimos 7 dias. É aqui que eu noto a degradação gradual e padrões incomuns.
Linha 3: Custos. Uso dos tokens detalhado por modelo, por tipo de tarefa e por hora. Um total acumulado diário comparado ao orçamento. Esta linha me economizou centenas de dólares ao detectar rapidamente anomalias de custo.
Linha 4: Atividade dos agentes. Quais agentes estão ativos, em que estão trabalhando, histórico de execução dos cron jobs e erros recentes com detalhes. É a linha de depuração — eu só a olho quando algo não está certo.
Os alertas que realmente importam
Configurei 6 alertas. Depois de um mês de ajustes, removi 2 que estavam muito barulhentos e ajustei os limiares dos 4 restantes.
Alerta 1: Tempo de resposta > 10 segundos. Isso é acionado quando o tempo de resposta p95 ultrapassa 10 segundos em uma janela de 5 minutos. Geralmente, isso significa que a API AI está com problemas ou que meu contexto é muito grande.
Alerta 2: Taxa de erro > 5%. Mais de 5% das requisições falhando significa que há algo sistematicamente errado, e não apenas problemas ocasionais da API.
Alerta 3: Custo diário ultrapassa 2x a média. Detecta loops incontroláveis e picos de consumo inesperados antes que se tornem caros.
Alerta 4: Execução de cron job perdida. Se um cron job esperado não é executado dentro de 30 minutos após seu horário previsto, algo está errado.
Esses quatro alertas constituem o equilíbrio certo para minha configuração. Suficientes para capturar problemas reais. Não tanto que eu comece a ignorá-los.
O que eu evitaria
Painéis por requisição. Primeiro, construi um painel mostrando cada requisição individual. Foi interessante por cerca de um dia, depois virou ruído. As métricas agregadas são mais úteis do que os dados individuais para monitoramento.
Painéis de comparação de modelos. Construi painéis comparando os scores de qualidade do Claude e do GPT-4o. Os dados eram interessantes, mas não acionáveis — eu já havia decidido qual modelo usar, e o painel não mudou essa decisão.
Visualizações complicadas. Grafana pode criar belos painéis com medidores, mapas de calor e diagramas de fluxo. Resista à tentação. Gráficos simples de linha e grandes números são mais legíveis à primeira vista, que é o objetivo.
O cálculo do ROI
Tempo de configuração: 3 horas.
Manutenção mensal: 30 minutos (atualização de painéis, ajuste de alertas).
Economias obtidas ao detectar problemas cedo: estimadas em 200-300 $/mês em custos evitados e redução de tempos de inatividade.
O painel se pagou no primeiro mês. Se você usa OpenClaw (ou qualquer sistema de IA) sem observabilidade, você está voando às cegas. Você pode estar voando corretamente. Mas quando não estiver, você não saberá até já ter colidido.
🕒 Published: