tuto:ipasserelle:web:squid_log_mysql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision Les deux révisions suivantes
tuto:ipasserelle:web:squid_log_mysql [09/10/2012 10:35]
dani créée
tuto:ipasserelle:web:squid_log_mysql [09/10/2012 10:46]
dani [Script de journalisation]
Ligne 242: Ligne 242:
     --squidguard --squidlogfile=/var/log/squid/access.log --squidguardlogfile=/var/log/squidGuard/deny.log     --squidguard --squidlogfile=/var/log/squid/access.log --squidguardlogfile=/var/log/squidGuard/deny.log
 </code> </code>
 +
 +===== Rotation et compression des tables =====
 +
 +La journalisation dans une base de donnée peut consommer **beaucoup** d'espace disque (en fonction du nombre d'utilisateur derrière ce proxy). L'idée est donc de faire une rotation des tables access_log et deny_log une fois par mois. Les anciennes tables sont compressées (toujours consultables directement par MySQL, mais en lecture seule) et de supprimer les vieilles tables (par exemple, on conserve 1 an de journaux). Voilà un petit script cron à mettre en place:
 +
 +<file bash squid-rotate.sh>
 +#!/bin/bash
 +
 +DB_HOST=localhost
 +# COnservation des journaux en nombre de jours
 +RETENTION=365
 +SQL_DB=squid_log
 +TABNAME="access_log deny_log"
 +SQLCMD="mysql ${SQL_DB} --batch -u squid -psecret";
 +MONTH=$(date +%m)
 +YEAR=$(date +%Y)
 +
 +# We rotate on the first day of a new month
 +if [ "$MONTH" == "1" ]; then
 +    MONTH=12
 +else
 +    MONTH=$(($MONTH-1))
 +fi
 +
 +# Pad with 0
 +MONTH=$(printf "%02d" $MONTH)
 +
 +DATE=$MONTH"_"$YEAR
 +
 +for T in ${TABNAME}; do
 +    # create table 0
 +    echo "CREATE TABLE IF NOT EXISTS ${T}_0 LIKE ${T};" | $SQLCMD;
 +
 +    # Rotate table
 +    echo "FLUSH TABLES ${T}; RENAME TABLE ${T} TO ${T}_$DATE; RENAME TABLE ${T}_0 TO ${T}" | ${SQLCMD}  >/dev/null 2>&1
 +
 +    # Drop _0 table if we rotate more than two times a month
 +    if echo "DESCRIBE ${T}_0;" | ${SQLCMD} >/dev/null 2>&1; then
 +        echo "DROP TABLE ${T}_0;" | $SQLCMD
 +    fi
 +
 +    #compress 2
 +    cd /var/lib/mysql/${SQL_DB}/
 +    echo "FLUSH TABLE ${T}_${DATE};" | $SQLCMD
 +    myisampack -s "${T}_${DATE}.MYI"
 +    myisamchk -s -rq --sort-index --analyze "${T}_${DATE}.MYI"
 +    echo "FLUSH TABLE ${T}_${DATE}" | $SQLCMD
 +done
 +
 +# Now check existing table to drop olds ones
 +for T in $(echo "show tables" | $SQLCMD | grep -v -P "^Tables_in_"$SQL_DB | grep -v -P "^(access|deny)_log$"); do
 +    TMONTH=$(echo $T | perl -pe 'm/^(access|deny)_log_(\d+)_(\d+)/; print $2;exit')
 +    TYEAR=$(echo $T | perl -pe 'm/^(access|deny)_log_(\d+)_(\d+)/; print $3;exit')
 +    # Drop table if older than configured retention
 +    if [ "$(($(date -d "01/$MONTH/$YEAR" +%s)-$(date -d "01/$TMONTH/$TYEAR" +%s)))" -gt "$((24*3600*$RETENTION))" ]; then
 +        echo "DROP TABLE $T;" | $SQLCMD
 +    fi
 +done
 +
 +</file>
  • tuto/ipasserelle/web/squid_log_mysql.txt
  • Dernière modification: 18/10/2012 09:44
  • de dani