【Checkmk KB】Checkmkプラグイン開発:プライベートMIB監視《バッファロー TeraStation》

 Checkmkでは、標準機能に加えて独自で作成したプラグインにより監視対象・監視内容を自由に拡張することができます。この記事では、Buffalo(バッファロー)の法人向けNAS:TeraStationを監視対象として「Checkmk」での独自プラグイン作成方法をご紹介します。

文:ジュピターテクノロジー とぐち

はじめに

Checkmkには公式プラグインが多数用意されていますが、もちろん対応していない機器も存在します。そういった場合は、独自に専用プラグインを開発してみましょう。

開発する前に

TeraStationのSNMP有効化

TeraStationの監視にあたり、TeraStationのSNMP機能を有効化する必要があります。手順は以下の記事リンクより同項目を参照し、設定してください。

「バッファローTeraStationを『PRTG』でかんたん監視!」

こちらの記事では弊社監視製品PRTG Network Monitorでの監視方法をご紹介しております。今回の記事ではCheckmkのプラグイン開発を通して、同等の項目を監視していきます。SNMP有効化が完了しましたら、次の手順へ進んでください。

TeraStationを監視対象に追加

Buffalo TeraStationをホスト登録してください。

ホスト登録の詳細は過去の記事「【Checkmk ビギナーズガイド】(2)ネットワーク機器のSNMP監視」をご参照ください。今回は抜粋して説明します。

図1

ホスト名, IPアドレスに任意の値と、下記の設定を入力します。

  • Checkmk agent/API integrations : No API integrations, no Checkmk agent
  • SNMP : SNMP v2 or v3
  • SNMP 資格情報 :SNMP community (SNMP Versions 1 and 2c)
  •          (コミュニティ名)TeraStation

[保存してサービス設定に移動]ボタンをクリックし、サービス取得画面へ遷移します。ここでサービスが何も取得されなかった場合は入力内容に問題がありますので、ホスト追加画面に戻り、[保存して接続テストに移動]ボタンから接続テストを行い情報を修正してください。

図2

接続が正常であれば、図2のようにSNMPエージェントが複数のサービスを候補として自動取得し表示します。ここから、サービス行ごとの左[+]ボタンで必要なサービスを追加してください。[Accept all]ボタンをクリックすると、全てのサービスが監視対象として追加されますので、本記事では全て追加します。

追加されたサービス

  • CPU 使用率(CPU utilization)
  • ファイルシステム使用率(fs /pass/):対象は自動で複数選出
  • SNMPトラフィック(Interface 3):使用しているもののみ選出
  • メモリ情報(Memory used)
  • 機器情報(SNMP Info)
  • 起動時間(Uptime)

これらは、一般的なSNMPエージェントが取得できる標準MIBの内容です。このリストにはないシステム情報やディスク情報を監視するにはプライベートMIB内容を監視しなければなりません。そのためには、Checkmkが公式サポートしているプラグインを使用するか、または独自にプラグインを作成する必要があります。

プライベートMIB監視

それでは、バッファローTeraStationのプライベートMIB内容を取得するべく、さっそくCheckmkのプラグインを作成してみましょう。

SNMP walkを実施する

「sudo su – サイト名」でCheckmkサイトのコマンドラインに切替え、以下のコマンドでSNMPwalkを実施します。デバイス名は、ホスト登録時に入力したデバイス名です。

コマンド例では、サイト名を「mysite」,デバイス名を「TeraStationTS5410」とします。

checkmk@checkmk:$ sudo su – mysite
OMD[mysite]:$  cmk -v — snmpwalk TeraStationTS5410

すると、図3のようなwalk結果が以下のパスにデバイス名で保存されます。各行にはOIDとその値が記載されています。

格納パス
/opt/omd/sites/mysite/var/check_mk/snmpwalks/TeraStationTS5410
図3

ここまでは、SNMPwalkをかけてこの機器について監視できるOIDのリストを取り出す作業です。監視したいOIDが含まれているか確認してください。必要なOIDが決定したら、実際にプラグインを開発していきます。

サービスに追加したいOIDは以下の通りです。

  • TeraStation Array:1.3.6.1.4.1.5227.27.1.3.1
  • TeraStationDisk:1.3.6.1.4.1.5227.27.1.2.1
  • nas error index:1.3.6.1.4.1.5227.27.1.4.1.1
  • nas information index:1.3.6.1.4.1.5227.27.1.5.1.1

これらは、「バッファローTeraStationを『PRTG』でかんたん監視!」の記事で紹介している中からプライベートMIBに関するものを選出しています。

今回はこの4項目のなかから、1つ目の「TeraStation Array」をサービスとして一覧に追加する際の開発手順を説明していきます。

プラグインを開発する

まずはプラグインの格納場所へ移動し、任意のチェック名でファイルを作成してください。本記事では、チェック名を「buffalo_snmp_array.py」とします。

独自プラグイン格納パス
/opt/omd/sites/mysite/local/lib/check_mk/base/plugins/agent_based

ファイルを作成したら、中にチェック内容を記載していきます。以下の図4~10までは同じファイル内に記載してください。

図4

図4は必要な定義のインポート文です。今回はこの2行ですが、必要なものが他にある場合は適宜追加してください。

図5

図5の「register.snmp_section」では監視したいOIDを指定していきます。

  • name:プラグイン名
  • detect:exists()に指定している内容は、SNMPwalkで取得してファイル1行目の機器情報OID
  • fetch:値を取得していOIDを指定。OIDEnd()は可変値であることを示しています。
  •     TeraStationAray(1.3.6.1.4.1.5227.27.1.3.1)の下に保持する情報(id, status, capacity, used情報)を取得するためのOIDも記載していきます。
図6

図6「parse_buffalo_snmp_array()」ではテーブルに値を入れ、print()で表示しています。print()の行は、値が取れているかどうかデバッグ用にWebGUIのコンソール上で確認するためのもので、サービス取得画面に表示されます。(図7)

不要であればこの記載は必要ありません。

図7

図8「discover_buffalo_snmp_array()」を記載すると、サービス取得時(サービスディスカバリー実行時)にサービスとして一覧に並びます。

図8

図9「check_buffalo_snmp_array()」では細かいチェック内容を記載します。

「yield Ressult()」に記載した内容が、WebGUI上でサービス取得した際に、状態(UP/DOWN)としてSummary欄に表示されます。

図9

図10「register.check_plugin()」でCheckmkプラグインとして登録していきます。

  • name:プラグイン名
  • service_name:並べたいサービス名 
  • discovery_function:図8で作成したモジュール
  • check_function:図9で作成したモジュール
図10

プラグインの説明は以上です。編集内容を保存し、対象のプラグインに実行権限を付与してください。参考までに、プラグインのコピーを以下に記載しておきます。

from cmk.base.plugins.agent_based.agent_based_api.v1 import *
from pprint import pprint

def parse_buffalo_snmp_array(string_table):
  section = []
  for line in string_table:
      id = int(line[0])
      if id != 0:
          section.append(line)

  print ("--", string_table, "--")
  return section


register.snmp_section(
  name = "buffalo_snmp_array",
  detect = exists(".1.3.6.1.2.1.1.1.0"),
  parse_function=parse_buffalo_snmp_array,
  fetch = SNMPTree(
    base = '.1.3.6.1.4.1.5227.27.1.3.1',
    oids = [
      OIDEnd(), #id
      '2', #nas array status
      '3', #nas array capacity
      '4', #nas array used
      ],
     ),
  )


def discover_buffalo_snmp_array(section):
    for line in section:
        yield Service(item=line[0])


def check_buffalo_snmp_array(item, section):
    for id, status, capacity, used in section:
        if id == item:
            capacity = int(capacity)
            used = int(used)

#            yield Metric("util", used)

            if status == "-1":
                s = State.CRIT
                text = "Not Support"
                capacity = "0"
                used = "0"
            else:
                s = State.OK
                if status == "1":
                    text = "off"
                    capacity = "0"
                    used = "0"
                elif status == "2":
                    text = "RAID 0"
                elif status == "3":
                    text = "RAID 1"
                elif status == "4":
                    text = "RAID 5"
                elif status == "5":
                    text = "RAID 6"
                elif status == "6":
                    text = "RAID 10"
                elif status == "7":
                    text = "RAID 50"
                elif status == "8":
                    text = "RAID 51"
                elif status == "9":
                    text = "RAID 60"
                elif status == "10":
                    text = "RAID 61"

            yield Result(state = s, summary = f"{text}, Capacity:{capacity} GB, {used}% used")
            return

#        yield Result(state=State.WARN, summary = f"Capacity is {capacity}")
#        yield Result(state=state.OK, summary = f"Used is {used}")

#        if status == "2":
#             yield Result(state=State.OK, summary="OK!")
#        else:
#             yield Result(state=State.CRIT, summary="CRIT!")


register.check_plugin(
        name="buffalo_snmp_array",
        service_name="Custom_TeraStationArray %s",
        discovery_function=discover_buffalo_snmp_array,
        check_function= check_buffalo_snmp_array,
        )

サービスを再取得する

図11

WebGUIにログインし、サービスを再取得します。図11のように、未登録のサービス欄に作成したプラグイン「buffalo_snmp_array.py」から作られたサービス「Custom_TeraStationArray1」「Custom_TeraStationArray2」が取得できていることがわかります。

同じく、Array以外のOIDもプラグインを作成しているのでサービスが取得できました。

  • TeraStation Array:1.3.6.1.4.1.5227.27.1.3.1
  • TeraStationDisk:1.3.6.1.4.1.5227.27.1.2.1
  • nas error index:1.3.6.1.4.1.5227.27.1.4.1.1
  • nas information index:1.3.6.1.4.1.5227.27.1.5.1.1

[Accept all]ボタンをクリックして全てのサービスを監視対象として追加し、モニター画面から確認してみましょう。

追加後のモニター画面がこちらです。「Custom_xxxx」というサービスが、今回作成したプラグインで追加できたサービスとなります。(図12, 13)

図12
図13

プラグインのデバッグ方法

プラグイン作成時は、Checkmkサイトユーザーに変更し、以下のコマンドでデバッグを行うことができます。太字箇所は、プラグイン名、デバイス名で読み替えて使用してください。

checkmk@checkmk:$ sudo su – mysite
OMD[mysite]:$  cmk –detect-plugins=buffalo_snmp_array.py –debug -vvnII TeraStationTS5410

正常に作成できている場合、図14のような結果が表示され、「SUCCESS」の文字を確認することができます。

図14

エラーの場合は図15のような結果が表示されるため、最後の行を確認し、ソースファイルを再編集してください。

図15

デバッグ時は必ずサイトユーザーで実行してください。「cmk」コマンドはサイトユーザーで実行可能なコマンドで、「cmk」だけで実行するとへルプが表示されますので、状況に合わせてご活用ください。

お問い合わせ

Checkmkにご興味のある方は、以下リンクよりいつでも弊社までお問い合わせください。

30日間無償でご利用いただける評価版も以下のダウンロードリンクにご用意しております。簡単に検証ができますので、ぜひお試しください。

こんな記事も読まれています

最新記事

おすすめ記事

  1. 産業スパイを発見し、防ぐ方法とは

  2. Flexible NetFlowとは?を5分で理解する

  3. WinSyslog 使い方ガイド#2 受信時刻とデバイスタイムスタンプ両方を出力する

製品カテゴリー

JTC IT用語集
TOP