Permalink: 2015-09-03 01:05:00+09:00 by ruy@ainoniwa.net in technical tags: freebsd zabbix zabbix_lld snmp smartctl social:

はじめに

前回 SNMP(bsnmpd)経由でHDDの温度を取得できるようにしました。

当然、何かで監視してグラフを描いたりしたいのですが面倒なことはしたくないわけですよ。

そこで、ZabbixのLLD(Low Level Discovery)機能を使って、テンプレート突っ込んだら全部自動的に取得できるようにしてみます。

前提

どこかにZabbix 2.4が既に用意されているものとします。(適当)

前回 、これまた適当なスクリプトで生成したbsnmpdのコンフィグでは、以下のような設定がなされていますので、:

# 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の情報量が増えても対処できるハズ。

では進もう。

設定

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

0903a_zabbix_lld_exttable_001.png

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

0903a_zabbix_lld_exttable_002.png

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

0903a_zabbix_lld_exttable_003.png

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

0903a_zabbix_lld_exttable_004.png

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

0903a_zabbix_lld_exttable_005.png

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

0903a_zabbix_lld_exttable_006.png

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

0903a_zabbix_lld_exttable_007.png

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

0903a_zabbix_lld_exttable_008.png

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

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

0903a_zabbix_lld_exttable_009.png

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

{#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
... ...

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

0903a_zabbix_lld_exttable_010.png

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

0903a_zabbix_lld_exttable_011.png

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

0903a_zabbix_lld_exttable_012.png

できた。

0903a_zabbix_lld_exttable_013.png

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

0903a_zabbix_lld_exttable_014.png

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

0903a_zabbix_lld_exttable_015.png

追加。

0903a_zabbix_lld_exttable_016.png

でもって更新。

0903a_zabbix_lld_exttable_017.png

これでオッケー。

0903a_zabbix_lld_exttable_018.png

確認

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

0903a_zabbix_lld_exttable_019.png

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

0903a_zabbix_lld_exttable_020.png

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

0903a_zabbix_lld_exttable_021.png

うん、大丈夫そうだ。

監視データから最新データをグラフにしてみよう。

まずは "監視データ -> 最新データ" から、HDDの温度部分だけをフィルタして表示する。

0903a_zabbix_lld_exttable_022.png

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

0903a_zabbix_lld_exttable_023.png

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

0903a_zabbix_lld_exttable_024.png

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

シュバフィーンッ!

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