最初の perl スクリプトを使用して、http ://www.tune-it.ru/web/tiamat/home/-/blogs/17465 からスクリプトを作成する IPMI テンプレートを使用しようとしています。だから私は次の出力を得ました:
# template|sensor|type|dsc|unit|lnr|lcr|lnc|unc|ucr|unr
|1.05V PCH|Threshold|Voltage|Volts|0.870|0.897|0.942|1.194|1.221|1.248
|1.2V BMC|Threshold|Voltage|Volts|1.020|1.047|1.092|1.344|1.371|1.398
|1.5V PCH|Threshold|Voltage|Volts|1.320|1.347|1.401|1.644|1.671|1.698
|12V|Threshold|Voltage|Volts|10.173|10.299|10.740|12.945|13.260|13.386
|3.3VCC|Threshold|Voltage|Volts|2.789|2.823|2.959|3.554|3.656|3.690
|3.3VSB|Threshold|Voltage|Volts|2.789|2.823|2.959|3.554|3.656|3.690
|5VCC|Threshold|Voltage|Volts|4.246|4.298|4.480|5.390|5.546|5.598
|5VSB|Threshold|Voltage|Volts|4.246|4.298|4.480|5.390|5.546|5.598
|CPU Temp|Threshold|Temperature|degrees C|0.000|0.000|0.000|85.000|90.000|90.000
|Chassis Intru|Discrete|Physical Security|discrete||||||
|DIMMA1 Temp|Threshold|Temperature|degrees C|1.000|2.000|4.000|80.000|85.000|90.000
|DIMMA2 Temp|Threshold|Temperature|degrees C|1.000|2.000|4.000|80.000|85.000|90.000
|DIMMB1 Temp|Threshold|Temperature|degrees C|1.000|2.000|4.000|80.000|85.000|90.000
|DIMMB2 Temp|Threshold|Temperature|degrees C|1.000|2.000|4.000|80.000|85.000|90.000
|DIMMC1 Temp|Threshold|Temperature|||||||
|DIMMC2 Temp|Threshold|Temperature|||||||
|DIMMD1 Temp|Threshold|Temperature|||||||
|DIMMD2 Temp|Threshold|Temperature|||||||
|FAN1|Threshold|Fan|RPM|300.000|500.000|700.000|25300.000|25400.000|25500.000
|FAN2|Threshold|Fan|RPM|300.000|500.000|700.000|25300.000|25400.000|25500.000
|FAN3|Threshold|Fan|RPM|300.000|500.000|700.000|25300.000|25400.000|25500.000
|FAN4|Threshold|Fan|RPM|300.000|500.000|700.000|25300.000|25400.000|25500.000
|FAN5|Threshold|Fan|||||||
|FANA|Threshold|Fan|||||||
|PCH Temp|Threshold|Temperature|degrees C|-11.000|-8.000|-5.000|90.000|95.000|100.000
|PS1 Status|Discrete|Power Supply|discrete||||||
|PS2 Status|Discrete|Power Supply|discrete||||||
|Peripheral Temp|Threshold|Temperature|degrees C|-9.000|-7.000|-5.000|80.000|85.000|90.000
|System Temp|Threshold|Temperature|degrees C|-9.000|-7.000|-5.000|80.000|85.000|90.000
|VBAT|Threshold|Voltage|Volts|2.375|2.487|2.599|3.775|3.887|3.999
|VDIMMAB|Threshold|Voltage|Volts|0.948|0.975|1.047|1.344|1.425|1.443
|VDIMMCD|Threshold|Voltage|Volts|0.948|0.975|1.047|1.344|1.425|1.443
|Vcpu|Threshold|Voltage|Volts|1.242|1.260|1.395|1.899|2.088|2.106
|VcpuVRM Temp|Threshold|Temperature|degrees C|-9.000|-7.000|-5.000|95.000|100.000|105.000
|VmemABVRM Temp|Threshold|Temperature|degrees C|-9.000|-7.000|-5.000|95.000|100.000|105.000
|VmemCDVRM Temp|Threshold|Temperature|degrees C|-9.000|-7.000|-5.000|95.000|100.000|105.000
2番目のスクリプトを実行したとき:
#!/usr/bin/perl
use strict;
use POSIX qw(strftime);
my $date = strftime("%d.%m.%y", localtime);
my $time = strftime("%H.%M", localtime);
my $delay = 300;
my $history = 7;
my $trends = 365;
# 0 - Line
# 1 - Fill
# 2 - Bold line
# 3 - Dots
# 4 - Striped line
# 5 - Gradient line
my $drawtype = 1;
# 3 - Number (Integer)
# 0 - Number (Folating point)
# 1 - Symbol
# 2 - Log
# 4 - Text
my %sensor_type = (
Discrete => 3,
Analog => 0,
);
# 0 - Unclassified
# 1 - Notification
# 2 - Warning
# 3 - Middle
# 4 - High
# 5 - Extreme
my @thresh_type = (
{ pri => 4, dsc => 'Lower Non-Recoverable' },
{ pri => 3, dsc => 'Lower Critical' },
{ pri => 2, dsc => 'Lower Non-Critical' },
{ pri => 2, dsc => 'Upper Non-Critical' },
{ pri => 3, dsc => 'Upper Critical' },
{ pri => 4, dsc => 'Upper Non-Recoverable' },
);
my $head = <<EOF;
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export version="1.0" date="%s" time="%s">
<hosts>
<host name="%s">
<proxy_hostid>0</proxy_hostid>
<useip>0</useip>
<dns></dns>
<ip>0.0.0.0</ip>
<port>10050</port>
<status>3</status>
<useipmi>0</useipmi>
<ipmi_ip></ipmi_ip>
<ipmi_port>623</ipmi_port>
<ipmi_authtype>0</ipmi_authtype>
<ipmi_privilege>2</ipmi_privilege>
<ipmi_username></ipmi_username>
<ipmi_password></ipmi_password>
<groups>
<group>Templates</group>
</groups>
<items>
%s
</items>
<triggers>
%s
</triggers>
<graphs>
%s
</graphs>
<templates/>
<macros/>
</host>
</hosts>
<dependencies/>
</zabbix_export>
EOF
my $item = <<EOF;
<item type="12" key="%s" value_type="%d">
<description>%s</description>
<ipmi_sensor>%s</ipmi_sensor>
<delay>$delay</delay>
<history>$history</history>
<trends>$trends</trends>
<status>0</status>
<data_type>0</data_type>
<units>%s</units>
<multiplier>0</multiplier>
<delta>0</delta>
<formula>1</formula>
<lastlogsize>0</lastlogsize>
<logtimefmt></logtimefmt>
<delay_flex></delay_flex>
<authtype>0</authtype>
<username></username>
<password></password>
<publickey></publickey>
<privatekey></privatekey>
<params></params>
<trapper_hosts></trapper_hosts>
<snmp_community></snmp_community>
<snmp_oid></snmp_oid>
<snmp_port>161</snmp_port>
<snmpv3_securityname></snmpv3_securityname>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase></snmpv3_authpassphrase>
<snmpv3_privpassphrase></snmpv3_privpassphrase>
<applications/>
</item>
EOF
my $trigger = <<EOF;
<trigger>
<description>%s</description>
<type>0</type>
<expression>%s</expression>
<url></url>
<status>0</status>
<priority>%d</priority>
<comments>%s</comments>
</trigger>
EOF
my $graph = <<EOF;
<graph name="%s" width="900" height="200">
<ymin_type>0</ymin_type>
<ymax_type>0</ymax_type>
<ymin_item_key></ymin_item_key>
<ymax_item_key></ymax_item_key>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<graphtype>0</graphtype>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_legend>0</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<graph_elements>
<graph_element item="%s">
<drawtype>$drawtype</drawtype>
<sortorder>0</sortorder>
<color>009900</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<periods_cnt>$delay</periods_cnt>
</graph_element>
</graph_elements>
</graph>
EOF
my ($tname, $items, $triggers, $graphs);
while (<>) {
chomp;
next if /^#/;
my ($template,$sensor,$type,$dsc,$unit,$lnr,$lcr,$lnc,$unc,$ucr,$unr) =
split(/\|/);
$template = "Template_$template";
$tname = $template;
my $key = sprintf("%s_%s_%s", $type, $dsc, $unit);
$key =~ s/[\s\\\/]+/_/g;
$key = sprintf("%s[%s]", $key, $sensor);
$items .= sprintf($item, $key, $sensor_type{$type},
"$type sensor for $dsc $sensor ($unit)", $sensor, $unit);
if ($type eq 'Discrete') {
$triggers .= sprintf($trigger,
"$type sensor for $dsc $sensor on {HOSTNAME} was changed",
sprintf("{%s:%s.diff(0)}#0", $template, $key), 4, '');
} elsif ($type eq 'Analog') {
my $index = -1;
my $op = '#';
foreach my $tv ($lnr,$lcr,$lnc,$unc,$ucr,$unr) {
$index++;
next if ($tv =~ /^$/);
my $td = $thresh_type[$index]->{dsc};
my $tp = $thresh_type[$index]->{pri};
$op = '<' if ($index < 3);
$op = '>' if ($index > 2);
$triggers .= sprintf($trigger,
"$type sensor for $dsc $sensor on {HOSTNAME} changed to $td",
sprintf("{%s:%s.last(0)}%s%s", $template, $key, $op, $tv), $tp, '');
}
$graphs .= sprintf($graph, "$type sensor for $dsc $sensor ($unit)",
"$template:$key");
} else {
die "unknown sensor type: $type\n";
}
}
printf($head, $date, $time, $tname, $items, $triggers, $graphs);
このコマンドを使用して
# perl /usr/local/etc/zabbix3/zabbix/externalscripts/get_ipmi.pl -H 192.168.1.100 -U ADMIN -P ADMIN | perl /usr/local/etc/zabbix3/zabbix/externalscripts/make_ipmi.pl > Supermicro_SYS-5018R_MR.xml
私はメッセージを受け取りました:
unknown sensor type: Threshold
2列目はすでに数字ではなく「しきい値」タイプだと思います。それがエラーの原因です。
ソースのこの部分を変更する方法:
my %sensor_type = (
Discrete => 3,
Analog => 0,
);
私のテキスト出力の例は?私は perl プログラマーではありません。そのため、どんな助けもいただければ幸いです。