ある日、撮り溜めていたアニメを見ようと徐ろにPS3を起動した。
Torneを起動させたら…
容量不足で録画できてない!
雪菜はどこにいってしまったの!?
というわけでgitと開発用DBぐらいにしか使ってない自宅サーバにzabbix入れて監視することにした。
環境
zabbix 2.2.1
CentOS 6.5
Apache 2.2
PHP 5.5
MySQL 5.5
Ruby 2.0.0
PHPはzabbixが要求するので必須たぶん5.3.17以上、Rubyはnasneの空き容量監視スクリプトを書くために入れた。
Zabbixのインストール
公式パッケージがあるのでそれ入れたらおわり。
長くなるのでここには書かない。ググったら出てくる。
インストール後はpingを使った死活監視やアラートの設定ぐらいはテストのためにしておくことを勧める。
容量監視の方法
nasneはSNMPを喋ってくれないし、zabbix-agentのインストールもできない。なのでzabbixが動いてるサーバからnasneのHDD容量を取得しzabbixにデータを送る方法でやる。
- nasneの死活監視をやってるならそれとは別にホストを定義する
監視するのはnasneではなくzabbixを動かしているサーバなのでnasneの死活監視をするために設定しているならそのホストとは別にlocalhostを監視するホストを設定する。
テンプレートの関連付けは必要ないしデフォルトでOK。
ホスト名はわかりやすく「nasne_storage」と言う名前にしたが自由にしてください。
(以下、容量監視用ホストを「nasne_storage」という)
↑自分の監視設定。「nasne」が死活監視用,「nasne_storage」が容量監視用。いろいろ設定したあとなのでitemとかtriggerがあるけど気にしない。
zabbix_senderから送られたデータを受け取るための設定をする
nasne_storageにitemを追加する。
使用しているパーセンテージを監視したいので以下の様な設定にしておく。
ここでポイントになるのは以下の3つ
- type: 「Zabbix trapper」にする
- key: データを送るときに使うのでタイプミスに注意
- Type of information: 小数点を含んだ数(float)を扱いたいので「Numeric(Float)」にする
間違えるとzabbix_senderでデータを送った時に失敗するので注意。
zabbix_senderでデータを送ってみる
itemが用意できたらzabbix_senderでデータを送ってみる。
zabbix_sender -z localhost.localdomain -p 10051 -s nasne_storage -k storage.usage -o 10.2
- z zabbix-serverが動いてるホスト
- p zabbix-serverの待ち受けポート(デフォルトで10051)
- s 監視対象のホスト名(WebUIで設定したもの)
- k itemのkey
- o 送る値
成功したら「Latest data」のホスト名のところに出てくるはず。
↑自分の場合は使用率だけではなく、使用容量、空き容量も受け取るようにしてある。
Graphをクリックしたらグラフも出てくる。
データを送りつけるスクリプトを書く
自分はRubyで書いた。
#!/usr/local/bin/ruby
require 'json'
require 'open-uri'NASNE_URL = 'http://<nasneのIPアドレス>/status/HDDInfoGet?id=0'
json = open(NASNE_URL).read
result = JSON.parse(json)
hdd_info = result["HDD"]
used = hdd_info['usedVolumeSize']
free = hdd_info['freeVolumeSize']
total = hdd_info['totalVolumeSize']
hdd_usage = ((used.to_f / total) *100).round(1)
system(" zabbix_sender -z localhost.localdomain -p 10051 -s nasne_storage -k storage.usage -o #{hdd_usage}")
system(" zabbix_sender -z localhost.localdomain -p 10051 -s nasne_storage -k storage.used -o #{used}")
system(" zabbix_sender -z localhost.localdomain -p 10051 -s nasne_storage -k storage.free -o #{free}")
を叩くと内臓HDDの情報がJSONで出てくるのでそれをパース、zabbix_senderを叩くだけのスクリプト。
http://<nasneのIPアドレス>/status/HDDInfoGet?id=0
送る値の種類だけitemが必要になるので作っておけばいいと思う。
これをcronで1時間に1回とか定期的に実行するようにしておくとzabbixにデータが溜まる。
送られてきたデータに対してtriggerを設定、例えば90%以上使ってるなら致命的な障害としてアラートを出すとかしておくとOKなはず。
世界に平和が訪れた!
少なくなってきてアラートが飛んできたら何かを犠牲にするかストレージ買ってくればいい。
おしまい