Estou tentando diagnosticar um problema bizarro de travamento do servidor (o servidor responde a pings, mas não aceita conexões SSH até a reinicialização. 0% da CPU ) em que a reinicialização do servidor faz com que tudo volte ao normal. Eu gostaria que meus logs de acesso do Apache (ou algum outro log) incluíssem todas as solicitações feitas corretamente quando a falha ocorreu, mas infelizmente o Apache não registra solicitações até que elas sejam concluídas. Significando que, se uma solicitação está travando o servidor, essa solicitação nunca termina e, portanto, não aparece nos logs.
Existe alguma maneira de configurar o Apache para criar um arquivo de log que é gravado quando as solicitações chegam?
apache-2.2
logging
Ben Dilts
fonte
fonte
Respostas:
Acho que o que você precisa de log forense, consulte este link: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
snippet:
Formato de registro forense:
Cada solicitação é registrada duas vezes. A primeira vez é antes de ser processado (após receber os cabeçalhos). A segunda entrada de log é gravada após o processamento da solicitação ao mesmo tempo em que ocorre o log normal.
Para identificar cada solicitação, um ID de solicitação exclusivo é atribuído. Esse ID forense pode ter registro cruzado no log de transferência normal usando a sequência de formato% {forensic-id} n. Se você estiver usando mod_unique_id, seu ID gerado será usado.
A primeira linha registra o ID forense, a linha de solicitação e todos os cabeçalhos recebidos, separados por caracteres de barra vertical (|). Uma linha de amostra é semelhante à seguinte (todas em uma linha):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | Agente do usuário: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Aceitar: imagem / png, etc ...
O caractere mais no início indica que esta é a primeira linha de log desta solicitação. A segunda linha contém apenas um caractere de menos e o ID novamente:
-yQtJf8CoAB4AAFNXBIEAAAAA
O script check_forensic usa como argumento o nome do arquivo de log. Ele procura esses pares +/- ID e reclama se uma solicitação não foi concluída.
fonte
A resposta da Sandroid é adequada para sua pergunta, mas você também deve considerar executar uma captura de pacote de rede. Se você tiver os recursos, espelhar a porta no comutador e usar uma segunda máquina executando o WireShark para registrar todo o tráfego IP pode realmente ajudar. Se algo estiver levando o servidor ao ponto em que serviços não HTTP não estão respondendo, pode ser que esteja retirando a pilha de IPs antes que os dados incorretos cheguem ao Apache.
Se você pode garantir que a máquina que está executando a captura tenha hardware e / ou drivers de rede diferentes dos outros. Seria péssimo bater dois pelo preço de um. ;-)
fonte