sysadmin intermediate
How to generate system reports with CPU and memory usage
Question
How can I create a system health report showing CPU, memory, and disk usage in Perl?
Combine multiple system commands to generate a report:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(strftime);
my $timestamp = strftime("%Y-%m-%d %H:%M:%S", localtime);
print "System Health Report - $timestamp\n";
print "=" x 60 . "\n\n";
# CPU Load
if (open my $load, '<', '/proc/loadavg') {
my $loadavg = <$load>;
my ($one, $five, $fifteen) = split /\s+/, $loadavg;
print "CPU Load Average: $one (1m), $five (5m), $fifteen (15m)\n";
close $load;
}
# Memory Usage
my $mem_info = `free -m | grep Mem:`;
if ($mem_info =~ /Mem:\s+(\d+)\s+(\d+)/) {
my ($total, $used) = ($1, $2);
my $percent = int(($used / $total) * 100);
print "Memory Usage: $used MB / $total MB ($percent%)\n";
}
# Disk Usage
print "\nDisk Usage:\n";
my @df_output = `df -h | grep '^/'`;
foreach (@df_output) {
if (/(\S+)\s+\S+\s+\S+\s+\S+\s+(\d+)%\s+(\S+)/) {
print " $3: $2%\n" if $2 >= 70;
}
}
This script generates a system health report with CPU load averages, memory usage percentages, and disk usage for mounted filesystems.