@@ -88,6 +88,7 @@ package main;
88
88
" noprocess" => 0,
89
89
" dbstat" => 0,
90
90
" nodbstat" => 0,
91
+ " server-log" => ' ' ,
91
92
" tbstat" => 0,
92
93
" notbstat" => 0,
93
94
" idxstat" => 0,
@@ -133,6 +134,7 @@ package main;
133
134
' sysstat' , ' nosysstat' ,
134
135
' pfstat' , ' nopfstat' ,
135
136
' idxstat' , ' noidxstat' ,
137
+ ' server-log=s' ,
136
138
)
137
139
or pod2usage(
138
140
-exitval => 1,
@@ -236,6 +238,9 @@ package main;
236
238
my $cmd = ( $opt {nocolor } == 0 ) ? " \e [1;32m[CMD]($me )" : " [CMD]($me )" ;
237
239
my $end = ( $opt {nocolor } == 0 ) ? " \e [0m" : " " ;
238
240
241
+ # Maximum lines of log output to read from end
242
+ my $maxlines = 30000;
243
+
239
244
# Checks for supported or EOL'ed MySQL versions
240
245
my ( $mysqlvermajor , $mysqlverminor , $mysqlvermicro );
241
246
@@ -1242,7 +1247,8 @@ sub get_log_file_real_path {
1242
1247
}
1243
1248
1244
1249
sub log_file_recommendations {
1245
- $myvar {' log_error' } =
1250
+ my $fh ;
1251
+ $myvar {' log_error' } = $opt {' server-log' } ||
1246
1252
get_log_file_real_path( $myvar {' log_error' }, $myvar {' hostname' },
1247
1253
$myvar {' datadir' } );
1248
1254
@@ -1251,39 +1257,54 @@ sub log_file_recommendations {
1251
1257
badprint " log_error is set to $myvar {'log_error'} MT can't read stderr" ;
1252
1258
return
1253
1259
}
1254
- if ( -f " $myvar {'log_error'}" ) {
1255
- goodprint " Log file $myvar {'log_error'} exists" ;
1260
+ elsif ( $myvar {' log_error' } =~ / ^(docker|podman|kubectl):(.*)/ ) {
1261
+ open ( $fh , ' -|' , " $1 logs --tail=$maxlines '$2 '" )
1262
+ // die " Can't start $1 $! " ;
1263
+ goodprint " Log from cloud` $myvar {'log_error'} exists" ;
1256
1264
}
1257
- else {
1258
- badprint " Log file $myvar {'log_error'} doesn't exist" ;
1259
- return ;
1265
+ elsif ($myvar {' log_error' } =~ / ^systemd:(.*)/ ) {
1266
+ open ( $fh , ' -|' , " journalctl -n $maxlines -b -u '$1 '" )
1267
+ // die " Can't start journalctl $! " ;
1268
+ goodprint " Log journal` $myvar {'log_error'} exists" ;
1260
1269
}
1261
- infoprint " Log file: "
1262
- . $myvar {' log_error' } . " ("
1263
- . hr_bytes_rnd( ( stat $myvar {' log_error' } )[7] ) . " )" ;
1264
-
1265
- if ( -r " $myvar {'log_error'}" ) {
1270
+ elsif ( -f " $myvar {'log_error'}" ) {
1271
+ goodprint " Log file $myvar {'log_error'} exists" ;
1272
+ my $size = ( stat $myvar {' log_error' } )[7];
1273
+ infoprint " Log file: "
1274
+ . $myvar {' log_error' } . " ("
1275
+ . hr_bytes_rnd( $size ) . " )" ;
1276
+
1277
+ if ( $size > 0 ) {
1278
+ goodprint " Log file $myvar {'log_error'} is not empty" ;
1279
+ if ( $size < 32 * 1024 * 1024 ) {
1280
+ goodprint " Log file $myvar {'log_error'} is smaller than 32 Mb" ;
1281
+ }
1282
+ else {
1283
+ badprint " Log file $myvar {'log_error'} is bigger than 32 Mb" ;
1284
+ push @generalrec ,
1285
+ $myvar {' log_error' }
1286
+ . " is > 32Mb, you should analyze why or implement a rotation log strategy such as logrotate!" ;
1287
+ }
1288
+ }
1289
+ else {
1290
+ infoprint
1291
+ " Log file $myvar {'log_error'} is empty. Assuming log-rotation. Use --server-log={file} for explicit file" ;
1292
+ return ;
1293
+ }
1294
+ if ( ! open ( $fh , ' <' , $myvar {' log_error' } ) ) {
1295
+ badprint " Log file $myvar {'log_error'} isn't readable." ;
1296
+ return ;
1297
+ }
1266
1298
goodprint " Log file $myvar {'log_error'} is readable." ;
1267
- }
1268
- else {
1269
- badprint " Log file $myvar {'log_error'} isn't readable." ;
1270
- return ;
1271
- }
1272
- if ( ( stat $myvar {' log_error' } )[7] > 0 ) {
1273
- goodprint " Log file $myvar {'log_error'} is not empty" ;
1274
- }
1275
- else {
1276
- badprint " Log file $myvar {'log_error'} is empty" ;
1277
- }
1278
1299
1279
- if ( ( stat $myvar {' log_error' } )[7] < 32 * 1024 * 1024 ) {
1280
- goodprint " Log file $myvar {'log_error'} is smaller than 32 Mb" ;
1300
+ if ( $maxlines * 80 < $size ) {
1301
+ seek ( $fh , -$maxlines * 80, 2);
1302
+ <$fh > ; # discard line fragment
1303
+ }
1281
1304
}
1282
1305
else {
1283
- badprint " Log file $myvar {'log_error'} is bigger than 32 Mb" ;
1284
- push @generalrec ,
1285
- $myvar {' log_error' }
1286
- . " is > 32Mb, you should analyze why or implement a rotation log strategy such as logrotate!" ;
1306
+ badprint " Log file $myvar {'log_error'} doesn't exist" ;
1307
+ return ;
1287
1308
}
1288
1309
1289
1310
my $numLi = 0;
@@ -1292,9 +1313,6 @@ sub log_file_recommendations {
1292
1313
my @lastShutdowns ;
1293
1314
my @lastStarts ;
1294
1315
1295
- open ( my $fh , ' <' , $myvar {' log_error' } )
1296
- or die " Can't open $myvar {'log_error'} for read: $! " ;
1297
-
1298
1316
while ( my $logLi = <$fh > ) {
1299
1317
chomp $logLi ;
1300
1318
$numLi ++;
@@ -6428,6 +6446,7 @@ =head1 CONNECTION AND AUTHENTICATION
6428
6446
--mysqladmin <path> Path to a custom mysqladmin executable
6429
6447
--mysqlcmd <path> Path to a custom mysql executable
6430
6448
--defaults-file <path> Path to a custom .my.cnf
6449
+ --server-log <path> Path to explict log file
6431
6450
6432
6451
=head1 PERFORMANCE AND REPORTING OPTIONS
6433
6452
0 commit comments