Bagaimana saya bisa menonton koneksi saat ini di server web Apache saya?

37

Saya hosting cukup banyak host virtual menggunakan Apache dalam LAMP dasar yang diatur dengan bantuan Webmin / Virtualmin. Saya mencari alat seperti teratas di mana saya dapat memonitor koneksi saat ini. Bagian hosting virtual tampaknya memberi saya masalah di sini. Inilah yang saya coba:

  • netstat- Saya dapat melihat koneksi, tetapi mereka menunjukkan kepada saya seolah-olah mereka semua menggunakan domain utama saya, misalnya mydomain.com:www.
  • iftop- Saya sangat menyukainya, tetapi kelemahannya sama seperti netstat: tidak menunjukkan host virtual.
  • apachetop- tampaknya tidak menampilkan informasi untuk semua host virtual saya. Saya masuk untuk memisahkan file log khusus, yang saya curigai adalah alasan mengapa itu tidak berfungsi.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- tidak bekerja baik.

Jadi, pada dasarnya, saya sedang mencari sesuatu yang mirip dengan arus keluaran netstat, tetapi untuk menyertakan virtual host permintaan tersebut untuk, misalnya: avirtualsite.com:www.

Piotr Kula
sumber
Saya menggunakan Apache2 - Instalasi LAMP default untuk digunakan dengan VirtualMin / Webmin - Saya baru saja menemukan apachetop- tetapi itu hanya memonitor file yang saya berikan .. sial- tidak semua server ...
Piotr Kula

Jawaban:

35

Jawaban Andrea Corbellini menjelaskan kepada Anda mengapa itu tidak bekerja dengan alat yang Anda gunakan dan bagaimana Virtual Hosting bekerja. Inilah cara paling sederhana yang dapat saya pikirkan untuk menyelesaikannya di Apache ...

mod_status akan membantumu.

Penafian: Saya tidak tahu bagaimana hal ini dilakukan di Webmin - Saya menggunakan file konfigurasi kosong untuk mengatur server. Berikut ini adalah ikhtisar dasar langkah-langkahnya.

Ini topalat yang mirip, tetapi direpresentasikan sebagai halaman web. Itu daftar keadaan saat ini langsung ditanya dari Apache, jadi itu tidak tergantung pada parsing file log seperti apachetophalnya.

  1. Aktifkan mod_status:

    sudo a2enmod status
    
  2. Berikan diri Anda akses.

    • Buka /etc/apache2/mods-enabled/status.confdan edit:
    • Setel ExtendedStatuske On(opsional, tetapi lebih keren dan sedikit lebih lambat)
    • Di dalam <Location /server-status>, tambahkan alamat IP Anda ke baris dengan Allowarahan. Contoh:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Mulai ulang Apache:

    sudo service apache2 restart
    
  4. Nikmati alat di browser Anda, misalnya: http://1.2.3.4/server-status

    Ini akan terlihat seperti contoh screenshot ini .

  5. Terus menekan F5untuk mendapatkan pembaruan. Atau dapatkan plugin peramban yang luar biasa dan tontonlah itu diperbarui!


Webmin

tambahan oleh OP untuk pengunjung masa depan

Di Webmin, langkah-langkah dasar tentang modul Status dapat ditemukan di sini:

  • Server -> Apache Webserver -> Konfigurasi Modul Apache
  • Pilih modul Status dan klik klik Aktifkan Modul yang Dipilih

masukkan deskripsi gambar di sini

gertvdijk
sumber
menarik - tetapi jika saya memiliki 100 situs web virtual - akankah ini menunjukkan statistik untuk SEMUA situs web? karena log masuk di /var/log/apache2/access.log kosong karena kami tidak menggunakan situs web standar, setiap situs web memiliki /log/access.log sendiri yang tersebar di
Piotr Kula
2
Aku sangat menyukaimu sekarang. Beri ciuman: * +1
Piotr Kula
Jenius - Itulah yang saya butuhkan. itu menunjukkan saya vhost sekarang! Terima kasih sejuta pria! Saya tidak tahu bagaimana membalas pengetahuan Anda!
Piotr Kula
Serius! Saya sangat menyukai alat status ini! Saya telah mendeteksi begitu banyak skrip berkat ini. Ini membantu saya untuk mendapatkan situs ditambal, ditingkatkan dan diperbaiki. Bantuan Anda sangat kami hargai. Saya berharap saya bisa memberikan Anda semua perwakilan saya!
Piotr Kula
@ppkinkin Tolong jangan melebih-lebihkan. Ini adalah modul Apache yang sangat mendasar dan umum untuk tugas-tugas ini. Buku apa pun yang menghargai diri sendiri tentang Apache akan menyebutkannya. Saya senang saya membantu dalam hal ini.
gertvdijk
15

Semua alat yang Anda coba tidak akan pernah memberi Anda jawaban yang benar. Alasannya adalah bahwa informasi yang Anda minta hilang ketika koneksi dibuat.

Mari kita gunakan sebuah contoh: misalkan server web Anda memiliki satu alamat IP ( 1.2.3.4 ) dan dua nama host ( a.mydomain.com dan b.mydomain.com ) yang menyelesaikan ke alamat IP itu.

Apa yang terjadi ketika Anda menggunakan browser web favorit saat mengunjungi a.mydomain.com ?

  1. Browser meminta server DNS Anda alamat IP yang sesuai dengan a.mydomain.com .
  2. Server DNS memberi tahu browser bahwa alamatnya 1.2.3.4 .
  3. Browser web terhubung ke 1.2.3.4 .

Jadi netstat& hanya tahu bahwa ada koneksi masuk yang dibuat ke 1.2.3.4 . Alasan mengapa Anda melihat nama host alih-alih alamat IP adalah bahwa alamat IP memiliki catatan rDNS, jadi netstatlebih suka menunjukkannya daripada IP, karena lebih bagus. Coba netstat -n(atau hapus catatan rDNS) dan Anda akan melihat alamat IP.

Tapi bukan itu saja: ketika saya mengatakan bahwa informasi tentang nama host yang digunakan untuk membuat koneksi terputus, saya tidak sepenuhnya benar. Dari sudut pandang tumpukan TCP / IP, kalimat itu benar. Tetapi jika kita melihat hal-hal dari sudut pandang protokol HTTP, semuanya berbeda. Di setiap permintaan HTTP ada Host:header yang berisi nama host yang digunakan oleh browser untuk membuat permintaan.

Jadi, singkatnya, Anda harus melihat file log server web Anda. Server web adalah layanan yang menangani permintaan HTTP dan karenanya satu-satunya layanan yang tahu tentang nama host "asli".

Andrea Corbellini
sumber
1
+1 Cerita latar belakang jaringan yang penting diremehkan. Tertaut dalam jawaban saya, ini juga layak untuk upvotes!
gertvdijk
13

Cara lain adalah mengetik

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

di terminal Anda

niksmac
sumber
2
Bagus dan sederhana; cukup lurus ke depan, terima kasih!
Julian F. Weinert
Saya perhatikan bahwa di instalasi cPanel saya (pada mesin CentOS, tapi saya pikir cPanel di Ubuntu mungkin sama), access.logtidak mengandung semua permintaan. Sebagai gantinya, saya melihat /usr/local/apache/domlogs/untuk melihat permintaan oleh virtualhost (terbagi antara SSL, non-SSL, dan bahkan FTP). Path mungkin berbeda di Ubuntu cPanel.
Buttle Butkus
2
Saya menemukan ini dari Google. Teknik ini bekerja di CentOS 7, kecuali Anda perlu/var/log/httpd/access_log
mwfearnley
7

Anda dapat memeriksa semua ips yang terhubung pada port 80 dengan bash ini

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

Catatan: jika Anda ingin melihat port lain, ubah 80

KELUARAN:

 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
sumber
2

Anda dapat memeriksanya dengan:

netstat -na | grep 'ESTA'
pengguna1717828
sumber
1

Jika Anda ingin pid, pengguna dan perintah:

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

Anda juga dapat menggunakan GoAccess secara interaktif untuk melihat pengunjung Anda saat ini. Ini mem-parsing log akses Apache Anda untuk tujuan ini dan menunjukkan banyak statistik tentang situs Anda.

umar14
sumber