Como posso assistir as conexões atuais no meu servidor Apache?

37

Estou hospedando muitos hosts virtuais usando o Apache em um LAMP básico configurado com a ajuda do Webmin / Virtualmin. Estou procurando uma ferramenta top-like na qual eu possa monitorar as conexões atuais. A parte de hospedagem virtual parece estar me causando problemas aqui. Aqui está o que eu tentei:

  • netstat- Eu posso ver as conexões, mas elas me mostram como se todas estivessem usando meu domínio principal, por exemplo mydomain.com:www.
  • iftop- Gosto muito, mas o lado negativo é netstat: não mostra o host virtual.
  • apachetop- parece não mostrar informações para todos os meus hosts virtuais. Estou efetuando logon para separar arquivos de log personalizados, o que, suspeito, é a causa do motivo pelo qual não funciona.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- não funcionando.

Então, basicamente, eu estou procurando algo semelhante ao corrente de saída netstat, mas para incluir o host virtual a solicitação é para, por exemplo: avirtualsite.com:www.

Piotr Kula
fonte
Eu estou usando Apache2 - instalação LAMP padrão para uso com virtualmin / Webmin - Acabei de encontrar apachetop- mas que apenas monitora o arquivo i fornecer .. damnit- nem todos os servidores ...
Piotr Kula

Respostas:

35

A resposta de Andrea Corbellini explica por que não funciona com as ferramentas que você está usando e como funciona a Hospedagem Virtual. Aqui está a maneira mais simples que eu posso pensar para fazer isso no Apache ...

mod_status irá ajudá-lo.

Isenção de responsabilidade: não sei dizer como isso é feito no Webmin - uso arquivos de configuração simples para configurar servidores. Aqui está apenas uma visão geral básica das etapas.

É uma topferramenta parecida, mas representada como uma página da web. Ele lista o estado atual consultado diretamente no Apache, portanto, não depende da análise dos arquivos de log como apachetopfaz.

  1. Ativar mod_status:

    sudo a2enmod status
    
  2. Conceda-se acesso.

    • Abrir /etc/apache2/mods-enabled/status.confe editar:
    • Defina ExtendedStatuscomo On(opcional, mas mais impressionante e um pouco mais lento)
    • No diretório<Location /server-status> , anexe seu endereço IP à linha com a Allowdiretiva. Exemplo:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Reinicie o Apache:

    sudo service apache2 restart
    
  4. Aproveite a ferramenta no seu navegador, por exemplo: http://1.2.3.4/server-status

    Será parecido com este exemplo de captura de tela .

  5. Continue pressionando F5para obter atualizações. Ou obtenha um incrível plugin para o navegador e assista à atualização!


Webmin

adendo do OP para futuros visitantes

No Webmin, as etapas básicas sobre o módulo Status podem ser encontradas aqui:

  • Servidores -> Servidor Web Apache -> Configurar Módulos Apache
  • Selecione o módulo Status e clique em Ativar Módulos Selecionados

insira a descrição da imagem aqui

gertvdijk
fonte
interessante - mas se eu tiver 100 sites virtuais - ele me mostrará estatísticas de TODOS os sites? porque o log de coonection em /var/log/apache2/access.log está vazio, porque não usar o website padrão, cada site tem seu próprio /log/access.log espalhados por todo
Piotr Kula
2
Eu gosto muito de você agora. Me dê um beijo: * +1
Piotr Kula 10/01
Gênio - Era disso que eu precisava. está me mostrando vhost agora! Graças a um milhão de homens! Eu não sei como pagar pelo seu conhecimento!
Piotr Kula
A sério! Eu amo muito essa ferramenta de status! Eu detectei muitos scripts graças a isso. Isso me ajudou a corrigir, atualizar e corrigir os sites. Sua ajuda é tão apreciada. Gostaria de poder lhe dar todo o meu representante!
Piotr Kula
@ppumkin Não exagere, por favor. É um módulo Apache muito básico e comum para essas tarefas. Qualquer livro que se preze sobre o Apache o mencionará. Estou feliz por ter sido útil nisso, no entanto.
precisa saber é
15

Todas as ferramentas que você está tentando nunca fornecerão a resposta certa. O motivo é que as informações solicitadas são perdidas quando a conexão é feita.

Vamos usar um exemplo: suponha que seu servidor Web tenha um endereço IP ( 1.2.3.4 ) e dois nomes de host ( a.mydomain.com e b.mydomain.com ) resolvidos para esse endereço IP.

O que acontece quando você usa seu navegador favorito quando visita a.mydomain.com ?

  1. O navegador solicita ao servidor DNS o endereço IP a.mydomain.com corresponde.
  2. O servidor DNS informa ao navegador que o endereço é 1.2.3.4 .
  3. O navegador da web se conecta ao 1.2.3.4 .

So netstat& co. só sabemos que há uma conexão de entrada feita para 1.2.3.4 . A razão pela qual você vê um nome de host em vez de um endereço IP é que o endereço IP possui um registro rDNS, portanto, netstatprefere mostrar isso em vez do IP, porque é melhor. Experimente netstat -n(ou remova o registro rDNS) e você verá o endereço IP.

Mas isso não é tudo: quando eu disse que as informações sobre o nome do host usado para fazer a conexão foram perdidas, eu não estava totalmente certa. Do ponto de vista da pilha TCP / IP, essa frase é verdadeira. Mas se vemos as coisas do ponto de vista do protocolo HTTP, as coisas são diferentes. Em toda solicitação HTTP, há um Host:cabeçalho que contém o nome do host que foi usado pelo navegador para fazer a solicitação.

Portanto, resumindo, você deve examinar os arquivos de log do seu servidor web. O servidor da web é o serviço que lida com as solicitações HTTP e, portanto, o único serviço que conhece o nome do host "original".

Andrea Corbellini
fonte
11
+1 Histórias importantes de fundo de rede são subestimadas. Ligado na minha resposta, isso merece votos positivos também!
precisa saber é o seguinte
13

Outra maneira é digitar

tail -f /var/log/apache2/access.log

no seu terminal

niksmac
fonte
2
Agradável e simples; muito simples, obrigado!
Julian F. Weinert
Percebo que nas minhas instalações do cPanel (em máquinas CentOS, mas acho que o cPanel no Ubuntu provavelmente é o mesmo), access.logele não contém todas as solicitações. Em vez disso, olho /usr/local/apache/domlogs/para ver solicitações por host virtual (dividido entre SSL, não SSL e até FTP). O caminho pode ser diferente no Ubuntu cPanel.
precisa saber é o seguinte
2
Encontrei isso no Google. Esta técnica funciona em CentOS 7, exceto que você precisa/var/log/httpd/access_log
mwfearnley
7

Você pode verificar todos os ips conectados na porta 80 com este bash

netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

Nota: se você quiser ver outra porta, altere 80

SAÍDA:

 19 x.174.143.1
 13 x.175.135.1
  9 x.68.135.1
  8 x.144.87.1
  7 x.68.150.1
  6 x.92.4.1
  6 x.188.23.1
  5 x.190.164.1
  4 x.189.156.1
DarckBlezzer
fonte
2

Você pode verificar isso com:

netstat -na | grep 'ESTA'
user1717828
fonte
1

Se você quiser pid, usuário e comando:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9
Vextor
fonte
0

Você também pode usar o GoAccess interativamente para visualizar seus visitantes atuais. Ele analisa o log de acesso do Apache para esse fim e mostra várias estatísticas sobre o seu site.

umar14
fonte