несколько переработал инструкцию и скрипты
первым делом устанавливаем syslog-ng
Code:
ipkg update
ipkg install syslog-ng
после установки заменяем или исправляем файл запуска
/opt/etc/init.d/S01syslog-ng
на следущее:
Code:
#!/bin/sh
#
# Startup script for syslog-ng
#
# Stop syslogd if running
if [ -n "`pidof syslogd`" ]; then
killall syslogd 2>/dev/null
sleep 1
fi
if [ -n "`pidof klogd`" ]; then
killall klogd 2>/dev/null
sleep 1
# copy content of original syslogd to new syslog.
cat /tmp/syslog.log >> /opt/var/log/syslog-ng.log
# remove old syslog.log
rm /tmp/syslog.log
ln -s /opt/var/log/syslog-ng.log /tmp/syslog.log
fi
# Stop itself if running
if [ -n "`pidof syslog-ng`" ]; then
killall syslog-ng 2>/dev/null
sleep 2
fi
/opt/sbin/syslog-ng
скрипт при запуске убивает стандартный логгер, перекидывает лог на внешний носитель.
созданный симлинк позволяет видеть лог через веб
заменяем файл конфигурации
/opt/etc/syslog-ng/syslog-ng.conf
на следующее:
Code:
################################################################################
# Syslog-ng configuration
# /opt/etc/syslog-ng/syslog-ng.conf
#
###############################################################################
# tiwag's active filters and logs
#
options { long_hostnames(off); sync(0); };
source src { file("/proc/kmsg");unix-stream("/dev/log"); internal(); };
source net { udp(); };
destination mysyslog {
file("/opt/var/log/syslog-ng.log"
owner("root")
group("root")
perm(0640)
template("$HOUR:$MIN:$SEC $DAY-$MONTH-$YEAR ($PRIORITY|$FACILITY|$PROGRAM) $MESSAGE\n")
);
};
destination authwarnlog {
file("/opt/var/log/authwarn.log"
owner("root")
group("root")
perm(0640)
template("$HOUR:$MIN:$SEC $DAY-$MONTH-$YEAR ($PRIORITY|$FACILITY|$PROGRAM) $MESSAGE\n")
);
};
destination vsftpdlog { file("/opt/var/log/vsftpd.log"
template("$HOUR:$MIN:$SEC $DAY-$MONTH-$YEAR ($PRIORITY|$FACILITY|$PROGRAM) $MESSAGE\n")
);
};
destination dropbearlog { file("/opt/var/log/dropbear.log"
template("$HOUR:$MIN:$SEC $DAY-$MONTH-$YEAR ($PRIORITY|$FACILITY|$PROGRAM) $MESSAGE\n")
);
};
destination cronlog { file("/opt/var/log/cron.log"
template("$HOUR:$MIN:$SEC $DAY-$MONTH-$YEAR ($PRIORITY|$FACILITY|$PROGRAM) $MESSAGE\n")
);
};
filter f_ni_syslog-ng { not ( level(info) and program(syslog-ng) ); };
filter f_ni_thttpd { not ( level(info) and program(thttpd) ); };
filter f_ni_vsftpd { not ( level(info) and program(vsftpd) ); };
filter f_ni_cron { not ( (level(notice) and program(cron) ) or ( level(info) and facility(cron) ) ); };
filter f_vsftpd { ( program(vsftpd) ); };
filter f_dropbear { ( program(dropbear) ); };
filter f_cron { ( level(notice) and program(cron) ); };
filter f_authwarn { ( ( ( level(info) or level(warning) ) and program(dropbear) ) or ( ( level(warning) ) and program(vsftpd) ) ); };
###############################################################################
# active logs
#
log { source(src);
filter(f_ni_vsftpd);
filter(f_ni_thttpd);
filter(f_ni_syslog-ng);
filter(f_ni_cron);
destination(mysyslog); };
log { source(src);
filter(f_vsftpd);
destination(vsftpdlog); };
log { source(src);
filter(f_dropbear);
destination(dropbearlog); };
log { source(src);
filter(f_authwarn);
destination(authwarnlog); };
log { source(src);
filter(f_cron);
destination(cronlog); };
после перезагрузок лог сохраняется.
Соответственно системный лог находится в /opt/var/log/syslog-ng.log,
ошибки авторизации /opt/var/log/authwarn.log
подключения по ftp /opt/var/log/vsftpd.log
подключения по ssh /opt/var/log/dropbear.log
логи cron`а /opt/var/log/cron.log
для приведения логов CRONа в порядок, заменяем скрипт
/opt/bin/run-parts
на следущее:
Code:
#!/bin/sh
#
# runparts.sh by macsat@macsat.com
# intended for use with cron
#
# based on rc.unslung by unslung guys :-)
#
if [ -z "$1" ]
then
echo "Usage : $0 "
fi
RUNDIR=$1"/*"
for i in $RUNDIR ;do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
logger -t "$i" "running"
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
logger -t "$i" "running"
$i start
;;
esac
done
Для того чтоб логи сильно не раздувались, написал скрипт для автоматического архивирования любых логов, находящихся в папке логов. Скрипт помещаем в папку ежечасного запуска CRONa
/opt/etc/cron.hourly/archivelog.sh
Code:
#!/bin/sh
log_dir="/opt/var/log"
archive_dir="/opt/var/log/archive"
log_max_size=100 #Kb
sleep 1
for i in $log_dir/* ;do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
if (expr $(du $i | sed 's/\/.*//') \> $log_max_size > /dev/null 2>&1) then
{
archive_file=`echo "0" $i | sed 's:^.*/\(.*\):\1:g'`
archive_file=`date +%Y%m%d%H-$archive_file`
archive_file="$archive_dir/$archive_file"
cp "$i" "$archive_file"
printf "Contents of this file are placed in archive $archive_file.gz\n" > $i
gzip "$archive_file"
sleep 1
prg=`echo "0" $0 | sed 's:^.*/\(.*\):\1:g'`
logger -t "$prg" "$i compressed to $archive_file.gz"
}
fi
done
скрипт проверяет директорию с логами, если находит лог размером более указанного, то архивирует его в указанную папку.
ЗЫ:
я у себя перенастроил все программы, чтоб логи писались в папку /opt/var/log/
Не забываем сделать скрипты исполняемыми:
Code:
chmod +x /opt/etc/init.d/S01syslog-ng
chmod +x /opt/etc/cron.hourly/archivelog.sh
и создать директорию для архивов
Code:
mkdir -p /opt/var/log/archive/
ну и чтоб все это начало работать: