WhiteCat LogCleaner 1.0 by ShadOS

Discussion in 'Избранное' started by ShadOS, 28 Mar 2007.

  1. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Приветствую всех. Вот зарелизил свой логклинер (видимо это традиция для большинства команд, в т.ч. и для HellKnights =)) с поддержкой регулярных выражений. Без тени скромности можно сказать что он один из лучших в своём роде, тем более в природе логклинеров с поддержкой Perl-совместимых регулярных выражений я не видел. Может чистить как бинарные так и текстовые логи. Пользутесь наздоровье. Жду отзывов и пожеланий по развитию проекта.
    Скачать можно здесь:
    http://shados.0x48k.cc/releases/whitecat.c
    http://hellknights.void.ru/releases/0x48k-whitecat.c
     
    #1 ShadOS, 28 Mar 2007
    Last edited: 1 Apr 2007
    11 people like this.
  2. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Молоток! Лог-клинер что надо :) Все работает как положено, но нашёлся один недостаток - в процессе своей работы программа создает гигантские временные файлы, и как получилось в моем случае, размер временного файла превысил максимально допустимый размер файла для ext2 - 2Gb, и программа получила SIGKILL, а временный файл остался. Это может привести например к тому, что логи могут быть вычищены неполностью(потому что whitecat немедленно завершается). Исходя из того что на большинстве Linux-серверов используется именно ext2 в качестве корневой ФС, предлагаю добавить функцию периодической проверки размера временного файла, и если размер временного файла превышает определенный допустимый размер (например 1 Gb) - то удалить все что уже не используется из этого файла(вычистить его), либо если какие-то данные из этого файла все еще нужны, то скинуть их в отдельный файл. Так клинер не превысит пределов на размер файла, и спокойно завершит все что ему положено. Ну или придумать что-нить помудрее :D
    Прикладываю скрин, там то, что произошло при работе whitecat :)
    [​IMG]
     
    2 people like this.
  3. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    HaOS, молодец. Спасибо за тестирование (+++ даю) - обязательно что-нибудь придумаю. Если есть ещё предложения по совершенствованию - пиши, исправим! А исходный файл какого размера был? Какая там ФС для /var/log ? На скриншоте ничего не вижу.
     
    #3 ShadOS, 30 Mar 2007
    Last edited: 30 Mar 2007
    1 person likes this.
  4. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Да. Логклинер тоже очень нам нужен! Но руткиты важнее.. Кстати он корректно работает под FreeBsd ???
     
    1 person likes this.
  5. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    В FreeBSD не тестировал. Тестировал в Gentoo 2006.1 (ядро 2.6.19) Linux и Fedora 6 Linux (ядро 2.6.20), но должен работать корректно и в BSD - читай вводную. Оттестируешь - дам плюсов =)
     
    #5 ShadOS, 30 Mar 2007
    Last edited: 30 Mar 2007
  6. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Начнем с компилляции


    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 . Тут, как я понимаю, нету библиотеки. Но я могу ошибаться.
     
    #6 Alexsize, 30 Mar 2007
    Last edited: 30 Mar 2007
    2 people like this.
  7. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Ok, значит на FreeBSD не так всё ажурно как в Linux. Но эти ошибки не проблема - исправим. Спасибо.
     
  8. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Не совсем понял, какой исходный файл имеется в виду - сам исходник whitecat.c или размер самих логов? Если whitecat.c, то 10000 байт(прикольно, так ровно вышло, только заметил :)), если размер логов, то не знаю, как-то не посмотрел перед тестированием :confused:
    ext2, /var/log у меня на корневом разделе лежит.
     
  9. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    хм... странно получается. Если /var/log тоже на корневом разделе, то как там может поместиться исходный файл-лог больше чем допустимый размер файла? Временный файл должен быть аналогичен по размеру или меньше исходного. А исходники whitecat.c здесь непричём =) Протестируй ещё раз, пожалуйста, и посмотри размеры файлов предварительно. И ещё раз глянь внимательно в /etc/fstab.
     
    #9 ShadOS, 30 Mar 2007
    Last edited: 30 Mar 2007
  10. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    А он и не больше :) Вот посмотри
    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 с лишним метров(и поменьше).
     
  11. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    это уже какие-то страные баги. жуть. Покажи размер логов после очистки.
     
  12. L0rd_Ha0S

    L0rd_Ha0S Elder - Старейшина

    Joined:
    25 Jan 2006
    Messages:
    148
    Likes Received:
    102
    Reputations:
    64
    Кое-что прояснилось, я совсем забыл про /var/log/messages. Он у меня был довольно внушительных размеров - 455 Мб, а старый файл вообще - 1.3 Gb (но этот лог клинер не затрагивал, этот файл хранился забэкапеным) :) Я как поставил систему, так до сих пор не удалял никаких логов. Общий размер /var/log был почти 2 гига :) Почистив этот файл(ну и за компанию половину ненужных логов столетней давности :)), все стало путем. Хотя в общем плане проблема не исчезла, проверять в ходе работы размер temp-файлов на ext2 фс, я думаю, все же стоит, потому что на сервере логи могут быть и побольше размером чем у меня в системе, а это значит что там может возникнуть такая же проблема.
     
    1 person likes this.
  13. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Насчет фри. Я попробую на днях на 5 и 4 ветках, если получиться. И отпишусь еще.
     
    #13 Alexsize, 31 Mar 2007
    Last edited: 31 Mar 2007
  14. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Ты конечно прав - не должно быть никаких произвольных ограничений. Но на нормальном сервере логи таких размерв не бывают - logrotate обязательно стоит и архивы бекапятся в хранилище. Только текущий лог находится в системе.
     
    2 people like this.
  15. Aag

    Aag Elder - Старейшина

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    Под 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'
    
     
  16. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Ошибку с размерами логов локализовал и исправил. Под FreeBSD тоже скоро готово будет. Ждите.

    UPD: исправленная версия для GNU/Linux доступна по тем же ссылкам. Теперь всё работает отлично.
    Помимо этого незнаю зачем выложил бинарник:
    http://shados.0x48k.cc/releases/whitecat
     
    #16 ShadOS, 1 Apr 2007
    Last edited: 1 Apr 2007
  17. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Все ошибки исправил. Теперь работать должно и под FreeBSD. Ссылки остаются прежними.
     
    1 person likes this.
  18. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Все отлично заработало под фрю 6.2

    Вычистил отлично.

    Респект. MustHave!!!!
     
    #18 Alexsize, 2 Apr 2007
    Last edited: 2 Apr 2007
  19. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Я тут решил устроить нечно вроде опроса: надо ли добавлять возможность чистки других текстовых логов типа access.log Апача и т.п, ведь это можно и вручную сделать с помощью perl или того же grep? Отпишитесь, пожалуйста, все кому интересен проект действительно качественного логклинера для Linux/xBSD. Я лично не вижу смысла в чистке текстовых логов и вообще подумываю убить эту возможность из своего клинера, не unixway это.
     
  20. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    Даже не вопрос. конечно интересует.

    только сначало желательна совместимость, а потом уже функциональность...