差分
この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
management:centreon:hddtemp:start [2011/03/15 15:36] yuki |
management:centreon:hddtemp:start [2021/09/04 20:44] yuki 削除 |
||
---|---|---|---|
ライン 16: | ライン 16: | ||
- CentreonのWebUIでcommandを登録。 | - CentreonのWebUIでcommandを登録。 | ||
- 同様に監視対象となるホストを選択して、Servicesを登録。 | - 同様に監視対象となるホストを選択して、Servicesを登録。 | ||
- | - 終わり。 | + | - Nagios再起動して終わり。 |
===== 詳細 ===== | ===== 詳細 ===== | ||
- | * まずextend機能を使用してMIB値を登録する。 | + | ==== 1.SNMPのextend機能を使用して、MIB値の登録 ==== |
- | * 以下のスクリプトを実行可能な形で作成 | + | |
- | * <code>#!/bin/sh | + | * 以下のスクリプトを実行可能な形で作成 |
+ | * <code>#!/bin/sh | ||
for dev in `ls -t /dev/* | awk '/(ad|da)[0-9]+$/ {print $1}'`; do | for dev in `ls -t /dev/* | awk '/(ad|da)[0-9]+$/ {print $1}'`; do | ||
case $1 in | case $1 in | ||
name) echo $dev;; | name) echo $dev;; | ||
- | temprature) smartctl -A $dev | awk '$1=="194" {print $10}';; | + | temprature) /usr/local/sbin/smartctl -A $dev | awk '$1=="194" {print $10}';; |
esac | esac | ||
done</code> | done</code> | ||
- | * snmpd.confにextend行を記載(今回は最終行に2行追加)。 | + | * snmpd.confにextend行を記載(今回は最終行に2行追加)。 |
- | * <code># cat snmpd.conf | tail -2 | + | * <code># cat snmpd.conf | tail -2 |
- | extend ataDevice /usr/local/share/snmp/ata_device_temperature.sh name | + | extend ataDevice /usr/local/share/snmp/ata_device_temprature.sh name |
- | extend ataDeviceTemperature /usr/local/share/snmp/ata_device_temperature.sh temprature</code> | + | extend ataDeviceTemperature /usr/local/share/snmp/ata_device_temprature.sh temprature</code> |
- | * snmpdの再起動 | + | * snmpdの再起動 |
- | * <code># /usr/local/etc/rc.d/snmpd restart</code> | + | * <code># /usr/local/etc/rc.d/snmpd restart</code> |
+ | |||
+ | ==== 2.MIB値の確認 ==== | ||
- | * MIB値の確認 | + | * nsExtensionsは1.3.6.1.4.1.8072.1.3なので、snmpwalkで一通り見てみる。 |
- | * nsExtensionsは1.3.6.1.4.1.8072.1.3なので、snmpwalkで一通り見てみる。 | + | * http://www.oidview.com/mibs/8072/NET-SNMP-AGENT-MIB.html |
- | * http://www.oidview.com/mibs/8072/NET-SNMP-AGENT-MIB.html | + | * コマンド結果を一部抜粋 |
- | * snmpwalk -v 1 -c private 127.0.0.1 .1.3.6.1.4.1.8072.1.3 | + | * <code># snmpwalk -v 1 -c private 127.0.0.1 .1.3.6.1.4.1.8072.1.3 |
- | * 一部抜粋 | + | NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ataDevice" = INTEGER: 4 |
- | * <code>NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ataDevice" = INTEGER: 4 | + | |
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ataDeviceTemperature" = INTEGER: 4 | NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ataDeviceTemperature" = INTEGER: 4 | ||
NET-SNMP-EXTEND-MIB::nsExtendResult."ataDevice" = INTEGER: 0 | NET-SNMP-EXTEND-MIB::nsExtendResult."ataDevice" = INTEGER: 0 | ||
ライン 55: | ライン 57: | ||
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ataDeviceTemperature".3 = STRING: 33 | NET-SNMP-EXTEND-MIB::nsExtendOutLine."ataDeviceTemperature".3 = STRING: 33 | ||
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ataDeviceTemperature".4 = STRING: 34</code> | NET-SNMP-EXTEND-MIB::nsExtendOutLine."ataDeviceTemperature".4 = STRING: 34</code> | ||
- | * 値にシェルスクリプトのエラー値が入っている場合は、スクリプトを見直します。 | + | * 値にシェルスクリプトのエラー値が入っている場合は、スクリプトを見直します。 |
+ | * その後、-Onオプションを付与してOIDを数値形式で出力し、Centreon用のスクリプトに記載します。 | ||
+ | * <code># snmpwalk -v 1 -On -c private 127.0.0.1 .1.3.6.1.4.1.8072.1.3</code> | ||
- | * Centreon用のシェルスクリプト作成 | + | ==== 3.Centreon用のシェルスクリプト作成 ==== |
- | * 参考文献 | + | |
- | * http://nagiosplug.sourceforge.net/developer-guidelines.html | + | * 参考文献 |
- | * http://junrei.dip.jp/wordpress/nagios/nagios%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3/ | + | * http://nagiosplug.sourceforge.net/developer-guidelines.html |
- | * エラー処理等は他のプラグインの書き方を真似ているので、部分的に晒しあげ。 | + | * http://junrei.dip.jp/wordpress/nagios/nagios%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3/ |
- | * <code>#!/usr/bin/perl -w | + | * 端的に、以下の2点が守られていればとりあえず機能する。 |
+ | * スクリプトの戻り値が、下記のいずれかであること | ||
+ | * <code>0(=OK), 1(=WARNING), 2(=CRITICAL), 3(=UNKNOWN), 4(=DEPENDENT)</code> | ||
+ | * スクリプトのstdout(ようするにprintの出力)が、以下の形式であること | ||
+ | * <code>ぶんしょー | こんぽーねんと=値</code> | ||
+ | * 「ぶんしょー」部分は、画面出力に使用するだけ。自由に設定。 | ||
+ | * パイプの後ろ側はグラフを描画するときに使用。グラフの要素名=値となるように記述。複数ある場合は半角スペースで区切る。 | ||
+ | * 今回作成したスクリプト | ||
+ | * <code># cat check_snmp_hddtemp.pl | ||
+ | #!/usr/bin/perl -w | ||
################################################################# | ################################################################# | ||
# | # | ||
ライン 76: | ライン 89: | ||
# Net-snmp hddtemp | # Net-snmp hddtemp | ||
+ | # ここは人によりけりだと思うので、自分で調べる。 | ||
+ | # 今思ったけど、tempratureの略をtempにしたのはアレだなぁ。 | ||
my $hddtemp_lines = ".1.3.6.1.4.1.8072.1.3.2.3.1.3.9.97.116.97.68.101.118.105.99.101"; | my $hddtemp_lines = ".1.3.6.1.4.1.8072.1.3.2.3.1.3.9.97.116.97.68.101.118.105.99.101"; | ||
my $hddtemp_name = ".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.97.116.97.68.101.118.105.99.101"; | my $hddtemp_name = ".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.97.116.97.68.101.118.105.99.101"; | ||
ライン 93: | ライン 108: | ||
my $o_timeout= undef; # Timeout (Default 5) | my $o_timeout= undef; # Timeout (Default 5) | ||
my $o_version2= undef; # use snmp v2c | my $o_version2= undef; # use snmp v2c | ||
+ | |||
+ | sub print_usage { | ||
+ | print "Usage: $0 [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) [-p <port>] -w <warn level> -c <crit level> [-f] [-t <timeout>] [-V]\n"; | ||
+ | } | ||
sub help { | sub help { | ||
print "\nSNMP S.M.A.R.T. Temprature Monrotr for Nagios version ",$Version,"\n"; | print "\nSNMP S.M.A.R.T. Temprature Monrotr for Nagios version ",$Version,"\n"; | ||
print "(c)2011 ainoniwa.net\n\n"; | print "(c)2011 ainoniwa.net\n\n"; | ||
- | print_usage(); | + | print_usage; |
print <<EOT; | print <<EOT; | ||
-h, --help | -h, --help | ||
ライン 109: | ライン 128: | ||
-P, --port=PORT | -P, --port=PORT | ||
SNMP port (Default 161) | SNMP port (Default 161) | ||
- | -w, --warn=INTEGER | INT,INT | + | -w, --warn=INTEGER |
- | warning level for memory in percent (0 for no checks) | + | warning level for temprature |
- | Default (-N switch) : comma separated level for Real Memory and Swap | + | -c, --crit=INTEGER |
- | -I switch : warning level | + | critical level for temprature |
- | -c, --crit=INTEGER | INT,INT | + | |
- | critical level for memory in percent (0 for no checks) | + | |
- | Default (-N switch) : comma separated level for Real Memory and Swap | + | |
- | -I switch : critical level | + | |
-f, --perfdata | -f, --perfdata | ||
Performance data output | Performance data output | ||
ライン 124: | ライン 139: | ||
prints version number | prints version number | ||
EOT | EOT | ||
+ | } | ||
+ | |||
+ | sub isnnum { | ||
+ | my $num = shift; | ||
+ | if ( $num =~ /^(\d+\.?\d*)|(^\.\d+)$/ ) { return 0 ;} | ||
+ | return 1; | ||
} | } | ||
sub check_options { | sub check_options { | ||
- | Getopt::Long::Configure ("bundling"); | + | Getopt::Long::Configure ("bundling"); |
- | GetOptions( | + | GetOptions( |
- | 'h' => \$o_help, 'help' => \$o_help, | + | 'h' => \$o_help, 'help' => \$o_help, |
- | 'H:s' => \$o_host, 'hostname:s' => \$o_host, | + | 'H:s' => \$o_host, 'hostname:s' => \$o_host, |
- | 'p:i' => \$o_port, 'port:i' => \$o_port, | + | 'p:i' => \$o_port, 'port:i' => \$o_port, |
- | 'C:s' => \$o_community, 'community:s' => \$o_community, | + | 'C:s' => \$o_community, 'community:s' => \$o_community, |
- | 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, | + | 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, |
- | 'V' => \$o_version, 'version' => \$o_version, | + | 'V' => \$o_version, 'version' => \$o_version, |
- | 'f' => \$o_perf, 'perfdata' => \$o_perf, | + | 'f' => \$o_perf, 'perfdata' => \$o_perf, |
- | '2' => \$o_version2, 'v2c' => \$o_version2, | + | '2' => \$o_version2, 'v2c' => \$o_version2, |
- | 'c:s' => \$o_crit, 'critical:s' => \$o_crit, | + | 'c:s' => \$o_crit, 'critical:s' => \$o_crit, |
- | 'w:s' => \$o_warn, 'warn:s' => \$o_warn, | + | 'w:s' => \$o_warn, 'warn:s' => \$o_warn, |
- | ); | + | ); |
+ | if ( defined($o_help) ) | ||
+ | { help(); exit $ERRORS{"UNKNOWN"}}; | ||
+ | if ( defined($o_version)) | ||
+ | { p_version(); exit $ERRORS{"UNKNOWN"}}; | ||
+ | if (!defined($o_host) ) | ||
+ | { print "No host defined!\n";print_usage(); exit $ERRORS{"UNKNOWN"}} | ||
+ | if (!defined($o_community)) | ||
+ | { print "Put snmp login info!\n";print_usage(); exit $ERRORS{"UNKNOWN"}} | ||
+ | if ( ! defined($o_warn) || ! defined($o_crit)) | ||
+ | { print "Put warning and critical values!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} | ||
+ | if ( isnnum($o_warn) || isnnum($o_crit)) | ||
+ | { print "Numeric value for warning or critical !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} | ||
+ | if ($o_warn > $o_crit) | ||
+ | { print "warning <= critical ! \n"; print_usage(); exit $ERRORS{"UNKNOWN"}} | ||
+ | if (!defined($o_timeout)) {$o_timeout=5;} | ||
} | } | ||
ライン 146: | ライン 182: | ||
# Connect to host | # Connect to host | ||
my ($session,$error); | my ($session,$error); | ||
- | if (defined ($o_version2)) { | + | if (defined ($o_version2)) { |
- | # SNMPv2 Login | + | # SNMPv2 Login |
- | ($session, $error) = Net::SNMP->session( | + | ($session, $error) = Net::SNMP->session( |
- | -hostname => $o_host, | + | -hostname => $o_host, |
- | -version => 2, | + | -version => 2, |
- | -community => $o_community, | + | -community => $o_community, |
- | -port => $o_port, | + | -port => $o_port, |
- | -timeout => $o_timeout | + | -timeout => $o_timeout |
- | ); | + | ); |
- | } else { | + | } else { |
- | # SNMPV1 login | + | # SNMPV1 login |
- | ($session, $error) = Net::SNMP->session( | + | ($session, $error) = Net::SNMP->session( |
- | -hostname => $o_host, | + | -hostname => $o_host, |
- | -community => $o_community, | + | -community => $o_community, |
- | -port => $o_port, | + | -port => $o_port, |
- | -timeout => $o_timeout | + | -timeout => $o_timeout |
- | ); | + | ); |
- | } | + | |
} | } | ||
if (!defined($session)) { | if (!defined($session)) { | ||
ライン 233: | ライン 268: | ||
exit $ERRORS{$n_status};</code> | exit $ERRORS{$n_status};</code> | ||
+ | * CentreonにCommand登録する前に、手元で動作確認しておいたほうがいいよ。 | ||
+ | * <code>./check_snmp_hddtemp.pl -H 127.0.0.1 -C private -w 46 -c 50 -f</code> | ||
+ | |||
+ | ==== 4.CentreonにCommandの登録 ==== | ||
+ | |||
+ | * 言葉だけ。 | ||
+ | * Configuration -> Commands -> Add | ||
+ | * Command Name(自由に) | ||
+ | * <code>hddtemp</code> | ||
+ | * Command Line(動作確認用のコマンドと同じになるように) | ||
+ | * <code>$USER1$/check_snmp_hddtemp.pl -H $HOSTADDRESS$ -C $USER2$ -w $ARG1$ -c $ARG2$ -f</code> | ||
+ | * $USER1$,$USER2$は、Configure -> Nagios -> resourcesに設定されてる。 | ||
+ | * $HOSTADDRESS$は、Centreonの設定項目から自動的に引っ張ってくる。 | ||
+ | * 異なるホストを監視するのに、Command2つ作るのは面倒でゲソ。 | ||
+ | * $ARG1$,$ARG2$は、下記のArgument Exampleに示す値を、Services設定時に入れる。 | ||
+ | * 監視ホストによって値を変えたくなるでゲソ? | ||
+ | * Argument Example | ||
+ | * 空でもいいけど、$ARGn$に入る値の書き方を示すので書いていたほうがいい。 | ||
+ | * "!"で区切って、順次$ARGn$($ARG1$,$ARG2$...)に代入されるよ。 | ||
+ | * <code>!46!50</code> | ||
+ | * $HOSTADDRESS$ | ||
+ | * 空でいい | ||
+ | * Command Type | ||
+ | * とりあえず"Check" | ||
+ | * Graph template | ||
+ | * 空でいい | ||
+ | |||
+ | ==== 5.Centreonに監視Servicesの登録 ==== | ||
+ | |||
+ | * Configuration -> Services -> Add | ||
+ | * Description : 適当な名前 | ||
+ | * Service Template : generic-service | ||
+ | * 別にこれでなくてもいいけど。 | ||
+ | * Check Command : hddtemp | ||
+ | * さっき作った名前 | ||
+ | * Args : 青い矢印クリック | ||
+ | * さっき作った"!46!50"が入力されるよ。 | ||
+ | * Relations(上のタブにあるでゲソ) | ||
+ | * Linked with Hosts : 対象ホストを選択してAdd | ||
+ | * Saveして終わり。 | ||
+ | |||
+ | ==== 6.Nagiosの再起動 ==== | ||
+ | |||
+ | * Configuration -> Nagios | ||
+ | * 下記2つにチェックを追加して、"Export" | ||
+ | * Move Export Files | ||
+ | * Restart Nagios | ||
+ | |||
+ | ==== 7.動いてる図 ==== | ||
+ | |||
+ | {{:image:centreon:centreon_hddtemp_02.png|}} | ||