En este artículo explico cómo separar los reportes del servicio httpd en logwatch. Esto es útil para discriminar desde qué sitio se produjo una alerta en un resumen enviado por mail. La idea es tener un resumen por cada VirtualHost, en lugar de un resumen para todo el servicio httpd.



Supongamos el caso de tener un servidor Apache con dos o más VirtualHost, por ejemplo:

<VirtualHost *:80>
        ServerName www.pepe.com.ar
<VirtualHost *:80>
        ServerName www.pepe.net

Supongamos además que los VirtualHost utilizan logs separados para registrar de accesos y errores (y además se está utilizando logrotate para rotar los archivos de log), por ejemplo:

/var/log/apache2/www.pepe.com.ar-access.log
/var/log/apache2/www.pepe.com.ar-access.log.1
/var/log/apache2/www.pepe.com.ar-access.log.2.gz
/var/log/apache2/www.pepe.com.ar-access.log.3.gz
[...]
/var/log/apache2/www.pepe.com.ar-error.log
/var/log/apache2/www.pepe.com.ar-error.log.1
/var/log/apache2/www.pepe.com.ar-error.log.2.gz
/var/log/apache2/www.pepe.com.ar-error.log.3.gz
[...]
/var/log/apache2/www.pepe.net-access.log
/var/log/apache2/www.pepe.net-access.log.1
/var/log/apache2/www.pepe.net-access.log.2.gz
/var/log/apache2/www.pepe.net-access.log.3.gz
[...]
/var/log/apache2/www.pepe.net-error.log
/var/log/apache2/www.pepe.net-error.log.1
/var/log/apache2/www.pepe.net-error.log.2.gz
/var/log/apache2/www.pepe.net-error.log.3.gz

Entonces es posible lograr que en el mail de logwatch lleguen dos resúmenes de apache, uno para cada VirtualHost. Básicamente se debe replicar el servicio http en la configuración de logwatch.

La configuración personalizada de logwatch se encuentra en el directorio /etc/logwatch. Un servicio se define a través de tres archivos:

  • Un archivo que define la ruta y nombres de los logs a monitorear, el cual se encuentra en el directorio /etc/logwatch/conf/logfiles/.
  • Un archivo que define los parámetros del servicio, por ejemplo el título y el nombre del archivo de configuración de logs, el cual se encuentra en el directorio /etc/logwatch/conf/services/.
  • Un script que se encarga de parsear los logs, se encuentra en el directorio /etc/logwatch/scripts/services/.

Como se debe replicar el servicio http, directamente se copian los archivos de configuración por defecto que se encuentran en /usr/share/logwatch. Por ejemplo, para el VirtualHost www.pepe.com.ar:

cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/httpdpepecomar.conf
cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/httpdpepecomar.conf
cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/httpdpepecomar

Notar que los nombres de los archivos de configuración no tienen caracteres especiales, esto se debe a que logwatch tiene problemas al utilizar caracteres no alfanuméricos en los nombres de los archivos de configuración de los servicios.

A continuación se debe modificar la configuración de cada archivo.

En el archivo dentro del directorio "conf/logfiles" se deben especificar correctamente las variables "LogFile" y "Archive". Las variables "Archive" se utilizan cuando se especifica la opción "Archives = yes" para parsear logs comprimidos en archivoz .gz:

# cat /etc/logwatch/conf/logfiles/httpdpepecomar.conf 
########################################################
#   Define log file group for httpd 
########################################################

# What actual file?  Defaults to LogPath if not absolute path....
LogFile = apache2/www.pepe.com.ar-*.log
LogFile = apache2/www.pepe.com.ar-*.log.1


# If the archives are searched, here is one or more line
# (optionally containing wildcards) that tell where they are...
#If you use a "-" in naming add that as well -mgt
Archive = apache2/www.pepe.com.ar-*.gz


# Expand the repeats (actually just removes them now)
*ExpandRepeats


# Keep only the lines in the proper date range...
*ApplyhttpDate

# vi: shiftwidth=3 tabstop=3 et

En el archivo dentro del directorio "conf/services" se deben especificar correctamente las variables "Title" y "LogFile":

# cat /etc/logwatch/conf/services/httpdpepecomar.conf 
###########################################################################
# Configuration file for http filter 
###########################################################################

Title = "httpd www.pepe.com.ar"

# Which logfile group...
LogFile = httpdpepecomar

# Define the log file format
#
# This is now the same as the LogFormat parameter in the configuration file
# for httpd.  Multiple instances of declared LogFormats in the httpd
# configuration file can be declared here by concatenating them with the
# '|' character.  The default, shown below, includes the Combined Log Format,
# the Common Log Format, and the default SSL log format.
#$LogFormat = "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"|%h %l %u %t \"%r\" %>s %b|%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

# The following is supported for backwards compatibility, but deprecated:
# Define the log file format
#
#   the only currently supported fields are:
#                       client_ip
#                       request
#                       http_rc
#                       bytes_transfered
#                       agent
#
#$HTTP_FIELDS = "client_ip ident userid timestamp request http_rc bytes_transfered referrer agent"
#$HTTP_FORMAT = "space     space space    brace    quote   space        space       quote   quote" 
# Define the field formats
#
#   the only currently supported formats are:
#                       space = space delimited field
#                       quote = quoted ("..") space delimited field
#                       brace = braced ([..]) space delimited field

# Flag to ignore 4xx and 5xx error messages as possible hack attempts
#
# Set flag to 1 to enable ignore
# or set to 0 to disable
$HTTP_IGNORE_ERROR_HACKS = 0

# Ignore requests
# Note - will not do ANY processing, counts, etc... just skip it and go to
# the next entry in the log file. 
# Examples:
# 1. Ignore all URLs starting with /model/ and ending with 1 to 10 digits
#   $HTTP_IGNORE_URLS = ^/model/\d{1,10}$
#
# 2. Ignore all URLs starting with /model/ and ending with 1 to 10 digits and
#   all URLS starting with /photographer and ending with 1 to 10 digits
#   $HTTP_IGNORE_URLS = ^/model/\d{1,10}$|^/photographer/\d{1,10}$
#   or simply:
#   $HTTP_IGNORE_URLS = ^/(model|photographer)/\d{1,10}$

# To ignore a range of IP addresses completely from the log analysis,
# set $HTTP_IGNORE_IPS. For example, to ignore all local IP addresses:
#
#   $HTTP_IGNORE_IPS = ^10\.|^172\.(1[6-9]|2[0-9]|3[01])\.|^192\.168\.|^127\.
#

# The variable $HTTP_USER_DISPLAY defines which user accesses are displayed.
# The default is not to display user accesses:
$HTTP_USER_DISPLAY = 0
# To display access failures:
# $HTTP_USER_DISPLAY = "$field{http_rc} >= 400"
# To display all user accesses except "Unauthorized":
# $HTTP_USER_DISPLAY = "$field{http_rc} != 401"


# vi: shiftwidth=3 tabstop=3 et

El script Perl /etc/logwatch/scripts/services/httpdpepecomar no debe modificarse.

Estos pasos se deben repetir para cada VirtualHost y si se desea se puede desactivar el servicio http por defecto agregando la siguiente línea en la configuración de logwatch (/usr/share/logwatch/default.conf/logwatch.conf):

Service = "-http"

Finalmente, se puede verificar el correcto funcionamiento ejecutando logwatch:

# logwatch


Tal vez pueda interesarte


Compartí este artículo