Merge pull request #626 from ClusterLabs/striker-data-collection-fixes

Striker data collection fixes
main
Fabio M. Di Nitto 9 months ago committed by GitHub
commit fcdfbbd486
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      man/striker-collect-debug.8
  2. 96
      tools/striker-collect-debug

@ -35,6 +35,10 @@ This restricts the data to be collected to the Striker dashboards and the specif
.TP .TP
This can be used to specify which specific hosts data is collected from. Note that this can be used in conjuction with \fB\-\-anvil\fR to add additional hosts to collect data from, like DR hosts. This can be used to specify which specific hosts data is collected from. Note that this can be used in conjuction with \fB\-\-anvil\fR to add additional hosts to collect data from, like DR hosts.
.TP .TP
\fB\-\-with\-screenshots\fR
.TP
This collects VMs screenshots together with debug log. Disabled by default.
.TP
\fB\-\-output\-file\fR </path/to/file.tar.bz2> \fB\-\-output\-file\fR </path/to/file.tar.bz2>
.TP .TP
This allows you to specify the output compressed tarball that the files will be saved in. By default, the output file is \fB/root/anvil-debug_<timestamp>.tar.bz2\fR. If this is a directory (ending in \fB/\fR), the normal file name is created, just in a different directory. If the path ends in a file that doesn't have the \fB.tar.bz2\fR suffix, that suffix will be added automatically. The output file will always be a bzip2's tarball. This allows you to specify the output compressed tarball that the files will be saved in. By default, the output file is \fB/root/anvil-debug_<timestamp>.tar.bz2\fR. If this is a directory (ending in \fB/\fR), the normal file name is created, just in a different directory. If the path ends in a file that doesn't have the \fB.tar.bz2\fR suffix, that suffix will be added automatically. The output file will always be a bzip2's tarball.

@ -36,6 +36,7 @@ my $anvil = Anvil::Tools->new();
$anvil->Get->switches({list => [ $anvil->Get->switches({list => [
"anvil", "anvil",
"hosts", "hosts",
"with-screenshots",
"output-file"], man => $THIS_FILE}); "output-file"], man => $THIS_FILE});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => $anvil->data->{switches}}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => $anvil->data->{switches}});
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0115", variables => { program => $THIS_FILE }}); $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0115", variables => { program => $THIS_FILE }});
@ -77,8 +78,7 @@ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list
"sys::compile_directory" => $anvil->data->{sys}{compile_directory}, "sys::compile_directory" => $anvil->data->{sys}{compile_directory},
}}); }});
print "Data collection has begun.\n"; print "Data collection has begun. This will take a while!\n\n";
print "Depending on how many systems we're collecting from, this could take a while.\n";
# Get the directory portion of the output path and make sure it exists. # Get the directory portion of the output path and make sure it exists.
my $tarball = process_output($anvil); my $tarball = process_output($anvil);
@ -89,7 +89,8 @@ process_switches($anvil);
collect_data($anvil); collect_data($anvil);
# Create the tarball now. # Create the tarball now.
print "Data collection complete, creating the tarball now... "; print "\nData collection complete\n";
print "- Creating the tarball now. PLEASE BE PATIENT!... ";
my $shell_call = $anvil->data->{path}{exe}{tar}." -cvjf ".$tarball." ".$anvil->data->{sys}{compile_directory}; my $shell_call = $anvil->data->{path}{exe}{tar}." -cvjf ".$tarball." ".$anvil->data->{sys}{compile_directory};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
's1:tarball' => $tarball, 's1:tarball' => $tarball,
@ -103,10 +104,22 @@ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list
}}); }});
print "Done!\n"; print "Done!\n";
print "\n[ Complete ] - The debug data is here: [".$tarball."]\n"; print "- Removing temporary data dir [".$anvil->data->{sys}{compile_directory}."]... ";
print "[ Warning ] - The collected logs likely include sensitive information! Share it carefully!\n"; $shell_call = "rm -rf ".$anvil->data->{sys}{compile_directory};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
's1:tempdir' => $anvil->data->{sys}{compile_directory},
's2:shell_call' => $shell_call,
}});
($output, $return_code) = $anvil->System->call({shell_call => $shell_call});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
output => $output,
return_code => $return_code,
}});
print "Done!\n";
print "\n[ Complete ] - The debug data collected here: [".$tarball."]\n";
print "[ Warning ] - The collected data and logs likely include sensitive information! Share it carefully!\n";
$anvil->nice_exit({exit_code => 0}); $anvil->nice_exit({exit_code => 0});
@ -158,14 +171,22 @@ sub process_output
if ($output_directory ne "/") if ($output_directory ne "/")
{ {
print "- Creating the output directory: [".$output_directory."]... "; print "Preparing local machine\n";
my $failed = $anvil->Storage->make_directory({directory => $output_directory}); if (! -d $output_directory) {
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { failed => $failed }}); print "- Creating the output directory: [".$output_directory."]... ";
if ($failed) my $failed = $anvil->Storage->make_directory({directory => $output_directory});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { failed => $failed }});
if ($failed)
{
print "Failed!\nUnable to create the directory: [".$anvil->data->{sys}{compile_directory}."]. The error should be logged.\n";
$anvil->nice_exit({exit_code => 1});
}
print "Done!\n";
}
else
{ {
print "Failed!\nUnable to create the directory: [".$anvil->data->{sys}{compile_directory}."]. The error should be logged.\n"; print "- Output directory [".$output_directory."] already exists.\n";
$anvil->nice_exit({exit_code => 1}); }
}
} }
$tarball = $output_directory."/".$output_file; $tarball = $output_directory."/".$output_file;
@ -178,6 +199,7 @@ sub collect_data
{ {
my ($anvil) = @_; my ($anvil) = @_;
print "- Creating temporary data dir [".$anvil->data->{sys}{compile_directory}."]... ";
my $failed = $anvil->Storage->make_directory({directory => $anvil->data->{sys}{compile_directory}}); my $failed = $anvil->Storage->make_directory({directory => $anvil->data->{sys}{compile_directory}});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { failed => $failed }}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { failed => $failed }});
if ($failed) if ($failed)
@ -185,6 +207,7 @@ sub collect_data
print "Failed to create the directory: [".$anvil->data->{sys}{compile_directory}."]. The error should be logged.\n"; print "Failed to create the directory: [".$anvil->data->{sys}{compile_directory}."]. The error should be logged.\n";
$anvil->nice_exit({exit_code => 1}); $anvil->nice_exit({exit_code => 1});
} }
print "Done!\n";
my $hosts = @{$anvil->data->{collect_from}}; my $hosts = @{$anvil->data->{collect_from}};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { hosts => $hosts }}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { hosts => $hosts }});
@ -675,33 +698,40 @@ sub collect_local_data
} }
print "Done!\n"; print "Done!\n";
# Grab screenshots. if ($anvil->data->{switches}{'with-screenshots'})
print "- Collecting server screenshots... ";
if (-d $anvil->data->{path}{directories}{screenshots})
{ {
$shell_call = $anvil->data->{path}{exe}{tar}." -cvjf ".$target_directory."/server-screenshots.bz2 ".$anvil->data->{path}{directories}{screenshots}; # Grab screenshots.
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { shell_call => $shell_call }}); print "- Collecting server screenshots... ";
if (-d $anvil->data->{path}{directories}{screenshots})
($output, $return_code) = $anvil->System->call({shell_call => $shell_call});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
output => $output,
return_code => $return_code,
}});
if ($return_code)
{ {
# Failed $shell_call = $anvil->data->{path}{exe}{tar}." -cvjf ".$target_directory."/server-screenshots.bz2 ".$anvil->data->{path}{directories}{screenshots};
print "Failed!\n"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { shell_call => $shell_call }});
print "Expected the return code '0', but got: [".$return_code."]. The error, if any, was:\n";
print "========\n"; ($output, $return_code) = $anvil->System->call({shell_call => $shell_call});
print $output."\n"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
print "========\n"; output => $output,
$anvil->nice_exit({exit_code => 1}); return_code => $return_code,
}});
if ($return_code)
{
# Failed
print "Failed!\n";
print "Expected the return code '0', but got: [".$return_code."]. The error, if any, was:\n";
print "========\n";
print $output."\n";
print "========\n";
$anvil->nice_exit({exit_code => 1});
}
print "Done!\n";
}
else
{
print "Failed!\nScreenshot directory: [".$anvil->data->{path}{directories}{screenshots}."] doesn't exist, skipping.\n";
} }
print "Done!\n";
} }
else else
{ {
print "Failed!\nScreenshot directory: [".$anvil->data->{path}{directories}{screenshots}."] doesn't exist, skipping.\n"; print "- Screehshots collection disabled.\n";
} }
} }

Loading…
Cancel
Save