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 -l
netstat -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报告)。