The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"разбор лога перловым скриптом в реал-тайме, как?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от vlad emailИскать по авторуВ закладки on 29-Авг-02, 14:39  (MSK)
Добрый день,
Подскажите, как на перле сделать такое:
ведется лог файл и перенаправляется на стандартый ввод скрипта на перле.
Как написать этот скрипт? Подскажите общее направление. Например нужно, чтобы некоторый строки лога игнорировались (происходил поиск по шаблону),
что-то перенаправлялось в другой лог, извлекать определенные данные, записывать их в переменные и т.п. Как сделать это разбор строки в реал тайме? Покажите примерное решение.
Всем большое спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от Владислав emailИскать по авторуВ закладки on 29-Авг-02, 14:57  (MSK)
>Добрый день,
>Подскажите, как на перле сделать такое:
>ведется лог файл и перенаправляется на стандартый ввод скрипта на перле.
>Как написать этот скрипт? Подскажите общее направление. Например нужно, чтобы некоторый строки
>лога игнорировались (происходил поиск по шаблону),
>что-то перенаправлялось в другой лог, извлекать определенные данные, записывать их в переменные
>и т.п. Как сделать это разбор строки в реал тайме? Покажите
>примерное решение.
>Всем большое спасибо.

Вот чуть на С ... а там гляди и на перле так же ... :) не знаю

--------------------------------

#include <stdio.h>

int main(int argc, char *argv[])
{ char buffer_for_line[1024];
  while(!ferror(stdin) && !feof(stdin) &&
          fgets(buffer_for_line, 1024, stdin) != NULL)
  { if ( buffer_for_line[0] == '#' ) // it is a comment ! ignore ...
       continue;
    // А тут твори со строкой чо угодно ...
  }
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от vlad emailИскать по авторуВ закладки on 29-Авг-02, 15:44  (MSK)
Спасибо, еще хотелось бы узнать как это делается на перле.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от J Искать по авторуВ закладки on 29-Авг-02, 16:13  (MSK)
>Спасибо, еще хотелось бы узнать как это делается на перле.


перл в реалтайме может не справиться. а к С можно подключить библиотеку регекспов, и использовать их для парсенья строк

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от smooth Искать по авторуВ закладки on 06-Сен-02, 12:50  (MSK)
>>Спасибо, еще хотелось бы узнать как это делается на перле.
>
>
>перл в реалтайме может не справиться. а к С можно подключить библиотеку
>регекспов, и использовать их для парсенья строк
не знаю как кто
мы делали так
open(FILE,"tail -f some_log_file.log|") || die "Can't open la la la"
while(<FILE>){
do something
}
close(FILE);
это правда я привлекаю внешние программы типа tail - но у нас работает - так разбирается лог от прокси сервера в реалном времени
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от XMan emailИскать по авторуВ закладки on 07-Сен-02, 00:44  (MSK)
Я так понимаю, проблема чтения уже решена. Он же сказал, что передается на стандартный вход, то есть читаешь как:
while (<STDIN>) {
...
}

Вопрос был по разбору, типа что писать вместо "do something". Так вот, писать то же самое, что и при не realtime разборе. Если вопрошающий незнает, что именно нужно писать для разбора - отправить на почитать умные книжки и доки по языку.
Только нужно учесть, что как ни пиши, а разбор сетевых пакетов "налету" нужно писать на C, ибо любой скриптовый язык будет ну никак не realtime - проверено :))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от pth Искать по авторуВ закладки on 08-Сен-02, 05:48  (MSK)
> != NULL

Дисквалификация.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: разбор лога перловым скриптом в реал-тайме, как?"
Сообщение от gzsoft emailИскать по авторуВ закладки on 07-Окт-02, 13:00  (MSK)
>Добрый день,
>Подскажите, как на перле сделать такое:
>ведется лог файл и перенаправляется на стандартый ввод скрипта на перле.
>Как написать этот скрипт? Подскажите общее направление. Например нужно, чтобы некоторый строки
>лога игнорировались (происходил поиск по шаблону),
>что-то перенаправлялось в другой лог, извлекать определенные данные, записывать их в переменные
>и т.п. Как сделать это разбор строки в реал тайме? Покажите
>примерное решение.
>Всем большое спасибо.


Мне нужно было чтобы ipchains log попадал в БД
syslog настроил что бы писал в PIPE

#!/usr/bin/perl
use POSIX;
use Pg;

$pghost="localhost";
$pgport="5432";
$pgoptions="";
$pgtty="";
$dbname="log";
$login="postgres";
$passwd="123456";

$pid=fork(); # create new process and exit from parent
exit if $pid;
die "Couldn't fork: $!" unless defined($pid);

POSIX::setsid() or die "Can't start new session: $!"; # delete link with terminal

-p "/var/log/all" or die "Couldn't find pipe: $!";

open(PIPE,"</var/log/all") or die "Could open pipe: $!";

$conn = Pg::setdbLogin($pghost, $pgport, $pgoptions, $pgtty, $dbname, $login, $passwd);
$errorMessage=$conn->errorMessage;
if ($errorMessage ) {
print STDERR $errorMessage;
exit 1;
};

while (<PIPE>){
$link='';
$link=fillvalues($_);
if ($link) {
  $result = $conn->exec("INSERT INTO ipchainslog (dt,hostname,chainsname,job,\
  int,proto,srcip,srcport,dstip,dstport,length,numberrule)VALUES \
  ('$link->{'dt'}', '$link->{'hostname'}', '$link->{'chainsname'}',\
  '$link->{'job'}', '$link->{'int'}', $link->{'proto'}, '$link->{'srcip'}',\
  $link->{'srcport'}, '$link->{'dstip'}', $link->{'dstport'},\
  $link->{'length'}, $link->{'numberrule'})");
};

$errorMessage=$conn->errorMessage;                    
if ($errorMessage ) {                                                                    
  print STDERR $errorMessage;                                                              
  exit 1;                                                                                  
};  
};

#########################################################################################
sub fillvalues {
my($log_string,$link);
$log_string=shift @_;
chomp $log_string;

if ($log_string=~/^(\w{3,3}  \d \d\d:\d\d:\d\d )(.+?) kernel: Packet log: (.+?) (.+?) (.+?) PROTO=(\d{1,3}) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}) L=(\d{1,5}).+? \(\#(\d{1,5})\)/){
  $link->{'dt'}=$1.((gmtime)[5]+1900);
  $link->{'hostname'}=$2;
  $link->{'chainsname'}=$3;
  $link->{'job'}=$4;
  $link->{'int'}=$5;
  $link->{'proto'}=$6;
  $link->{'srcip'}=$7;
  $link->{'srcport'}=$8;
  $link->{'dstip'}=$9;
  $link->{'dstport'}=$10;
  $link->{'length'}=$11;
  $link->{'numberrule'}=$12;
};
return $link;
};

долько долго не пинайте если что не так :)
чем не realtime не знаю слово слишком заумное а со своей работой пока справляется;

а вот у меня самого вопрос при как проверить существует ли процесс с таким номером и если существует как инфу о нем узнать?

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру