Apache's mod_status
module provides a goldmine of server performance data, but its static page refresh requirement limits real-time monitoring capabilities. Let's implement a dynamic solution.
First ensure your httpd.conf
has these settings:
LoadModule status_module modules/mod_status.so
<Location "/server-status">
SetHandler server-status
Require host example.com
Require ip 192.168.1.0/24
</Location>
ExtendedStatus On
Create a wrapper HTML page with this meta refresh tag:
<meta http-equiv="refresh" content="2">
Or use JavaScript for more control:
<script>
function refreshServerStatus() {
document.getElementById('status-frame').src =
document.getElementById('status-frame').src.split('?')[0] + '?' + new Date().getTime();
setTimeout(refreshServerStatus, 2000);
}
window.onload = refreshServerStatus;
</script>
<iframe id="status-frame" src="/server-status?auto" width="100%" height="800"></iframe>
For better visualization of worker threads, add this CSS:
<style>
table { border-collapse: collapse; }
td { padding: 3px; border: 1px solid #ddd; }
.W_ { background-color: #e6ffe6; } /* Waiting */
.R_ { background-color: #ffcccc; } /* Reading */
.S_ { background-color: #ffffcc; } /* Sending */
.K_ { background-color: #e6e6ff; } /* Keepalive */
.D_ { background-color: #ffe6cc; } /* DNS Lookup */
.C_ { background-color: #ffccff; } /* Closing */
.L_ { background-color: #e6ffff; } /* Logging */
.G_ { background-color: #f0f0f0; } /* Graceful */
.I_ { background-color: #ffffff; } /* Idle */
</style>
For true real-time without page refreshes:
const socket = new WebSocket('ws://yourserver:port/status-feed');
socket.onmessage = function(event) {
document.getElementById('status').innerHTML = event.data;
};
This requires a backend service parsing the status page and pushing updates.
- Always restrict access via IP or authentication
- Consider rate limiting to prevent abuse
- Disable ExtendedStatus in production if not needed
- Use HTTPS for all status transmissions
Apache's mod_status module provides crucial real-time server metrics that every sysadmin needs. The video demonstration shows exactly what we want to achieve - a dynamic, auto-updating view of server activity.
First, ensure mod_status is enabled in your Apache configuration:
# In httpd.conf or apache2.conf
LoadModule status_module modules/mod_status.so
SetHandler server-status
Require host localhost
# For remote access (secure this properly!)
# Require ip 192.168.1.0/24
ExtendedStatus On
The magic comes from combining mod_status with JavaScript auto-refresh. Here's a complete HTML solution:
Apache Realtime Status
Apache Server Status
For better control than simple page refresh:
Always protect your status page:
- Use IP whitelisting with Require ip
- Implement HTTP authentication
- Consider HTTPS for the status page
- Set proper permissions with Require host/ip
For programmatic access to specific metrics:
curl http://localhost/server-status?auto | grep -E 'Total Accesses|Total kBytes'
# Sample output processing script
#!/bin/bash
while true; do
clear
curl -s http://localhost/server-status?auto | \
grep -E 'BusyWorkers|IdleWorkers|ReqPerSec|BytesPerSec'
sleep 1
done
For production environments, consider:
- Prometheus with Apache exporter
- ELK stack for logging
- New Relic/Grafana dashboards