Приветствую всех. Вот зарелизил свой логклинер (видимо это традиция для большинства команд, в т.ч. и для HellKnights =)) с поддержкой регулярных выражений. Без тени скромности можно сказать что он один из лучших в своём роде, тем более в природе логклинеров с поддержкой Perl-совместимых регулярных выражений я не видел. Может чистить как бинарные так и текстовые логи. Пользутесь наздоровье. Жду отзывов и пожеланий по развитию проекта. Скачать можно здесь: http://shados.0x48k.cc/releases/whitecat.c http://hellknights.void.ru/releases/0x48k-whitecat.c
Молоток! Лог-клинер что надо Все работает как положено, но нашёлся один недостаток - в процессе своей работы программа создает гигантские временные файлы, и как получилось в моем случае, размер временного файла превысил максимально допустимый размер файла для ext2 - 2Gb, и программа получила SIGKILL, а временный файл остался. Это может привести например к тому, что логи могут быть вычищены неполностью(потому что whitecat немедленно завершается). Исходя из того что на большинстве Linux-серверов используется именно ext2 в качестве корневой ФС, предлагаю добавить функцию периодической проверки размера временного файла, и если размер временного файла превышает определенный допустимый размер (например 1 Gb) - то удалить все что уже не используется из этого файла(вычистить его), либо если какие-то данные из этого файла все еще нужны, то скинуть их в отдельный файл. Так клинер не превысит пределов на размер файла, и спокойно завершит все что ему положено. Ну или придумать что-нить помудрее Прикладываю скрин, там то, что произошло при работе whitecat
HaOS, молодец. Спасибо за тестирование (+++ даю) - обязательно что-нибудь придумаю. Если есть ещё предложения по совершенствованию - пиши, исправим! А исходный файл какого размера был? Какая там ФС для /var/log ? На скриншоте ничего не вижу.
В FreeBSD не тестировал. Тестировал в Gentoo 2006.1 (ядро 2.6.19) Linux и Fedora 6 Linux (ядро 2.6.20), но должен работать корректно и в BSD - читай вводную. Оттестируешь - дам плюсов =)
Начнем с компилляции In file included from whitecat.c:33: /usr/include/utmp.h:54: error: syntax error before "int32_t" /usr/include/utmp.h:63: error: syntax error before "int32_t" whitecat.c:38:21: lastlog.h: No such file or directory whitecat.c: In function `clear_uwbtmp': whitecat.c:247: error: structure has no member named `ut_user' whitecat.c:247: error: structure has no member named `ut_user' whitecat.c: In function `clear_lastlog': whitecat.c:289: error: structure has no member named `ll_time' Это 6.2-STABLE FreeBSD . Тут, как я понимаю, нету библиотеки. Но я могу ошибаться.
Не совсем понял, какой исходный файл имеется в виду - сам исходник whitecat.c или размер самих логов? Если whitecat.c, то 10000 байт(прикольно, так ровно вышло, только заметил ), если размер логов, то не знаю, как-то не посмотрел перед тестированием ext2, /var/log у меня на корневом разделе лежит.
хм... странно получается. Если /var/log тоже на корневом разделе, то как там может поместиться исходный файл-лог больше чем допустимый размер файла? Временный файл должен быть аналогичен по размеру или меньше исходного. А исходники whitecat.c здесь непричём =) Протестируй ещё раз, пожалуйста, и посмотри размеры файлов предварительно. И ещё раз глянь внимательно в /etc/fstab.
А он и не больше Вот посмотри Code: [B]root@HaPriS(21:25:03)/tmp # gcc -o whitecat whitecat.c[/B] [B]root@HaPriS(21:25:04)/tmp # ll /var/log/lastlog[/B] -rw-rw-r-- 1 root utmp 572K 2007-03-30 21:17 /var/log/lastlog [B]root@HaPriS(21:25:18)/tmp # ll /var/log/wtmp[/B] -rw-rw-r-- 1 root utmp 591K 2007-03-30 21:17 /var/log/wtmp [B]root@HaPriS(21:25:21)/tmp # ll /var/run/utmp[/B] -rw-rw-r-- 1 root utmp 3.8K 2007-03-30 21:17 /var/run/utmp [B]root@HaPriS(21:25:26)/tmp # ll /var/log/btmp[/B] -rw-rw-r-- 1 root utmp 2.3K 2007-03-30 21:17 /var/log/btmp [B]root@HaPriS(21:25:32)/tmp # ll /var/log/dmesg[/B] -rw-r----- 1 root adm 19K 2007-03-30 16:02 /var/log/dmesg [B]root@HaPriS(21:25:35)/tmp # ll /var/log/auth.log[/B] -rw-r----- 1 root adm 151M 2007-03-30 21:17 /var/log/auth.log [B]root@HaPriS(21:25:39)/tmp # ./whitecat -u haos[/B] cat /tmp/tmpfileMaHQGE > /var/run/utmp utmp cleaning [ OK ] cat /tmp/tmpfileQ9VTeQ > /var/log/wtmp wtmp cleaning [ OK ] cat /tmp/tmpfile3Utq01 > /var/log/btmp btmp cleaning [ OK ] lastlog cleaning [ OK ] Превышен лимит размера файла [B]root@HaPriS(21:27:22)/tmp # ll[/B] итого 2.1G -rw------- 1 root root 2.0G 2007-03-30 21:27 tmpfilejprkYd -rwxr-xr-x 1 root root 15K 2007-03-30 21:25 whitecat drwx------ 3 haos people 4.0K 2007-03-30 21:24 ksocket-haos/ srw-rw---- 1 haos audio 0 2007-03-30 21:22 alsa-dmix-3591-1175278934-156939 drwx------ 2 haos people 4.0K 2007-03-30 21:14 mc-haos/ -rw-r--r-- 1 root root 9.8K 2007-03-30 20:48 whitecat.c drwx------ 2 haos people 4.0K 2007-03-30 16:03 orbit-haos/ drwx------ 2 haos people 4.0K 2007-03-30 16:03 kde-haos/ srwxr-xr-x 1 haos people 0 2007-03-30 16:02 mapping-haos drwx------ 2 haos people 4.0K 2007-03-30 16:02 virtual-haos.eIVIzZ/ srwxr-xr-x 1 haos people 0 2007-03-30 16:02 xmms_haos.0 drwx------ 2 haos people 4.0K 2007-03-30 16:02 keyring-f9Fomt/ drwx------ 3 haos people 4.0K 2007-03-30 16:02 gconfd-haos/ [B]root@HaPriS(21:27:32)/tmp #[/B] Code: [B]root@HaPriS(21:43:04)/tmp # df -h /var/log[/B] Файловая система Разм Исп Дост Исп% смонтирована на /dev/sda8 41G 8.5G 31G 22% / [B]root@HaPriS(21:43:06)/tmp # mount |grep sda8[/B] /dev/sda8 on / type ext2 (rw) [B]root@HaPriS(21:43:17)/tmp # cat /etc/fstab |grep sda8[/B] /dev/sda8 / ext2 defaults 0 2 [B]root@HaPriS(21:43:40)/tmp #[/B] Сам временный файл заполнен каким-то нечитаемым мусором вперемешку с нулями. Может быть проблема в том, что lastlog почти полностью состоит из нулей(т.е. происходит поиск несуществующих записей)? Такой он уже после очистки клинером. Если там есть несколько записей о входивших пользователях, то очистка завершается успешно(хотя в процессе работы все равно создаются большие лог-файлы, но поменьше 2 гигов). 2х гиговый темп-файл создается именно при обработке lastlog, при обработке других я успел заметить цифры в 300 с лишним- 400 с лишним метров(и поменьше).
Кое-что прояснилось, я совсем забыл про /var/log/messages. Он у меня был довольно внушительных размеров - 455 Мб, а старый файл вообще - 1.3 Gb (но этот лог клинер не затрагивал, этот файл хранился забэкапеным) Я как поставил систему, так до сих пор не удалял никаких логов. Общий размер /var/log был почти 2 гига Почистив этот файл(ну и за компанию половину ненужных логов столетней давности ), все стало путем. Хотя в общем плане проблема не исчезла, проверять в ходе работы размер temp-файлов на ext2 фс, я думаю, все же стоит, потому что на сервере логи могут быть и побольше размером чем у меня в системе, а это значит что там может возникнуть такая же проблема.
Ты конечно прав - не должно быть никаких произвольных ограничений. Но на нормальном сервере логи таких размерв не бывают - logrotate обязательно стоит и архивы бекапятся в хранилище. Только текущий лог находится в системе.
Под BSD действительно не компилируется Code: whitecat.c:38:21: lastlog.h: No such file or directory whitecat.c: In function `clear_uwbtmp': whitecat.c:247 error: structure has no member named `ut_user' whitecat.c:247 error: structure has no member named `ut_user'
Ошибку с размерами логов локализовал и исправил. Под FreeBSD тоже скоро готово будет. Ждите. UPD: исправленная версия для GNU/Linux доступна по тем же ссылкам. Теперь всё работает отлично. Помимо этого незнаю зачем выложил бинарник: http://shados.0x48k.cc/releases/whitecat
Я тут решил устроить нечно вроде опроса: надо ли добавлять возможность чистки других текстовых логов типа access.log Апача и т.п, ведь это можно и вручную сделать с помощью perl или того же grep? Отпишитесь, пожалуйста, все кому интересен проект действительно качественного логклинера для Linux/xBSD. Я лично не вижу смысла в чистке текстовых логов и вообще подумываю убить эту возможность из своего клинера, не unixway это.
Даже не вопрос. конечно интересует. только сначало желательна совместимость, а потом уже функциональность...