Send apache access log to a mysql database
#!/bin/bash
# 2015-03-04 Nereu – versao Tomcat
#set -x
if [ ! -d /usr/local/tmp/his/$1 ] then
echo ‘Ops!not found data/produto!’
echo “Uso: $0 YYYYMMDD_Produto”
echo “Exemplo: $0 20150508_product”
exit 1
fi
date # timestamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, cat < 10 ) { print “drop table ” $0 “;\n”; } }’ | \ mysql -u root -h bkpmdsrv -pyrtqramna1 –force tomcat mysql -u root -h bkpmdsrv -pyrtqramna1 –force tomcat -B -N -e “show tables like ‘%oglobo'” | \ sort -r | awk ‘{ if ( NR > 10 ) { print “drop table ” $0 “;\n”; } }’ | \ mysql -u root -h bkpmdsrv -pyrtqramna1 –force tomcat date Second Script load_accesslog_tomcat script
#!/usr/bin/perl # # Load a Apache/Weblogic CLF(Common Log Format) in a MySQL table # # 2015-03-04 Nereu - ajustado para o Tomcat # use DBI; $start=time(); $debug=0; $dbh = DBI->connect('DBI:mysql:database=tomcat;host=bkpport=3306','root','na1',{ PrintError => 0 } ) || die "Could not connect to database: $DBI::errstr"; $n=$ne=0; while ( ) { $n++; chop; if ( /\d+ms$/ ) { ( $ip, $junk, $user, $datetime, $req, $status, $size, $ref, $agent, $ela ) = /^(\S+) (\S+) (\S+) \[(.+)\] \"(.+)\" (\S+) (\S+) \"(.*)\" \"(.*)\" (\S+)/o; } else { ( $ip, $junk, $user, $datetime, $req, $status, $size, $ref, $agent ) = /^(\S+) (\S+) (\S+) \[(.+)\] \"(.+)\" (\S+) (\S+) \"(.*)\" \"(.*)\"/o; $ela=""; } @mup = split / /,$req; $method=shift @mup; $protocol=pop @mup; if ( $protocol !~ /^HTTP.*/i && $protocol ne "" ) { push(@mup,$protocol); $protocol=""; } $url=join "", @mup; $url =~ s/'/''/g; $url =~ s/\\/\\\\/g; $ref =~ s/'/''/g; $ref =~ s/\\/\\\\/g; $agent =~ s/'/''/g; $agent =~ s/\\/\\\\/g; $ela =~ s/ms//; $sql=sprintf("insert into accesslog_%s values ('%s',%s,'%s',%s,%s,'%s','%s','%s',%s,%s,%s,%s,%s,%s)", $ARGV[0], $ARGV[1], $ARGV[2], $ip, ( $identity eq "-" ? "NULL" : "'${identity}'" ), ( $user eq "-" ? "NULL" : "'${user}'" ), &DateToTimestamp($datetime), $method, $url, ( $protocol eq "" ? "NULL" : "'${protocol}'" ), $status, ( $size eq "-" ? "NULL" : "${size}" ), ( $ref eq "-" ? "NULL" : "'${ref}'" ), ( $agent eq "-" ? "NULL" : "'${agent}'"), ( $ela eq "" ? "NULL" : "$ela" ) ); if ( ! $dbh->do($sql) ) { if ( $debug ) { print "REC: $_\n"; print "SQL: $sql\n"; print "Error: " . $dbh->errstr() . "\n"; } $ne++; } #print stderr chr(13) . "$n..." if ( ($n % 10000) == 0 ); } $dbh->disconnect(); #print stderr chr(13) . "\n"; $elap=time()-$start; print "#### table : accesslog_$ARGV[0]\n"; print "#### host : $ARGV[1]\n"; print "#### port : $ARGV[2]\n"; print "#### records : $n\n"; print "#### errors : $ne\n"; print "#### time(s) : $elap\n"; print "\n"; ### sub DateToTimestamp { no warnings 'once'; ### tirar warning da falta de uso variavel $S_ZONE ### [03/Mar/2015:07:51:26 -0300] $Dt = $_[0]; %Month_to_M = ( 'Jan', '01', 'Feb', '02', 'Mar', '03', 'Apr', '04', 'May', '05', 'Jun', '06', 'Jul', '07', 'Ago', '08', 'Sep', '09', 'Oct', '10', 'Nov', '11', 'Dec', '12' ); ( $DMY,$H,$M,$S_ZONE ) = split /:/,$Dt; ( $D,$Month,$Y ) = split /\//,$DMY; ( $S,$Zone ) = split / /,$S_ZONE; return sprintf("%4s-%2s-%2s %2s:%2s:%2s",$Y,$Month_to_M{$Month},$D,$H,$M,$S); }