Incluyendo el nombre de host en los informes de logwatch de apache

Cuando aloja varios dominios con apache, es útil ver la salida logwatch apache con el nombre de host virtual incluido, pero solo obtengo:

--------------------- httpd Begin ------------------------ Requests with error response codes 400 Bad Request /: 1 Time(s) /robots.txt: 1 Time(s) 

mientras que me gustaría algo como

  --------------------- httpd Begin ------------------------ Requests with error response codes 400 Bad Request example.com/: 1 Time(s) example.org/robots.txt: 1 Time(s) 

¿Cómo puedo lograr esto con logwatch?

6 Solutions collect form web for “Incluyendo el nombre de host en los informes de logwatch de apache”

Prueba esto (funciona para mí): Define LogFormat en tu httpd.conf como

LogFormat "% h% t [% V] \"% r \ "%> s \"% {Referer} i \ ""

En este caso particular, tendrá dirección_distancia, date / hora, [El nombre del server de acuerdo con la configuration UseCanonicalName] , request, código de satus y Referer (que es mi formatting deseado) y luego poner

$ LogFormat "% h% t% V \"% r \ "%> s \"% {Referer} i \ ""

en sus services / file http.conf LogWatch. Esa voluntad

  1. make apache poner el nombre de host (Canonical o no, depende si usa% v o% V)
  2. force LogWatch para entender su logging de acceso de Apache

Aquí hay un ejemplo de la línea a en la salida de logging con este set particular de directivas:

172.3.20.11 [01 / Jun / 2011: 21: 00: 52 +0200] joomla.local "GET /images/tabs_back.png HTTP / 1.1" 404 " http: //joomla.local/templates/beez_20/css/personal .css "

Si nos centramos en los códigos de error, y cómo se tratan en LogWatch, he aquí algunos cambios que puede hacer en / usr / share / logwatch / scripts / services / http : Add:

mi $ my_host = ""; mi $ my_url = "";

Luego, sobre la línea 462, agregue esta línea para save nuestra cuarta columna (HOST):

$ field {mi_host} = $ campo {$ log_fields [3]};

Y en la línea 560, después de que fmt_url se acorta ( if (length($field{url}) > 60) {...} ) agregue:

 $my_host = $field{$log_fields[3]}; $my_host = substr($my_host,1); $my_url=$my_host . $fmt_url; 

Por último, el cambio:

$needs_exam{$field{http_rc}}{$fmt_url}++;

por

$needs_exam{$field{http_rc}}{$my_url}++;

al hacerlo, tendrás esto en tu Logwatch:

 Requests with error response codes 404 Not Found joomla.local/images/tabs_back.png: 3 Time(s) 

Espero que te ayude a todos

Tuve el mismo problema y lo resolví cambiando el LogFormat en apache.conf ( http://httpd.apache.org/docs/2.2/mod/mod_log_config.html )

 # LogFormat "%h %l %u %t \"%r\" %>s %O" common # The default output has no info about the server name (%v). # %m %U%q %H is strictly equivalent to %r. LogFormat "%h %l %u %t \"%m %v%U%q %H\" %>s %O" common 

Esto genera la misma salida que el pnetworkingeterminado, agregando el nombre del server canónico como un prefijo. P.ej:

 ... "GET www.example.com/apache_pb.gif HTTP/1.0" 200 2326 ... 

El pro es que usted no necesita ninguna otra personalización (por ejemplo, en el lado logwatch). La con es que usted consigue algunos caracteres adicionales para cada línea registrada.

No creo que sea posible si está registrando todos los dominios virtuales en el mismo file de logging … El logging de apache no diferenciará entre ellos.

También sugiero que eche un vistazo a la OSSEC de código abierto . Pasamos de logwatch a él, porque es en time real y permitir la correlación centralizada (correlación de cosas como ssh falló el inicio de session con apache 400 errores).

He encontrado un blog que detalla este problema y cómo alguien lo resolvió . No sé cómo esto afectará al análisis del logging, pero anotándolo aquí como lo encontré útil.

Puede get el nombre de host mediante la directiva LogFormat en la configuration de apache. Puede utilizar la siguiente opción

 %{Host}i 

Encontré esta información en este enlace . Logwatch debería ser capaz de analizar información personalizada.

Muchas gracias a @Syquus que me puso en el path correcto para modificar el file /usr/share/logwatch/scripts/services/http .

Mi file y la solución era diferente, pero pensé que compartiría lo mismo.

Yo uso el estándar vhost_combined LogFormat que Apache proporciona que se parece a:

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined

que produce algo como:

example.org:80 1.1.1.1 - - [08/Oct/2013:16:55:01 +0000] "GET / HTTP/1.1" 200 6094 "-" "Opera/9.80 (X11; Linux x86_64; Edition Linux Mint) Prest/2.12.388 Version/12.16"

Puse esto en el override de la configuration del service en /etc/logwatch/conf/services/http.conf :

 $logformat = "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" 

Después de encontrar los lugares aproximadamente correctos para realizar los cambios para la solución de @ Syquus en /usr/share/logwatch/scripts/services/http , pensé simplemente cambiar el índice de [3] a [0] funcionaría – no lo hizo. Conseguí segmentos incorrectos de la trayectoria e incluso después de recorrer el hash / array integer, no encontré el hostname. La debugging fue frustrante porque soy nuevo en Perl, pero mi solución fue añadir en coincidencia para el %v que se estaba descartando y luego modificar la url más abajo para include el nombre de dominio.

Diff para mi solución (también quité el truncamiento de url), YMMV:

 --- __http.2013-10-09 2013-10-09 13:11:48.000000000 +0000 +++ http 2013-10-09 14:36:59.000000000 +0000 @@ -132,6 +132,8 @@ # Build tables of the log format to parse it and determine whats what # +my $my_url = ""; + my $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; my $ignoreURLs = $ENV{'http_ignore_urls'}; my $ignoreIPs = $ENV{'http_ignore_ips'}; @@ -379,7 +381,10 @@ $logformat =~ s/%[\d,!]*/%/g; while ($end_loop) { - if ($logformat =~ /\G%h/gc) { + if ($logformat =~ /\G%v/gc) { + $parse_string[$parse_index] .= "(\\S*?)"; + $parse_field[$parse_index][$parse_subindex++] = "my_host"; + } elsif ($logformat =~ /\G%h/gc) { $parse_string[$parse_index] .= "(\\S*?)"; $parse_field[$parse_index][$parse_subindex++] = "client_ip"; } elsif ($logformat =~ /\G%l/gc) { @@ -437,7 +442,6 @@ # # Process log file on stdin # - while (my $line = <STDIN>) { chomp($line); @@ -580,11 +584,12 @@ !((defined $ignoreURLs) && ($field{url} =~ /$ignoreURLs/)) && !((defined $ignoreIPs) && ($field{client_ip} =~ /$ignoreIPs/)) ) { my $fmt_url = $field{url}; - if (length($field{url}) > 60) { - $fmt_url = substr($field{url},0,42) . " ... " . - substr($field{url},-15,15); - } - $needs_exam{$field{http_rc}}{$fmt_url}++; + #if (length($field{url}) > 60) { + # $fmt_url = substr($field{url},0,42) . " ... " . + # substr($field{url},-15,15); + #} + $my_url = $field{my_host} . $fmt_url; + $needs_exam{$field{http_rc}}{$my_url}++; } if (defined $field{userid} && $field{userid} ne "-" && (eval $user_display) && 

Debería decidir servir contenido o contenido seguro en un puerto distinto de: 80 Podría includelo en el futuro. Debe ser obvio ahora cómo.

¡Espero que esto ayude!

ACTUALIZAR

Hizo algunos cambios más, arregló un error. En lugar de seguir editando esta respuesta, puede encontrar mis modificaciones aquí: https://bitbucket.org/ubiquitypress/logwatch

  • Error de logwatch al enviar correo con ssmtp a SES
  • logwatch - installation sin dependencia postfix
  • ¿Qué significa esta input "smtp_stream_setup" en mi logging de postfix?
  • Cómo evitar que los bots intenten adivinar un enlace en mi sitio
  • A través de logwatch, recibo posts que root está abriendo sesiones "-> nobody". ¿Es esto un problema de security, o una operación normal?
  • ¿Qué significa este error del kernel y cómo debo responder?
  • Clasificación de la salida de cron para correos electrónicos periódicos
  • Linux: logwatch (8) es demasiado ruidoso. ¿Cómo puedo controlar el nivel de ruido?
  • ¿Cómo puedo get logwatch para procesar loggings alternativos de apache?
  • Análisis del file logwatch y aide
  • Logwatch que no incluye un host en el informe. ¿Por qué?
  • Logwatch me envía 2 copys de la actividad del server de ayer, ¿por qué?
  • Cron de CentOS que funciona en el time incorrecto, 5hrs tarde (Logwatch)
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.