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.

Was this helpful?

Related Questions