рд░реАрдпрд▓рдЯрд╛рдЗрдо рдбреИрд╢рдмреЛрд░реНрдб


рдПрдХ рджрд┐рди, рдХрд╛рдо рдкрд░ рджреЗрд░ рд░рд╛рдд рдмреИрдареЗ, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╛ рддреНрд╡рд░рд┐рдд рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдЕрдкрд╛рдЪреЗ рдпрд╛ рдирдЧреНрдиреЗрдХреНрд╕ рд▓реЙрдЧреНрд╕ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдпрд╛ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред рд░реАрдпрд▓рдЯрд╛рдЗрдо рд╢рдмреНрдж рдереЛрдбрд╝рд╛ рдЪрд╛рдкрд▓реВрд╕реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдЪрд╛рд░реНрдЯ рдкрд░ рд╣рд░ 3 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рджреЗрдЦрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдбреИрд╢рдмреЛрд░реНрдб рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЙрддрд╛рд░рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдмреИрдардХрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдХреИрд╕реЗ рдлреИрд▓рддрд╛ рд╣реИ, рдЧреНрд░рд╛рдл рдкрд░ рдШрдЯрддрд╛ рдХреА рджрд┐рд╢рд╛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред

рддреБрд░рдВрдд рдореИрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ



рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╣рд╛рдВ рдХреЛрдИ рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЙрд╕ рдкрд░ рд▓реИрдЪ рдХрд░рддреЗ рд╣реИрдВ
tail -f /var/log/log | perl frenko_sender.pl 


frenko_sender.pl
 #!/usr/local/bin/perl -w use strict; use IO::Socket; my($sock, $server_host, $msg, $PORTNO); $PORTNO = 15555; $server_host = '188.xxx'; $sock = IO::Socket::INET->new(Proto => 'udp', PeerPort => $PORTNO, PeerAddr => $server_host) or die "Creating socket: $!\n"; while (<>){ $sock->send($_) } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, frenko_sender.pl рдмрд╕ рдпреВрдбреАрдкреА рд▓реЙрдЧ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрди рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реИрд╕реЗ, рдЖрдк рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк udp рд▓реЙрдЧ рдХреЛ рддреБрд░рдВрдд рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рднреЗрдЬрдирд╛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ Dreadatour nc ( Netcat ) рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛, рдХрд┐рд╕реА рдиреЗ рднреА рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛:

 tail -f /var/log/log | nc -u 188.xxx 15555 

рдПрдХ рдореЛрддреА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рд▓реЛрдб рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдБ рд▓реБрдЯреЗрд░реЛрдВ рдХреЗ рдПрдХ рджреМрд░ рдХреЛ рдкреЗрдВрдЪ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд▓реЙрдЧ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред

рдЕрдм рдЙрд╕ рд╕рд░реНрд╡рд░ (frenko_listen.pl) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, IO :: Lambda рдХреЗ рд▓рд┐рдП Dima Karasik рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдкрд░ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЪреБрдирд╛ рдерд╛ред

frenko_listen.pl рд▓рд╛рдЗрди (1-30)
 #!/usr/local/bin/perl -w use strict; use warnings; use Cache::Memcached::Fast; use IO::Socket; use IO::Lambda qw(:all); use IO::Lambda::Socket qw(:all); use Getopt::Std; use POSIX qw/setsid/; my $PORT=15555; my $LOCALHOST ='188.xxx'; my $CONFIG='./frenko_config'; my $time_to_die=0; my $memd = new Cache::Memcached::Fast({ servers => [ { address => 'localhost:11211', weight => 2.5 }], connect_timeout => 0.2, io_timeout => 0.5, close_on_error => 1, max_failures => 3, failure_timeout => 2, ketama_points => 150, nowait => 1, utf8 => ($^V >= 5.008001 ? 1 : 0), }); 

$ LOCALHOST рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд╣рд░реА IP рдкрддрд╛ рд╣реИ рдЬреЛ UDP рдкрд░ рдкреЛрд░реНрдЯ 15555 рдкрд░ рд╕реБрдирддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рд╣рдо рд╕рдВрд╕реНрдорд░рдг =) рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд▓рд┐рдЦреЗрдВрдЧреЗред

frenko_listen.pl рд▓рд╛рдЗрди (32-46)
 my %Regexps=(); load_config(\%Regexps); sub load_config{ my $re=shift; %{$re}=(); open (F,$CONFIG) || die 'cant open config '.$CONFIG; while (<F>){ next if /^[\s\n]+$/; my ($regexp,$key,undef,$rate)=split("\t",$_,4); $$re{$key}{re}=$regexp; $$re{$key}{rate}=$rate || 1; } close (F); } 

рдпрд╣рд╛рдВ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

frenko_config
 errdescr= 9 [E2;Javascript error at web interface - nginx acclog] 1 errorcode=\d+ 10 [E3;Fail upload with errorcode - nginx acclog] 1 

рдкрд╣рд▓реЗ рдХреЙрд▓рдо рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рддрддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдЪрд╛рд░реНрдЯ рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рддреАрд╕рд░реЗ рдХреЙрд▓рдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдЫреЛрдЯрд╛ рдФрд░ рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдХреЙрд▓рдо рдореЗрдВ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЧреНрд░рд╛рдл рдкрд░ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдЧреНрд░рд╛рдл рдкрд░ рдШрдЯрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рджреМрд░рд╛рди 3 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ 30,000 рд╣рд┐рдЯ, рд╡реЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдШреБрдЧрдгрдХреАрдп рдкреИрдорд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реБрдВрджрд░ рд╣реЛред рдЗрд╕рд▓рд┐рдП, рд╣рд┐рдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ 0.1 - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 10% рдореЗрдВ рд╣рдо рд╣рд┐рдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдПрдВрдЧреЗред

frenko_listen.pl рд▓рд╛рдЗрди (49-80)
 sub sendstat{ my ($key,$rate,$memd)= @ _; if ($rate==1 || $rate<rand()){ saver($key,$_,$memd) for (2,300,1200) } } sub saver{ my ($key,$accur,$memd)=@ _; my $memc=startpoint($accur); $key=$key.'_'.$accur.'_'.$memc; my $ttl=1000; if ($accur==300){$ttl=7400} elsif($accur==1200){$ttl=87000} $memd->set($key,1,$ttl) unless $memd->incr($key); } sub startpoint{ my $accur=shift; my $t=time(); my $x=$t % $accur; my $memc=$t-$x; return $memc; } 

рдпрд╣рд╛рдВ рд╣рдо рд╕реАрдзреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП 2x, 300 рдФрд░ 1200 рджреВрд╕рд░реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рд░ 3 рд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдФрд░ 20 рдорд┐рдирдЯ рдХреЗ рдмрд╛рджред 2 рд╕реЗрдХрдВрдб рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрдореНрдХреЗ рдХреА рдХреБрдВрдЬреА (рд╣рдорд╛рд░реЗ frenko_config рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА: 300-300 рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП 9_2_1338129044, 9_2_1338129046: 9_300_1338121800, 9_300_1338122100 рдЖрджрд┐ред

frenko_listen.pl рд▓рд╛рдЗрди (82-128)
 sub udp_server(&@) { my ($callback, $port, $host) = @ _ ; my $server = IO::Socket::INET-> new( Proto => 'udp', LocalPort => $port, LocalHost => $host, Blocking => 0, ); return $! unless $server; return lambda { context $server, 65536, 0; recv { my ( $addr, $msg) = @ _ ; again; context $callback-> (), $addr, $msg; &tail(); }} } sub handle_incoming_connection_udp { lambda { my ( $addr, $msg ) = @ _ ; if (length($msg)>5){ if (! index($msg,'reconfig')){ load_config(\%Regexps); } else { foreach (keys %Regexps){ if ($msg=~/$Regexps{$_}{re}/){ sendstat($_,$Regexps{$_}{rate},$memd); last; } } } } } } sub runserv{ my $server = udp_server { handle_incoming_connection_udp } $PORT,$LOCALHOST; die $server unless ref $server; $server-> wait; } 

рд▓реЙрдЧ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдм рд╣реИрдВрдбрд▓_рдЗрдирд┐рдВрдЧ_рдХрдиреЗрдХреНрд╢рди_рдпреВрдбреАрдкреА рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреА рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд░реЗрдЦрд╛ 5 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрдиреНрдлрд┐рдЧ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣рдорд╛рд░реЗ рдирд┐рдпрдорд┐рдд рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддреАрди рд╕реМ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд▓реЙрдЧ рд╕реБрдирддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирдИ рдирд┐рдпрдорд┐рддрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк frenko_listen.pl рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдЦреЛ рджреЗрдВрдЧреЗред рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдлрд╝реНрд▓рд╛рдИ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдорд┐рд▓рддреА рд╣реИ рдЬреЛ 'рд░реАрдХрдлрд┐рдЧ' рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рд░реИрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓реЛ рдЬреЛ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рджреМрд░рд╛рди рд╣рдорд╛рд░реЗ frenko_sender.pl рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдВ, рд╡реИрд╕реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдорд╛рдЗрд▓реЗрдЬ =) рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░реЗрдВред

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

рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрдм 1042 рд▓реЙрдЧ рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (15 рдирд┐рдпрдорд┐рдд рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ) рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб 30-32% рд╣реЛрддрд╛ рд╣реИ
  4-  Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 

рдЬрдм рдЖрдк рдРрд╕реА рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреБрдЦреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЪреМрдереЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ () рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВрдЧреЗ - рдЗрд╕рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЧрддрд┐ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

frenko_config
 errdescr= 9 [E2;Javascript error at web interface - nginx acclog] 1 errdescr= errorcode=\d+ 10 [E3;Fail upload with errorcode - nginx acclog] 1 errorcode= 

рдФрд░ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ:
 sub load_config{ my $re=shift; %{$re}=(); open (F,$CONFIG) || die 'cant open config '.$CONFIG; while (<F>){ next if /^[\s\n]+$/; my ($regexp,$key,undef,$rate,$index)=split("\t",$_,5); $index=~s/[\n\t\r]//g; $$re{$key}{re}=$regexp; $$re{$key}{index}=$index; $$re{$key}{rate}=$rate || 1; } close (F); } sub handle_incoming_connection_udp { lambda { my ( $addr, $msg ) = @_; if (length($msg)>5){ if (substr($msg,0,8) eq 'reconfig'){ load_config(\%Regexps); } else { foreach my $key(keys %Regexps){ if (index($msg,$Regexps{$key}{index})>=0){ if ($Regexps{$key}{index} eq $Regexps{$key}{re}){ sendstat($key,$Regexps{$key}{rate},$memd); last; }elsif($msg=~/$Regexps{$key}{re}/){ sendstat($key,$Regexps{$key}{rate},$memd); last; } } } } } } } 

рдЗрди рд╕рдВрд╢реЛрдзрдиреЛрдВ рдиреЗ рдкреНрд░рддрд┐рд╢рдд рд▓реЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░ рджрд┐рдпрд╛, рдпрд╣ 25-28% рдирд┐рдХрд▓рд╛ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдХрдо рд╕реЗ рдХрдо 10% рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдореЗрдореЗрдХрдЯреЗрдб рдбреЗрдЯрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 STAT uptime 601576 STAT bytes_read 358221242 STAT bytes_written 92007777 STAT bytes 5018318 STAT curr_items 62269 STAT total_items 557908 STAT reclaimed 372969 


рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ

frenko_listen.pl рд▓рд╛рдЗрди (130-157)
 sub signal_handler{ $time_to_die=1; } getopts('d:', my $opts = {}); if (exists $opts->{d}) { print "start daemon\n"; my $pid=fork; exit if $pid; die 'Couldn\'t fork: '.$! unless defined($pid); for my $handle (*STDIN, *STDOUT, *STDERR){ open ($handle, '+<', '/dev/null' ) || die 'Cant\t reopen '.$handle.' to /dev/null: '.$!; } POSIX::setsid() || die 'Can\'t start a new session: '.$!; $time_to_die=0; $SIG{TERM} = $SIG{INT} = $SIG{HUP}= \&signal_handler; until ($time_to_die){ runserv(); } } else { runserv() } 

рдпрд╣рд╛рдБ, рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ -d рдлреНрд▓реИрдЧ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдореЙрдиреЗрдЯрд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдорд┐рд▓рд╛ред рдпрд╣ рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рд╣реИред рдЪрд▓реЛ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

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

рдореИрдВ рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдлрд╛рд╕реНрдЯрдХреЙрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рджреЗрддрд╛ рд╣реВрдВ, рдпрд╣ рдореЗрдордЪреИрдЪ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджрд┐рдП рдЧрдП рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рджреЗрддрд╛ рд╣реИред

рдЪрд╛рд░реНрдЯ рд╕реНрд╡рдпрдВ рджреЛ рдкреНрд░рд╢реНрди рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рд╣реИ рдФрд░ рдЪрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдирдП рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
/frenky.fpl?init=1&accur=2
 {"status":"1","init":[["U1",[[1338188480,19],[1338188482,21],[1338188484,11],[1338188486,19],[1338188488,13],[1338188490,9],[1338188492,13],[1338188494,18],[1338188496,14],[1338188498,21],[1338188500,17],[1338188502,13],[1338188504,21],[1338188506,19],[1338188508,22],[1338188510,23],[1338188512,14],[1338188514,17],[1338188516,24],[1338188518,15],[1338188520,23],[1338188522,19],[1338188524,20]],"User uploaded the file - apache errlog"]]} 

/frenky.fpl?refresh=1&accur=2
 {"status":"1","refresh":[[1338188814,20],[1338188814,1],[1338188814,0],[1338188814,0],[1338188814,0],[1338188814,0],[1338188814,0],[1338188814,8],[1338188814,7],[1338188814,0],[1338188814,0],[1338188814,0]]} 


рдЬрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдореБрдЭреЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐, рдЕрдЧрд░ рджреЛ рдЪрд▓ рд░рд╣реА рдлрд╛рд╕реНрдЯреИрдЧреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗрдВ - рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрд╛рдЪреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдк js рдФрд░ fcgi, rdash.rar рд╕рд╣рд┐рдд рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЕрджреНрдпрддрди
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЦреНрдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИрдВ:
80 рд╣рдЬрд╛рд░ рд╕реАрдкреАрдпреВ рдХреЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 50 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рднрд╛рд░ рдкрд░
рдпрджрд┐ рдЖрдк рдЫрдБрдЯрд╛рдИ рдХреЗ рдирд┐рдпрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ 80 рд╣рдЬрд╝рд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдФрд░ CPU рдХрд╛ 90%

https://github.com/frenkyoptic/rdash

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


All Articles