Вопрос: как получить список всех лог-файлов, использующихся в Solaris?
Естественно, большинство из них известно, однако многие программы могут писать логи туда, куда вы укажете, а на большом сервере этих программ может быть достаточно, чтобы вы позабыли директории журналов. Тем не менее, можно привести некоторые отправные точки для поиска лог-файлов:
1. Файл /etc/syslog.conf содержит имена лог-файлов, которые записываются syslog-ом.
2. Директория /var/svc/log - стандартное расположение логов SMF.
3. Файлы в /etc/default, определяющие журналы для служб, не использующих syslog. Например /var/adm/sulog.
Замечу, что журнал
sulog я веду постоянно и всегда чищу вручную (в этом отношении я параноик). Кстати, cконфигурировать
logadm для ротации логов SMF легко:
for i in /var/svc/log/*.log
do
logadm -w $i -C1 -c -s100k
done
Однако как все же можно проверить, не пишутся ли еще какие-либо логи в системе? С помощью DTrace можно легко найти все файлы, которые были изменены за последние 24 часа. Так как меня интересуют журналы в файловых системах '/' и '/var', я использую следующий скрипт для поиска логов:
#!/usr/sbin/dtrace -s
syscall::write:entry
/ ! (execname == "ksh" && arg0 == 63 ) &&
fds[arg0].fi_oflags & O_APPEND &&
(fds[arg0].fi_mount == "/" || fds[arg0].fi_mount == "/var" )/
{
@logs[fds[arg0].fi_pathname] = count();
logfiles[ fds[arg0].fi_pathname]++
}
syscall::write:entry
/ logfiles[ fds[arg0].fi_pathname] == 1 &&
! (execname == "ksh" && arg0 == 63 ) &&
fds[arg0].fi_oflags & O_APPEND &&
(fds[arg0].fi_mount == "/" || fds[arg0].fi_mount == "/var" )/
{
printf("%s %s", fds[arg0].fi_fs, fds[arg0].fi_pathname);
}
Вот его вывод после работы в течение получаса:
# dtrace -s findlog.d
dtrace: script 'findlog.d' matched 2 probes
CPU ID FUNCTION:NAME
20 14 write:entry ufs /var/log/ppp.log
7 14 write:entry ufs /var/apache/tomcat/logs/localhost_access_log.2007-06-28.txt
15 14 write:entry ufs /var/adm/ipfilter.log
20 14 write:entry ufs /var/adm/ipfilter.log
3 14 write:entry ufs /var/log/radius.log
9 14 write:entry ufs /var/log/radacct/beeline/detail
9 14 write:entry ufs /var/log/radacct/detail.rep
0 14 write:entry ufs /var/adm/sa/sa28
20 14 write:entry ufs /var/cron/log
14 14 write:entry ufs /usr/local/var/orca/orcallator/myhost/orcallator-2007-06-28-000
6 14 write:entry ufs /var/samba/log/log.popov
22 14 write:entry ufs /var/samba/log/log.panin
20 14 write:entry ufs /var/apache/logs/error_log
20 14 write:entry ufs /var/apache/logs/access_log
^C
/var/apache/logs/error_log 1
/var/samba/log/log.panin 2
/usr/local/var/orca/orcallator/myhost/orcallator-2007-06-28-000 3
/var/apache/logs/access_log 5
/var/samba/log/log.popov 10
/var/cron/log 16
/var/log/ppp.log 21
/var/log/radacct/beeline/detail 37
/var/log/radacct/detail.rep 37
/var/adm/sa/sa28 63
/var/log/radius.log 103
/var/apache/tomcat/logs/localhost_access_log.2007-06-28.txt 113
/var/adm/ipfilter.log 839
.....
Как видите, данный скрипт может быть хорошей отправной точкой для инвентаризации журналов в вашей системе.
По заметке Криса Герхарда