Checkmkでは、標準機能に加えて独自で作成したプラグインにより監視対象・監視内容を自由に拡張することができます。この記事では、Buffalo(バッファロー)の法人向けNAS:TeraStationを監視対象として「Checkmk」での独自プラグイン作成方法をご紹介します。
文:ジュピターテクノロジー とぐち
はじめに
Checkmkには公式プラグインが多数用意されていますが、もちろん対応していない機器も存在します。そういった場合は、独自に専用プラグインを開発してみましょう。
今回はBuffalo(バッファロー)TeraStationシリーズの監視についてご紹介したいと思います。
開発する前に
- TeraStationのSNMP有効化
TeraStationの監視にあたり、TeraStationのSNMP機能を有効化する必要があります。手順は以下の記事リンクより同項目を参照し、設定してください。
「バッファローTeraStationを『PRTG』でかんたん監視!」
こちらの記事では弊社監視製品PRTG Network Monitorでの監視方法をご紹介しております。今回の記事ではCheckmkのプラグイン開発を通して、同等の項目を監視していきます。
SNMP有効化が完了しましたら、次の手順へ進んでください。
- TeraStationを監視対象に追加
Buffalo TeraStationをホスト登録してください。
ホスト登録の詳細は過去の記事「【Checkmk ビギナーズガイド】(2)ネットワーク機器のSNMP監視」をご参照ください。今回は抜粋して説明します。
Hostname, IPアドレスに任意の値と、下記の設定を入力します。
・Checkmk agent/API integrations : No API integrations, no Checkmk agent
・SNMP : SNMP v2 or v3
・SNMP credentials
SNMP community (SNMP Versions 1 and 2c)
コミュニティ名はTeraStation
Save & go to service configurationボタンをクリックし、サービス取得画面へ遷移します。ここでサービスが何も取得されなかった場合は入力内容に問題がありますので、ホスト追加画面に戻り、「Save & go to connection tests」で接続テストを行い情報を修正してください。
接続が正常であれば、図2のようにSNMPエージェントが複数のサービスを候補として自動取得し表示します。ここから、必要なサービスを追加してください。例では全て追加しますので、「Fix all」ボタンをクリックします。
追加されたサービス
・CPU 使用率(CPU utilization)
・ファイルシステム使用率(fs /pass/):対象は自動で複数選出
・SNMPトラフィック(Interface 3):使用しているもののみ選出
・メモリ情報(Memory used)
・機器情報(SNMP Info)
・起動時間(Uptime)
これらは、一般的なSNMPエージェントが取得できる標準MIBの内容です。
ここにはないシステム情報やディスク情報を監視するにはプライベートMIB内容を監視しなければなりません。そのためには、Checkmkが公式サポートしているプラグインを使用するか、または独自にプラグインを作成する必要があります。
プライベートMIB監視
それでは、バッファローTeraStationのプライベートMIB内容を取得するべく、さっそくCheckmkのプラグインを作成してみましょう。
- SNMPwalkを実施する
「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
ここまでは、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に関するものを選出しています。
今回は、代表して1つ目の「TeraStation Array」をサービスとして一覧に追加する際の開発手順を説明していきます。
- プラグインを開発する
まずはプラグインの格納場所へ移動し、任意のチェック名でファイルを作成してください。ここではチェック名を「buffalo_snmp_array.py」とします。
独自プラグイン格納場所
/opt/omd/sites/mysite/local/lib/check_mk/base/plugins/agent_based
チェックファイルを作成したら、中にチェック内容を記載していきます。 以下の図4~図10までは同じファイル内に記載してください。
図4の通り必要な定義をインポートします。今回はこの2行ですが、必要なものが他にある場合は追加でインポートしてください。
図5の「register.snmp_section」ではOIDを指定していきます。
・name: プラグイン名
・detect: exists()に指定している内容は、SNMPwalkで取得したファイル1行目の機器情報のOIDです。
・fetch: 値を取得したいOIDを指定します。OIDEnd()は可変値であることを示しています。TeraStation Array(1.3.6.1.4.1.5227.27.1.3.1)の下に保持する情報(id, status, capacity, used情報)を取得するためのOIDを指定しています。
図8「discover_buffalo_snmp_array()」を記載すると、サービス取得時(サービスディスカバリー実行時)にサービスとして一覧に並びます。
図9「check_buffalo_snmp_array()」では細かいチェック内容を記載します。
「yield Result()」に記載した内容が、WebGUI上でサービス取得した際に、状態(UP/DOWN)とSummary欄に表示されます。
図10「register.check_plugin()」でCheckmkプラグインとして登録していきます。
・name:プラグイン名
・service_name:並べたいサービス名
・discovery_function:図8で作成したモジュール
・check_function:図9で作成したモジュール
プラグインの説明は以上です。編集内容を保存し、対象のプラグインに実行権限を付与してください。
<buffalo_snmp_array.py>
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)
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
register.check_plugin(
name="buffalo_snmp_array",
service_name="Custom_TeraStationArray %s",
discovery_function=discover_buffalo_snmp_array,
check_function= check_buffalo_snmp_array,
)
- サービスを再取得する
WebGUIにログインし、サービスを再取得します。
図11のように「Undecided services」欄に作成したプラグイン「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
「Fix all」ボタンをクリックし、モニター画面から見てみましょう。
追加後のモニター画面がこちらです。「Custom_xxxx」というものがプラグインで追加したサービスです。(図12、13)
- プラグインのデバッグ方法
プラグイン作成時は、Checkmkサイトユーザーに変更し、以下のコマンドでデバッグを行うことができます。太字箇所は、プラグイン名、デバイス名で読み替えて使用してください。
checkmk@checkmk:$ sudo su - mysite
OMD[mysite]:$ cmk --detect-plugins=buffalo_snmp_array.py --debug -vvnII TeraStationTS5410
正常に作成できている場合、図14のような結果が表示され、「SUCCESS」の文字を確認することができます。
デバッグ時は必ずサイトユーザーで実行してください。「cmk」コマンドはサイトユーザーで実行可能なコマンドで、「cmk」のみで実行するとヘルプが表示されますので、状況にあわせてぜひご活用ください。