Автор Тема: Мониторинг на лог файлове  (Прочетена 1018 пъти)

Hmmm

  • Напреднали
  • *****
  • Публикации: 18
    • Профил
СИТУАЦИЯ:
Ubuntu 10.04 сървър с Apache и множество сайтове
Всеки сайт върви на фреймуърк, който логва изключения, потребителски грешки и т.н. в собствен файл

ЦЕЛ:
1. В реално време или на определен интервал да получавам сборна информация от всички логове, но само с последните промени в тях (тези, които не са били вече рипортнати)
2. Самия рипортинг си мисля, че ще е добре, ако стане на един rss feed, защитен с парола през https (но това мога и сам да го организирам, ако информацията от 1. достигне до php)

Имам инсталиран monit на сървъра, който не знам може ли да помогне в случая.
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3404
    • Профил
Re: Мониторинг на лог файлове
« Отговор #1 -: Jun 30, 2011, 12:52 »
Аз правя така:
За не-много натоварен веб сървер.

tail -f log_fajla_na_apache

или пък

tail -f log_fajla_na_apache | grep 'Googlebot'

подобна комбинация е незаменима ако следиш за някакво събитие в реално време.
tail -f xxxxxx | grep 'yyyyy' | grep 'zzzzzz' | и т.н.

Ама ти май не търсиш точно това?




Активен

Perl - the only language that looks the same before and after encryption.

Hmmm

  • Напреднали
  • *****
  • Публикации: 18
    • Профил
Re: Мониторинг на лог файлове
« Отговор #2 -: Jun 30, 2011, 14:35 »
Мда, така трябва да гледам конзолата. Искам да му вкарам малко повече логика и през нета да получавам резултатите.
Активен

koue

  • Напреднали
  • *****
  • Публикации: 74
  • Distribution: FreeBSD
  • Window Manager: fluxbox
    • Профил
Re: Мониторинг на лог файлове
« Отговор #3 -: Jun 30, 2011, 14:52 »
Аз използвам следния скрипт, който изпраща на поща. Лесно може да се преправи да логва в база или в друг формат.
 
Код
GeSHi (Perl):
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. my @buffer;
  6. # the size of the buffer which will collect the logs (in lines)
  7. my $buffersize = 3;
  8. my $line;
  9. my $i;
  10. my $subject;
  11. my $send_to = $ARGV[0] or die "\nMail address is missing!\nExample: $0 good_bad_ugly\@blablabla.net /var/log/secure\n\n";
  12. my $LFILE = $ARGV[1] or die "\nLog file missing!\nExample: $0 good_bad_ugly\@blablabla.net /var/log/secure\n\n";
  13. my $MSG;
  14. # regular expression about checking for errors
  15. my $errors = "exception|error";
  16. # don't report if the string contents following regular expression
  17. my $escape = "escape string";
  18.  
  19. open my $pipe, "-|", "/usr/bin/tail", "-n1", "-F", $LFILE or die "could not start tail on $LFILE: $!";
  20.  
  21. while (<$pipe>) {
  22. # put every single line into @buffer;
  23.        push(@buffer, $_);
  24. # keep the size of the @buffer;
  25.        while(scalar(@buffer) > $buffersize) {
  26.                shift(@buffer);
  27.        }
  28. # check log lines for the given regular expressions;
  29.        if (m/$errors/i && !m/$escape/) {
  30. $subject = $&;
  31.                $line = $_;
  32.                my $DT = `date +H-S`;
  33.                chomp($DT);
  34.                $MSG = $DT." ".$LFILE."\n";
  35.                foreach (@buffer) {
  36.                        $MSG .= $_;
  37.                }
  38.                $MSG .= "--------------\n";
  39.  
  40.                open(SENDMAIL, "|/usr/sbin/sendmail -t") or die "Cannot open sendmail: $!";
  41.                print SENDMAIL "Reply-to: alerts\@blablabla.net\n";
  42.                print SENDMAIL "Subject: $subject\n";
  43.                print SENDMAIL "To: $send_to\n";
  44.                print SENDMAIL "Content-type: text/plain\n\n";
  45.                print SENDMAIL $MSG;
  46.                close(SENDMAIL);
  47.                $MSG = "";
  48.        }
  49. }
  50.  
  51.  
Активен

Спрете да им прощавате, че не знаят какво правят!

Hmmm

  • Напреднали
  • *****
  • Публикации: 18
    • Профил
Re: Мониторинг на лог файлове
« Отговор #4 -: Jul 01, 2011, 10:02 »
Благодаря, това ще ми даде насоки.

Надявах се на нещо готово, но предполагам няма да излезе толкова трудно и да си го напиша.
Активен