1. 启用Apache内置mod_status模块(核心监控方式)
mod_status是Apache自带的轻量级模块,可提供服务器实时状态信息(如请求速率、连接数、带宽、工作进程状态等)。
sudo a2enmod status命令启用模块(Debian/Ubuntu系统自带,无需额外安装)。/etc/apache2/mods-enabled/status.conf文件,修改<Location "/server-status">部分,限制访问IP(如仅允许本地或特定IP)并开启认证(可选但推荐)。示例配置:<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1 # 仅允许本地访问,生产环境可替换为服务器IP
# 若需远程访问,可添加:Require ip your_remote_ip
AuthType Basic
AuthName "Server Status"
AuthUserFile /etc/apache2/.htpasswd
</Location>
sudo htpasswd -c /etc/apache2/.htpasswd your_username(首次创建用-c,后续添加用户无需-c),设置访问状态页面的用户名和密码。sudo systemctl restart apache2使配置生效。http://your_server_ip/server-status(或http://localhost/server-status),输入用户名密码后即可查看实时状态(如“Total Accesses”“Uptime”“BusyWorkers”等)。2. 使用系统自带命令行工具监控
top命令实时显示系统进程的资源占用(CPU、内存),按M键可按内存排序,按P键按CPU排序,快速定位Apache进程(httpd或apache2)的资源消耗;htop是top的增强版,界面更友好,安装命令:sudo apt install htop。netstat -ant | grep :80(或ss -ant | grep :80,更现代的工具)查看Apache的网络连接状态,统计当前连接数(ESTABLISHED表示活跃连接)、监听端口等,帮助判断服务器负载。sudo apt install apachetop,运行后默认读取access.log文件。sudo apt install glances,运行glances即可查看。3. 利用第三方监控工具实现高级监控
check_apache插件)并配置监控项。server-status数据,支持Prometheus存储和Grafana可视化。配置步骤:下载Categraf→编辑conf/input.apache/apache.toml(设置url = "http://localhost/server-status/?auto")→运行./categraf --test --inputs apache测试采集效果。sudo apt install monit,编辑/etc/monit/monitrc添加Apache监控配置,运行sudo systemctl restart monit启用。4. 日志分析与报警(故障排查与预防)
access.log)和错误日志(error.log)默认位于/var/log/apache2/目录下(可通过grep "ErrorLog" /etc/apache2/apache2.conf确认错误日志路径)。sudo tail -f /var/log/apache2/access.log(新请求实时显示);cat /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr;grep " 404 " /var/log/apache2/access.log;sudo tail -f /var/log/apache2/error.log。sudo apt install goaccess,运行goaccess /var/log/apache2/access.log --log-format=COMBINED(需匹配日志格式);sudo apt install logwatch,运行sudo logwatch --service apache2查看Apache日志摘要。import requests
import smtplib
from email.mime.text import MIMEText
def check_apache_status():
try:
response = requests.get("http://localhost/server-status", auth=('your_username', 'your_password'), timeout=5)
return response.status_code == 200
except:
return False
def send_alert():
msg = MIMEText("Apache服务器状态异常!")
msg['Subject'] = "Apache报警"
msg['From'] = "your_email@example.com"
msg['To'] = "alert_recipient@example.com"
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("your_email@example.com", "your_password")
server.sendmail("your_email@example.com", "alert_recipient@example.com", msg.as_string())
if not check_apache_status():
send_alert()
将脚本保存为monitor_apache.py,用cron设置每分钟运行一次:* * * * * /usr/bin/python3 /path/to/monitor_apache.py。