рдХреЗрдВрджреНрд░реАрдХреГрдд syslog

рдирдорд╕реНрдХрд╛рд░ред рдЕрдкрдиреЗ рдЖрдИрдЯреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рдЙрди рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬреЛ рдПрдбрдорд┐рди рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ (рд░рд╛рдЙрдЯрд░, рдЖрдИрдкреА рдлреЛрди рдЖрджрд┐) рд╣реИрдВ, рдПрдХ рдЬрдЧрд╣ рдкрд░ рд▓реЙрдЧ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкрдардиреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд Google рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдФрд░ рдореИрдВ рдЦреБрдж рдХреБрдЫ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд▓реЙрдЧ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП, syslog-ng + PostgreSQL рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП, рдкрд░реНрд▓ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдлреНрд░реАрдмреАрдПрд╕рдбреА рдЬреЗрд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рдм рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ рдУрдПрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА рд╣реИ), рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХред
рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджреВрд░рд╕реНрде рд▓реЙрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП syslog- рдПрдирдЬреА рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╛рдЗрдирд╕-рдПрдирдЬреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧрдВрддрд╡реНрдп рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:

рдЧрдВрддрд╡реНрдп d_pgsql {
sql (рдкреНрд░рдХрд╛рд░ (pgsql) рд╣реЛрд╕реНрдЯ ("<рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░>") рдкреЛрд░реНрдЯ ("5432") рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо ("рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо>") рдкрд╛рд╕рд╡рд░реНрдб ("<рдЖрдкрдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб>") рдбреЗрдЯрд╛рдмреЗрд╕ ("<рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдирд╛рдо>") рддрд╛рд▓рд┐рдХрд╛ ("<рддрд╛рд▓рд┐рдХрд╛>") рдХреЙрд▓рдо ("рд╣реЛрд╕реНрдЯ", "рд╕реБрд╡рд┐рдзрд╛", "рдкреНрд░рд╛рдердорд┐рдХрддрд╛", "рд╕реНрддрд░", "рдЯреИрдЧ", "рддрд┐рдерд┐", "рд╕рдордп", "рдХрд╛рд░реНрдпрдХреНрд░рдо", "рд╕рдВрджреЗрд╢") рдореВрд▓реНрдп ('$' HOST ',' $ FACILITY ',' $ PRIORITY ',' $ LEVEL ',' $ TAG ',' $ YEAR- $ MONTH- $ DAY ',' $ HOUR: $ MIN: SEC, '$ PROGRAM', '$ MSG') рдЕрдиреБрдХреНрд░рдорд┐рдд ("рд╣реЛрд╕реНрдЯ", "рд╕реНрддрд░", "рддрд┐рдерд┐", "рд╕рдордп", "рд╕рдВрджреЗрд╢"));
};

рд╣рдо рд╕реНрд░реЛрдд рдХреЛ рдирдП рдЧрдВрддрд╡реНрдп рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ, syslog-ng рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ (рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд╣реИ?)ред рд╕рднреА рд▓реЙрдЧ рдХреЛ рдЕрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрдирд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ "рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЯрд╛рдЗрдо рдЖрдЙрдЯ" рдЬреИрд╕реЗ рдХреБрдЫ рджреЗрдЦреЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, рд╣рдо рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛:

#!/usr/local/bin/perl # # syslog-stat (c) Roman Melko <romanmelko@gmail.com> # Description: Simple web-interface for querying syslog-ng records stored in PostgreSQL database # Requirements: get_hosts.pl script should be runned periodically to have an up-to-date hosts file # Version: 2011122001 # License: BSD # print "Content-type:text/html\n\n"; print <<EndOfHTML; <html><head><title>Syslog</title></head> <body bgcolor='lightgrey'> EndOfHTML use strict; use DBI; use CGI; use Socket; use feature qw/switch/; my $cgi = CGI->new(); my $host; my $level; my $fromdate; my $todate; my $server = "<  >"; # DB server my $user = "< username>"; # DB user my $password = "< password>"; # DB password my $dbname = "<  >"; # DB name my $table = "<>"; # DB table my $hosts_file = "/usr/local/www/syslog-stat/cache/hosts.db"; my $count = 100; # max count of servers my $i = 0; my $sth; my $dbh; my $color = "black"; my @hosts = (); my @levels = ( "", "info", "warning", "error", ); my @years = ("2011" .. "2030"); my @months = ("01" .. "12"); my @days = ("01" .. "31"); my ($fromsec,$frommin,$fromhour,$frommday,$frommon,$fromyear,$fromwday,$fromyday,$fromisdst) = localtime(time); my ($tosec,$tomin,$tohour,$tomday,$tomon,$toyear,$towday,$toyday,$toisdst) = localtime(time); my $where; $dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$server", "$user", "$password", {'RaiseError' => 1}); # Getting list of hosts, sending logs to syslog server sub get_hosts_ext { open(HOSTS,"<",$hosts_file) or die "open: $!\n"; my $count = 0; while (<HOSTS>) { $hosts[$count] = substr($_,0,length($_)-1); $count++; } close HOSTS or die "close: $!"; } sub query() { $host = $cgi->param('host'); $level = $cgi->param('level'); $fromdate = join("",$cgi->param('fromyear'),$cgi->param('frommonth'),$cgi->param('fromday')); $todate = join("",$cgi->param('toyear'),$cgi->param('tomonth'),$cgi->param('today')); if($fromdate > $todate) { $fromdate = $todate = join("-",$cgi->param('toyear'),$cgi->param('tomonth'),$cgi->param('today')); } else { $fromdate = join("-",$cgi->param('fromyear'),$cgi->param('frommonth'),$cgi->param('fromday')); $todate = join("-",$cgi->param('toyear'),$cgi->param('tomonth'),$cgi->param('today')); } $where = ""; if ($level) { given($level) { when("error") { $where = "and level='error' or host='$host' and level='err'"; } when("info") { $where = "and level='info' or host='$host' and level='notice'"; } default { $where = "and level='$level'"; } } } $sth = $dbh->prepare("SELECT * FROM logs where host='$host' and date>='$fromdate' and date<='$todate' $where order by date desc, time desc"); $sth->execute(); print(' <table border=1 cellpadding="1" cellspacing="0"> <tr> <th>DATE</th> <th>LEVEL</th> <th>PROGRAM</th> <th>MESSAGE</th> </tr> '); while(my $ref = $sth->fetchrow_hashref()) { $color = "black"; given($ref->{'level'}) { when("warning") { $color = "yellow"; } when(($ref->{'level'} eq "error") || ($ref->{'level'} eq "err")) { $color = "red"; } default { $color = "black"; } } print "<p><tr>"; print(" <td>  $ref->{'date'} $ref->{'time'}  </td> <td>  <font color=$color>$ref->{'level'}</font>  </td> <td>  $ref->{'program'}  </td> <td>  $ref->{'msg'}  </td> "); print "</tr></p>"; } print "</table>"; } $fromyear += 1900; $frommon++; $toyear += 1900; $tomon++; get_hosts_ext; if(length($frommon) == 1) { $frommon = join("","0",$frommon); } if(length($frommday) == 1) { $frommday = join("","0",$frommday); } if(length($tomon) == 1) { $tomon = join("","0",$tomon); } if(length($tomday) == 1) { $tomday = join("","0",$tomday); } print $cgi->start_form(); print "Host: ".$cgi->popup_menu(-name=>"host", -values=>[@hosts]); print "\t\tFrom: ".$cgi->popup_menu(-name=>"fromyear", -values=>[@years], -default=>$fromyear); print $cgi->popup_menu(-name=>"frommonth", -values=>[@months], -default=>$frommon); print $cgi->popup_menu(-name=>"fromday", -values=>[@days], -default=>$frommday); print "\t\tTo: ".$cgi->popup_menu(-name=>"toyear", -values=>[@years], -default=>$toyear); print $cgi->popup_menu(-name=>"tomonth", -values=>[@months], -default=>$tomon); print $cgi->popup_menu(-name=>"today", -values=>[@days], -default=>$tomday); print "\t\tLevel: ".$cgi->popup_menu(-name=>"level", -values=>[@levels]); print ($cgi->submit (-name=>'Query',-value=>'Query')); print("<div align='right'>syslog-stat (c) Roman Melko</div>"); print $cgi->end_form(); if(($cgi->param('host')) && ($cgi->param('fromyear') && ($cgi->param('frommonth')) && ($cgi->param('fromday')))) { query(); $cgi->param('host') = (); $cgi->param('fromyear') = (); $cgi->param('frommonth') = (); $cgi->param('fromday') = (); $cgi->param('toyear') = (); $cgi->param('tomonth') = (); $cgi->param('today') = (); $cgi->param('level') = (); } $dbh->disconnect(); print "</body></html>"; 


рдФрд░ рднреА get_hosts.pl рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрд┐рд╕реЗ рддрд╛рдЬ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдореЗрдЬрдмрд╛рди рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд▓реЙрдЧ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рдореБрдЦреНрдп рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ "рдЯрд╛рдЗрдо рдЖрдЙрдЯ рдЕрдиреБрд░реЛрдз" рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

 #!/usr/local/bin/perl # # syslog-stat (c) Roman Melko <romanmelko@gmail.com> # Description: Get hosts from syslog-ng records stored in PostgreSQL database # Requirements: Should run periodically # Version: 2011121901 # License: BSD # use strict; use DBI; my $host; my $level; my $fromdate; my $todate; my $server = "<  >"; # DB server my $user = "< username>"; # DB user my $password = "< password>"; # DB password my $dbname = "<  >"; # DB name my $table = "<>"; # DB table my $hosts_file = "/usr/local/www/syslog-stat/cache/hosts.db"; my $sth; my $dbh; my @hosts = (); sub get_hosts { $dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$server", "$user", "$password", {'RaiseError' => 1}); $sth = $dbh->prepare("SELECT DISTINCT host FROM logs order by host asc"); $sth->execute(); my $count = 0; while(my $ref = $sth->fetchrow_hashref()) { $hosts[$count] = $ref->{'host'}; $count++; } $dbh->disconnect(); } sub dump_hosts { open(HOSTS,">",$hosts_file) or die "Dump failed: $!\n"; my $count = @hosts; my $i = 0; while(<@hosts>) { print HOSTS $_."\n"; } close(HOSTS); } get_hosts; dump_hosts; exit 0 


рд╕рдм рдХреБрдЫ, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

Piccy.info - рдлреНрд░реА рдЗрдореЗрдЬ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ

рдлрд┐рд▓рд╣рд╛рд▓, 7 рдорд╣реАрдиреЗ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрд░реЗ рд▓рд┐рдП 6.5 рдЬреАрдмреА рд▓реЗрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In139040/


All Articles