ZabbixのLLDでHDD温度取得登録

ZabbixのLLD(Low Level Discovery)機能を使って、SNMP(bsnmpd)経由でHDDの温度を自動的に取得する

はじめに

前回 SNMP(bsnmpd)経由でHDDの温度を取得できるようにしました。
当然、何かで監視してグラフを描いたりしたいのですが面倒なことはしたくないわけですよ。
そこで、ZabbixのLLD(Low Level Discovery)機能を使って、テンプレート突っ込んだら全部自動的に取得できるようにしてみます。

前提

どこかにZabbix 2.4が既に用意されているものとします。(適当)
前回 、これまた適当なスクリプトで生成したbsnmpdのコンフィグでは、以下のような設定がなされていますので、

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# head -20 snmp_smartctl.config
# Auto generate: smartctl -A
# ------------------------------------------
# extTable OIDs:
#   1.3.6.1.4.1.2021.8.1.1   : extIndex
#   1.3.6.1.4.1.2021.8.1.2   : extNames
#   1.3.6.1.4.1.2021.8.1.3   : extCommand
#   1.3.6.1.4.1.2021.8.1.100 : extResult
#   1.3.6.1.4.1.2021.8.1.101 : extOutput
#   1.3.6.1.4.1.2021.8.1.102 : extErrFix
#   1.3.6.1.4.1.2021.8.1.103 : extErrFixCmd
# ------------------------------------------
extNames.1   = "SMART_1_Raw_Read_Error_Rate_ada0"
extCommand.1 = "grep Raw_Read_Error_Rate /root/snmp_smartctl/ada0_smart.txt | cut -d ' ' -f 3"
extNames.2   = "SMART_2_Throughput_Performance_ada0"
extCommand.2 = "grep Throughput_Performance /root/snmp_smartctl/ada0_smart.txt | cut -d ' ' -f 3"
extNames.3   = "SMART_3_Unknown_JMF_Attribute_ada0"
extCommand.3 = "grep Unknown_JMF_Attribute /root/snmp_smartctl/ada0_smart.txt | cut -d ' ' -f 3"
extNames.4   = "SMART_5_Reallocated_Sector_Ct_ada0"
extCommand.4 = "grep Reallocated_Sector_Ct /root/snmp_smartctl/ada0_smart.txt | cut -d ' ' -f 3"
extNames.5   = "SMART_7_Unknown_JMF_Attribute_ada0"

Zabbixでは、名前となる extNames を表示名に、コマンド実行結果(標準出力)となる extOutput を値として取得できると嬉しいですね。
extNames には、頭に"SMART"が付いているので、これを正規表現で引っかけてやれば、今後extTableの情報量が増えても対処できるハズ。

では進もう。

設定

まず、 “設定 -> テンプレート” から “テンプレートの作成” を選択。

適当に名前を付けて保存します。

次に、今しがた作成した “Template SNMP Extend” の “アプリケーション” を選択。

そしてアプリケーションの作成。

名前はまぁ “S.M.A.R.T.” でいいでしょ。(ドットを含む名前を付けるべきか否かについては議論の余地があります)

ディスカバリールールに移動して、

“ディスカバリールールの作成” を選択。

ディスカバリルールの SNMP OID には "1.3.6.1.4.1.2021.8.1.2" (=extNames) を指定する。SNMPのコミュニティ名は各自の環境に合わせます。(Zabbixのデフォルトはpublicです)

Note
あ、ここではSNMPv2ですが、もちろんSNMPv3を使用した場合も同様です。

また、フィルタで取得対象をS.M.A.R.T.に関係する値だけにする。

これで、この後作成するアイテムのプロトタイプで、以下のようなデータが連番で手に入るようになります。

{#SNMPINDEX} {#SNMPVALUE}
1 SMART_1_Raw_Read_Error_Rate_ada0
2 SMART_2_Throughput_Performance_ada0
3 SMART_3_Unknown_JMF_Attribute_ada0
4 SMART_5_Reallocated_Sector_Ct_ada0

今度はアイテムのプロトタイプを作成します。

アイテムのプロトタイプ画面から “アイテムのプロトタイプの作成” を選択。

先程ディスカバリールールで取得したデータを監視アイテムの設定に使用できるので、監視対象OIDにくっつけて設定する。

できた。

1個できたら、同様に設定。(ただし、あんまり取得するつもりのないアイテムは無効にしておいた)

あとは、設定 -> ホスト -> 今回作ったNAS(ここではStorage01) を選択し、テンプレートから今しがた作成したテンプレートを適用する。

追加。

でもって更新。

これでオッケー。

確認

ローレベルディスカバリ先生がポーリングしたら、アイテムが増えるよ!やったね!

見に行くと、手作業ではきっと鬱屈となったであろうMIB登録があっさり終わっています。

ステータスフィルタをかけて有効なものだけ表示してみる。

うん、大丈夫そうだ。
監視データから最新データをグラフにしてみよう。
まずは 監視データ -> 最新データ から、HDDの温度部分だけをフィルタして表示する。

全部選択して、グラフ表示を実行。

ちゃんとグラフになった。

テンプレートの時点でグラフを作ることも出来るので、そちらであらかじめ作ってしまっても良いかもしれない。

シュバフィーンッ!

ZabbixのLLD(Low Level Discovery)機能は、今ではフィルタも使えるようになって、とっても楽でしたわー!

Hugo で構築されています。
テーマ StackJimmy によって設計されています。