На днях, для того чтобы снять стресс социального происхождения, я решил немного попрограммировать для души, хотя, наверно, это громко сказано - несколько строк на перле - это, пожалуй, не программирование :)

Сказано - сделано, порывшись в документации к munin было решено написать модулёк для сбора статистики по температуре процессора.

Итак, какова идея? на вход плагину при запуске munin-node подаётся команда config, в ответ плагин должен вернуть описание осей графика название графика, название осей (точнее - вертикальных осей, горизонтальные -  это время).
То есть, запустив coretemp.pl config , мы видим:

# ./coretemp.pl config
graph_title CPU Temperature
graph_vlabel Degrees Celcium
graph_scale no
graph_category system
graph_info How hot cpu is.
temperature.label temperature

а если пареметров не будет или они будут другими(еже 5-минутр), то мы увидим значение в градусах цельсия:

./coretemp.pl

temperature.value 46

<div>вот например так.</div>
<div>Дублировать документацию по мунину здесь мне откровенно влом, просто приведу скрипт, который у меня сейчас работает, для наглядности что всё просто.</div>

#!/usr/bin/perl

# cpu temperature monitoring plugin for munin
# distributed for public domain
# date 17 May 2010

#use strict;
#use warnings "all";
use Fcntl;

if (defined($ARGV[0]) && ($ARGV[0] eq 'config')){
        syswrite STDOUT, < <DATA
graph_title CPU Temperature
graph_vlabel Degrees Celcium
graph_scale no
graph_category system
graph_info How hot cpu is.
temperature.label temperature
DATA
;
}else{
        if( -r '/sys/bus/platform/devices/coretemp.0/temp1_input'){
                sysopen(FILE, '/sys/bus/platform/devices/coretemp.0/temp1_input', O_RDONLY);
                my $str = <FILE>;
                close(FILE);
                chop($str); chop($str); chop($str); chop($str);
                syswrite STDOUT, "temperature.value $str\n";
                undef $str;
        }else{
                syswrite STDOUT, "Cannot read /sys/bus/platform/devices/coretemp.0/temp1_input\n";
                exit -1;
        }
}
exit 0;

__END__

Next Post