差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
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|}}
  
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0