-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathpsi
executable file
·52 lines (47 loc) · 1.97 KB
/
psi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl
# (c) Harald Weidner, 2019-02-16
# License: MIT
#
# Checkmk local check
# displays cpu/io/memory pressure informations from the new PSI subsystem
# in Linux >= 4.20.
#
# example output:
#
# P PSI_cpu psi_cpu_some_avg10=0.67;50;75;0;100|psi_cpu_some_avg60=26.92;50;75;0;100|psi_cpu_some_avg300=55.92;50;75;0;100 PSI cpu pressure
# P PSI_memory psi_memory_some_avg10=0.00;50;75;0;100|psi_memory_some_avg60=0.00;50;75;0;100|psi_memory_some_avg300=0.00;50;75;0;100|psi_memory_full_avg10=0.00;25;50;0;100|psi_memory_full_avg60=0.00;25;50;0;100|psi_memory_full_avg300=0.00;25;50;0;100 PSI memory pressure
# P PSI_io psi_io_some_avg10=0.00;50;75;0;100|psi_io_some_avg60=0.00;50;75;0;100|psi_io_some_avg300=0.00;50;75;0;100|psi_io_full_avg10=0.00;25;50;0;100|psi_io_full_avg60=0.00;25;50;0;100|psi_io_full_avg300=0.00;25;50;0;100 PSI io pressure
use strict;
use warnings;
# configuration - adjust for your needs
my ( $WARNsome60, $WARNsome300, $WARNfull60, $WARNfull300 ) =
( 90, 80, 80, 60 );
my ( $CRITsome60, $CRITsome300, $CRITfull60, $CRITfull300 ) =
( 95, 90, 90, 80 );
# psi check
for my $F (qw(CPU Memory IO IRQ)) {
my $f = lc($F);
my $vars = "";
open( IN, "< /proc/pressure/$f" ) || next;
while (<IN>) {
if (
/^(some|full) avg10=(\d+.\d+) avg60=(\d+.\d+) avg300=(\d+.\d+) total=(\d+)$/
)
{
my ( $scope, $avg10, $avg60, $avg300, $total ) =
( $1, $2, $3, $4, $5 );
if ( $scope eq "some" ) {
$vars =
"psi_${f}_${scope}_avg60=$avg60;$WARNsome60;$CRITsome60;0;100|psi_${f}_${scope}_avg300=$avg300;$WARNsome300;$CRITsome300;0;100";
}
elsif ( $f ne "cpu" ) {
$vars .= "|" unless ( $vars eq "" );
$vars .=
"psi_${f}_${scope}_avg60=$avg60;$WARNfull60;$CRITfull60;0;100|psi_${f}_${scope}_avg300=$avg300;$WARNfull300;$CRITfull300;0;100";
}
}
}
close(IN);
print "P \"PSI ${F}\" $vars PSI $F pressure\n";
}
exit 0;