Logs and Monitoring for Apache Servers | Page 4
Logs and Monitoring for Apache Servers
Rotating and Archiving Logs
If you have a website with high traffic, your log files will quickly grow in size. While you can always archive the log files by hand, there are a number of mechanisms to rotate logs periodically, archiving and compressing older logs at well-defined intervals.
To avoid having to stop or restart the server when manipulating the log files, a common solution is to use an intermediate program to log the requests. The program will in turn take care of rotating, compressing, and archiving the logs.
Apache provides the
rotatelogs tool for this purpose. You can find a similar, alternative program at http://cronolog.org/.
This example uses the
rotatelogs tool to create a new log file and move the current log to the
/var/logs directory daily (86400 is the number of seconds in one day). Check the Apache documentation for details on how to use
rotatelogs to also rotate logs based on size and name archived files based on a template.
If the path to the log rotation program includes spaces, you might need to escape them by prefixing them with a \ (backslash). This is especially common in the Windows platform.Controlling IP Address Resolution
If you set the
HostNameLookups directive to
on then Apache will try to determine (resolve) the hostname corresponding to the client's IP-address when it logs the request.
HostNameLookups set to
access_log entry may look like
HostNameLookups set to
on, the same entry would look like
The next section explains the reverse process, how to replace IP addresses in logs with hostnames.
Processing Logged IP Addresses
HostNameLookups to on can have an impact on the server's performance, slowing its response time. To avoid using this directive setting, it is possible to disable name resolution and use a separate post-processing utility that can scan the log files and replace the IP addresses with host names. These tools are more efficient because they can cache results and they do not cause any delay when serving requests to clients.
Apache includes one such tool,
logresolve.exe in Windows). It reads log entries from standard input and outputs the result to its standard output. To read to and from a file, you can use redirection, on both Unix and Windows, as shown in the example.
You should bear in mind that the result of an IP address resolution result will not always correspond to the real hostname that sent the request. For example, if there is a proxy or gateway between the client and the web server, the IP address reported by
logresolve will be the IP address of the proxy or gateway and you will get the hostname of the proxy server or the IP block managed by the gateway, rather than the name of an actual host.
Restarting Apache Automatically If It Fails
If you install Apache on Windows as a service, it can be automatically restarted by the service manager if it crashes.
In Unix, you can implement this functionality with a watchdog script. A watchdog monitors the status of another program, and if the program crashes or stops for any reason, the watchdog starts it again. The example shows a simple Linux script that will monitor the system process list to ensure that an httpd process exists, and will restart httpd if it crashes. To use it, you will need to give it executable permissions and add it to your
cron configuration so it can be run at predefined intervals.
If you are running Solaris, use
ps -ef instead of
ps - waux.
You can find a more sophisticated watchdog script that will send email when the server is down, and can watch specific
httpd process ids, at the following URL: http://perl.apache.org/docs/general/control/control.html.
Most Linux distributions also include their own generic watchdog scripts that can be adapted to work with Apache.