extend server-log for journal/container/pods

Default to reading last 30000 lines.

If reading from file estimate that average line
length is 80 characters and read based that
far back from the end of file.
This commit is contained in:
Daniel Black 2021-01-30 12:31:00 +11:00
parent c3da0b013c
commit 938b434e41

View file

@ -238,6 +238,9 @@ my $deb = ( $opt{nocolor} == 0 ) ? "[\e[0;31mDG\e[0m]" : "[DG]";
my $cmd = ( $opt{nocolor} == 0 ) ? "\e[1;32m[CMD]($me)" : "[CMD]($me)"; my $cmd = ( $opt{nocolor} == 0 ) ? "\e[1;32m[CMD]($me)" : "[CMD]($me)";
my $end = ( $opt{nocolor} == 0 ) ? "\e[0m" : ""; my $end = ( $opt{nocolor} == 0 ) ? "\e[0m" : "";
# Maximum lines of log output to read from end
my $maxlines = 30000;
# Checks for supported or EOL'ed MySQL versions # Checks for supported or EOL'ed MySQL versions
my ( $mysqlvermajor, $mysqlverminor, $mysqlvermicro ); my ( $mysqlvermajor, $mysqlverminor, $mysqlvermicro );
@ -1244,6 +1247,7 @@ sub get_log_file_real_path {
} }
sub log_file_recommendations { sub log_file_recommendations {
my $fh;
$myvar{'log_error'} = $opt{'server-log'} || $myvar{'log_error'} = $opt{'server-log'} ||
get_log_file_real_path( $myvar{'log_error'}, $myvar{'hostname'}, get_log_file_real_path( $myvar{'log_error'}, $myvar{'hostname'},
$myvar{'datadir'} ); $myvar{'datadir'} );
@ -1253,42 +1257,55 @@ sub log_file_recommendations {
badprint "log_error is set to $myvar{'log_error'} MT can't read stderr"; badprint "log_error is set to $myvar{'log_error'} MT can't read stderr";
return return
} }
if ( -f "$myvar{'log_error'}" ) { elsif ( $myvar{'log_error'} =~ /^(docker|podman|kubectl):(.*)/ ) {
open( $fh, '-|', "$1 logs --tail=$maxlines '$2'" )
// die "Can't start $1 $!";
goodprint "Log from cloud` $myvar{'log_error'} exists";
}
elsif ($myvar{'log_error'} =~ /^systemd:(.*)/ ) {
open( $fh, '-|', "journalctl -n $maxlines -b -u '$1'" )
// die "Can't start journalctl $!";
goodprint "Log journal` $myvar{'log_error'} exists";
}
elsif ( -f "$myvar{'log_error'}" ) {
goodprint "Log file $myvar{'log_error'} exists"; goodprint "Log file $myvar{'log_error'} exists";
my $size = ( stat $myvar{'log_error'} )[7];
infoprint "Log file: "
. $myvar{'log_error'} . "("
. hr_bytes_rnd( $size ) . ")";
if ( $size > 0 ) {
goodprint "Log file $myvar{'log_error'} is not empty";
if ( $size < 32 * 1024 * 1024 ) {
goodprint "Log file $myvar{'log_error'} is smaller than 32 Mb";
}
else {
badprint "Log file $myvar{'log_error'} is bigger than 32 Mb";
push @generalrec,
$myvar{'log_error'}
. " is > 32Mb, you should analyze why or implement a rotation log strategy such as logrotate!";
}
}
else {
infoprint
"Log file $myvar{'log_error'} is empty. Assuming log-rotation. Use --server-log={file} for explicit file";
return;
}
if ( ! open( $fh, '<', $myvar{'log_error'} ) ) {
badprint "Log file $myvar{'log_error'} isn't readable.";
return;
}
goodprint "Log file $myvar{'log_error'} is readable.";
if ( $maxlines * 80 < $size ) {
seek( $fh, -$maxlines * 80, 2);
<$fh> ; # discard line fragment
}
} }
else { else {
badprint "Log file $myvar{'log_error'} doesn't exist"; badprint "Log file $myvar{'log_error'} doesn't exist";
return; return;
} }
infoprint "Log file: "
. $myvar{'log_error'} . "("
. hr_bytes_rnd( ( stat $myvar{'log_error'} )[7] ) . ")";
if ( -r "$myvar{'log_error'}" ) {
goodprint "Log file $myvar{'log_error'} is readable.";
}
else {
badprint "Log file $myvar{'log_error'} isn't readable.";
return;
}
if ( ( stat $myvar{'log_error'} )[7] > 0 ) {
goodprint "Log file $myvar{'log_error'} is not empty";
}
else {
infoprint
"Log file $myvar{'log_error'} is empty. Assuming log-rotation. Use --server-log={file} for explicit file";
return;
}
if ( ( stat $myvar{'log_error'} )[7] < 32 * 1024 * 1024 ) {
goodprint "Log file $myvar{'log_error'} is smaller than 32 Mb";
}
else {
badprint "Log file $myvar{'log_error'} is bigger than 32 Mb";
push @generalrec,
$myvar{'log_error'}
. " is > 32Mb, you should analyze why or implement a rotation log strategy such as logrotate!";
}
my $numLi = 0; my $numLi = 0;
my $nbWarnLog = 0; my $nbWarnLog = 0;
@ -1296,9 +1313,6 @@ sub log_file_recommendations {
my @lastShutdowns; my @lastShutdowns;
my @lastStarts; my @lastStarts;
open( my $fh, '<', $myvar{'log_error'} )
or die "Can't open $myvar{'log_error'} for read: $!";
while ( my $logLi = <$fh> ) { while ( my $logLi = <$fh> ) {
chomp $logLi; chomp $logLi;
$numLi++; $numLi++;