Problemas frequentes com o Apache2 e HestiaCP? Guia de monitoramento e solução de problemas automatizados do Monit (com configuração completa).

Problemas frequentes com o Apache2 ou reinicializações automáticas do Monit em ambientes HestiaCP ? Este artigo oferece um guia prático para evitar erros comuns ao monitorar o Apache2 com o Monit, analisando detalhadamente problemas comuns como desalinhamento de caminhos de PID e bloqueio de permissões, além de fornecer arquivos de configuração de automação do Monit prontos para produção. Domine agora mesmo as técnicas de manutenção de servidores de alta disponibilidade e alcance a recuperação automática de segundo nível em caso de falhas!

As dificuldades que encontrei ao usar o Monit para monitorar o Apache2

Na última sexta-feira, o servidor me enviou um alerta do Monit no meio da noite.

Olhei para o painel atordoado e, na coluna de status do Apache2, havia um "Timeout" em vermelho.

Problemas frequentes com o Apache2 e HestiaCP? Guia de monitoramento e solução de problemas automatizados do Monit (com configuração completa).

Pensei um pouco sobre isso. Acabei de adicionar o monitoramento Monit ao servidor durante o dia e copiei e colei a configuração de um tutorial online. Não deve haver nenhum problema, certo?

Na manhã seguinte, o tempo limite expirou novamente. Após a terceira vez, o monitor simplesmente desistiu e o painel exibiu "Não monitorado".

EU...

Confesso que, a princípio, não levei a sério. Monitoramento do Apache2? Você encontra vários modelos de configuração online, é só copiar e colar. Mas esse processo de colar me deixou furioso.

A causa raiz do conflito entre a arquitetura padrão do HestiaCP e as portas do Monit.

Primeiro, vou mostrar a configuração que me causou tantos problemas, para que você possa ver se é exatamente igual à versão que você viu.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/usr/sbin/service apache2 start"
    stop program  = "/usr/sbin/service apache2 stop"
    if failed host 127.0.0.1 port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

Parece estar tudo bem, certo? Ele verifica a porta 80 e, se houver uma falha, reinicia. Se continuar falhando após 5 reinicializações, o processo expira.

O problema é que seu Apache2 nem sequer está rodando na porta 80.

Essa é uma armadilha do HestiaCP e a causa principal de muitas pessoas caírem nela. A arquitetura padrão do HestiaCP é um proxy reverso de Nginx + Apache2, com o Nginx ocupando as portas 80 e 443 na frente e o Apache2 rodando na porta local 8081 atrás.

Se você pedir ao Monit para verificar se o Apache2 está ativo na porta 80, é como ir ao McDonald's e procurar um KFC. O servidor olha para você sem expressão, e vocês dois ficam se encarando. No fim, o Monit determina que o servidor está fora do ar e começa a reiniciá-lo freneticamente.

Após a reinicialização, a porta continua sendo a 8081. O Monit tenta então sondar a porta 80, o que também falha, então ele reinicia novamente. Esse ciclo se repete até que o Monit considere o problema irreparável e expire o tempo limite.

Quando me deparei com isso pela primeira vez, fiquei genuinamente surpreso. Nove em cada dez tutoriais que encontrei online usavam a porta 80. Se você os seguiu, o problema não era com você, mas com a própria fonte da informação.

Problemas frequentes com o Apache2 e HestiaCP? Guia de monitoramento e solução de problemas automatizados do Monit (com configuração completa).

Um arquivo PID corrompido do Apache2 fez com que o Monit identificasse erroneamente o processo como inexistente.

Após alterar a porta de 80 para 8081, o Monit deveria, teoricamente, ser capaz de detectá-la, certo?

No entanto, na realidade, ainda ocasionalmente relata " Falha na execução ".

Depois de muito tentar, finalmente descobri que o motivo era simples: o arquivo PID estava corrompido.

Pense bem: o Monit estava reiniciando o Apache2 freneticamente, forçando o encerramento e reinício a cada vez, num processo que se repetia várias vezes. Durante esse processo, o arquivo /var/run/apache2/apache2.pid pode ter ficado com 0 bytes.

Em outras palavras, o arquivo ainda está lá, mas está vazio.

Quando o Monit lê este arquivo, não encontra nada. Ele não reconhece o seu Apache2, mesmo que o Apache2 esteja funcionando perfeitamente em segundo plano; o Monit simplesmente não reconhece o processo.

Quando vi isso, fiquei sem palavras por um momento.

Isso é um deadlock. O Monit não consegue detectar a instância do Apache 2, reinicia o Apache2, corrompe o arquivo PID durante o processo de reinicialização, falha na próxima detecção e reinicia novamente. Esse ciclo continua até que o tempo limite seja atingido.

Etapas de solução de problemas e reparo para monitoramento do Apache2 em ambiente HestiaCP

Sinceramente, o processo de investigação não é complicado, mas você precisa saber em que direção investigar.

O primeiro passo é determinar em qual porta o seu Apache2 está escutando. Basta digitar um comando no terminal.

netstat -tulpn | grep apache2

Alternativamente, você pode usar o comando `ss`; o efeito é o mesmo.

ss -tulpn | grep apache2

Você verá uma saída semelhante a esta.

tcp  0  0 127.0.0.1:8081       0.0.0.0:*  LISTEN  2942372/apache2

Está confirmado que é 8081, e não 80. Essa é a raiz do problema.

O segundo passo é reparar o arquivo PID corrompido. Isso é mais simples.

monit unmonitor apache2
systemctl restart apache2
cat /var/run/apache2/apache2.pid

Primeiro, pause o monitoramento do Monit para evitar interferências enquanto você corrige os problemas. Em seguida, reinicie o Apache2 para permitir que ele sobrescreva um PID limpo. Por fim, use o comando `cat` para verificar o conteúdo do arquivo; ele deve conter uma sequência de números, não uma string vazia.

Uma vez concluída esta etapa, o problema estará basicamente resolvido.

Problemas frequentes com o Apache2 e HestiaCP? Guia de monitoramento e solução de problemas automatizados do Monit (com configuração completa).

Análise comparativa das configurações de proteção adaptativa e agressiva tradicionais do Monit

Os tutoriais online sobre como configurar o Apache2 com o Monit geralmente se dividem em duas categorias.

Um tipo é o "tipo de adaptação tradicional", que usa o comando `service` para gerenciar serviços e verificar portas locais sem adicionar muitas restrições complexas. Essa configuração pode ser usada no HestiaCP simplesmente alterando a porta e é relativamente estável.

Outra abordagem é o método de "proteção agressiva", que usa o systemctl para gerenciar serviços, adiciona restrições a processos filhos e emprega uma lógica de detecção mais rigorosa. Parece ótimo, mas tem uma falha fatal: o comando de parada usado é `killall -9`.

O que significa `killall -9`? Significa encerrar o dispositivo à força, independentemente do que ele esteja fazendo. Essa operação de força bruta pode facilmente deixar para trás arquivos PID corrompidos, que é o problema que acabei de mencionar.

Minha experiência pessoal é que limitar o número de processos filhos em uma configuração agressiva é de fato útil. Quando o Apache2 é sobrecarregado por um ataque de cópia de conteúdo (CC), limitar o número de processos filhos pode impedir que o servidor fique sem memória. No entanto, a abordagem `killall -9` é realmente inviável.

No fim, cheguei a um meio-termo e combinei as vantagens de ambas as configurações.

Configuração de melhores práticas do HestiaCP Apache2 Monit

Modifique o arquivo /etc/monit/conf.d/apache2 com o seguinte conteúdo.

check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/bin/systemctl start apache2"
    stop program  = "/bin/systemctl stop apache2"
    if children > 120 for 2 cycles then restart
    if failed host 127.0.0.1 port 8081 protocol http for 2 cycles then restart
    if 5 restarts within 10 cycles then timeout

Permita-me explicar brevemente a lógica por trás dessas poucas linhas de configuração.

Escreva a porta 8081 para corresponder precisamente à arquitetura de proxy reverso do HestiaCP; pare de escrever a porta 80 sem necessidade.

Use o comando `systemctl stop` em vez de `killall -9` para parar o arquivo PID, para não corrompê-lo.

Foi adicionado um limite para processos filhos: se o número de filhos exceder 120, o processo será reiniciado após dois ciclos consecutivos para evitar ataques de controle de grupo, mas não é uma medida muito drástica.

A lógica para detecção de falhas foi modificada para usar uma abordagem de "2 ciclos", o que significa que uma reinicialização só é acionada após duas falhas consecutivas, reduzindo falsos positivos. A configuração anterior, que reiniciava após apenas uma detecção, era francamente um pouco sensível demais.

O limite final de tempo limite foi aumentado para 5 reinicializações em 10 ciclos, proporcionando tolerância a falhas suficiente.

Hestia CP Monitoramento de monitoramentoResumo da resolução de problemas de configuração e compartilhamento de experiências

Após efetuar as alterações de configuração, monitorei o apache2 e o painel finalmente exibiu um indicador verde "OK".

Como descrever meus sentimentos na época? Foi como passar dois dias lutando com um bug, só para descobrir que a causa era uma única linha de configuração errada. Foi frustrante e ridículo ao mesmo tempo.

O Monit é uma ferramenta útil por si só, e monitorar serviços é algo que todo servidor deveria fazer. Mas o problema é que muitos tutoriais online partem do pressuposto de que "o Apache2 usa exclusivamente a porta 80", enquanto o HestiaCP usa um proxy reverso, o que significa que essa premissa não é verdadeira.

Se você seguir as instruções, o problema não é você; é que o tutorial se aplica a um cenário diferente do seu.

Portanto, se você também usa o HestiaCP e está configurando o Monit para monitorar o Apache2, lembre-se apenas de duas coisas: altere a porta para 8081 e use o comando `systemctl` para pará-lo, e não `killall -9`. Fazendo isso, você poderá evitar problemas futuros.


Já que você leu até aqui, se achou útil, curta e compartilhe. Se quiser receber atualizações em primeira mão, você também pode me seguir!

Obrigado por ler meu artigo. Até a próxima!

Esperamos que o artigo "HestiaCP Apache2 Frequent Crashes? Monit Automated Monitoring and Troubleshooting Guide (with Complete Configuration)" compartilhado no blog de Chen Weiliang ( https://www.chenweiliang.com/ ) seja útil para você.

Sinta-se à vontade para compartilhar o link deste artigo: https://www.chenweiliang.com/cwl-34457.html

Para descobrir mais truques ocultos🔑, seja bem-vindo ao nosso canal do Telegram!

Compartilhe e curta se você gostou! Seus compartilhamentos e curtidas são nossa motivação contínua!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Voltar ao Topo