Apache日志中的連接數監控方法
Apache的訪問日志(access_log)記錄了每個客戶端請求的詳細信息,可通過命令行工具提取連接數相關指標。常見操作包括:
wc -l統計日志行數(每行代表一個請求),例如cat /var/log/apache2/access.log | wc -l。grep過濾特定時間段(如某小時)的日志,再統計行數,例如cat /var/log/apache2/access.log | grep "2025-09-30:10" | wc -l(統計10點的連接數)。awk提取IP地址并排序,統計每個IP的連接次數,例如cat /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10(顯示連接數最多的前10個IP)。cat /var/log/apache2/access.log | awk '{print $7}' | sort | uniq -c | sort -nr(顯示最熱門的URL)。mod_status是Apache的核心模塊,可提供服務器實時狀態信息,包括當前活動連接數(BusyWorkers)、空閑工作進程數(IdleWorkers)及總請求數等。
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),添加以下內容:<Location "/server-status">
SetHandler server-status
Require ip 192.168.1.0/24 # 限制訪問IP(如本地或內網),避免未授權訪問
</Location>
prefork MPM(多進程模型),需開啟ExtendedStatus以獲取更詳細的連接信息:ExtendedStatus On
sudo systemctl restart apache2(Ubuntu/Debian)或sudo systemctl restart httpd(CentOS/RHEL)。http://服務器IP/server-status,頁面中會顯示BusyWorkers(當前處理請求的進程數,近似等于活動連接數)和Total Accesses(總請求數)等信息。通過Linux系統命令可直接獲取Apache進程的網絡連接狀態,快速了解當前連接數:
netstat -an | grep :80 | grep ESTABLISHED | wc -lnetstat -an獲取所有網絡連接,grep :80過濾出80端口的連接,grep ESTABLISHED篩選出已建立的連接(即活躍連接),最后wc -l統計數量。ss命令:ss -s可顯示系統所有連接的統計信息,包括TCP連接的總數、已建立連接數等,輸出更簡潔且性能更好。ps -ef | grep httpd | grep -v grep | wc -l(CentOS/RHEL)或ps -ef | grep apache2 | grep -v grep | wc -l(Ubuntu/Debian),該命令統計Apache工作進程的數量(prefork MPM下,進程數≈并發連接數;worker/event MPM下,進程數為線程池大小,需結合線程數計算總連接數)。第三方工具可實現可視化、歷史趨勢分析及異常報警,適合生產環境長期監控:
check_apache插件監控Apache連接數,配置services.cfg文件添加服務定義(如check_command check_apache!-C current_connections),重啟Nagios后可在Web界面查看實時連接數,并設置閾值報警(如連接數超過100時發送郵件)。zabbix_agentd.conf中添加UserParameter=apache.current_connections,netstat -an | grep :80 | grep ESTABLISHED | wc -l),導入Apache模板后,可在儀表盤查看實時連接數趨勢圖,并設置觸發器(如連接數超過200時觸發報警)。goaccess /var/log/apache2/access.log -o report.html --real-time-html(生成實時更新的HTML報告)。