mruby-zabbixとmruby-growthforecastでデバイスやアプリケーションの監視並びに情報の可視化を実現

僕は実はZABBIX-JPのスタッフでもあるので、mrubyでも優先度高めでZabbixのAPIをつつけるClassを作ってみました。

これで、mruby-grothforecastで簡単に組み込みデバイスやアプリケーションの内部情報を簡単に可視化できたり、Zabbixに対してAPI経由で監視の操作ができたり、かなり夢が広がったのではないでしょうか。

ということで、mrbgemsの使い方も兼ねて、mruby-zabbixの使い方を説明します。

インストール

まずはmrubyをダウンロードします。

[program lang=’bash’ escaped=’true’ ]

git clone git://github.com/mruby/mruby.git

[/program]

そして、mrbgemsのgemsディレクトリに移動して、必要なgemsファイルをダウンロードします。

[program lang=’bash’ escaped=’true’]

cd mruby/mrbgems/g/
git clone git://github.com/mattn/mruby-uv.git
git clone git://github.com/mattn/mruby-http.git
git clone git://github.com/mattn/mruby-json.git
git clone git://github.com/matsumoto-r/mruby-redis.git
git clone git://github.com/matsumoto-r/mruby-simplehttp.git
git clone git://github.com/matsumoto-r/mruby-httprequest.git
git clone git://github.com/matsumoto-r/mruby-growthforecast.git
git clone git://github.com/matsumoto-r/mruby-zabbix.git

[/program]

上記のgemを有効にするために、依存関係も含めて以下のようにGEMS.activeに登録します。

[program lang=’bash’ escaped=’true’]

cd mruby
cat > mrbgems/GEMS.active << EOF
mruby-json
mruby-uv
mruby-http
mruby-redis
mruby-simplehttp
mruby-httprequest
mruby-growthforecast
mruby-zabbix
EOF

[/program]

そして、rakeすると無事ビルドが完了するはずです。

[program lang=’bash’ escaped=’true’]

rake ENABLE_GEMS='true' LIBS='-luv -lpthread -ldl -lrt -lhiredis -lm'

[/program]

mrubyからZabbix2.0のAPIをつついてみる

以下のように、ZabbixのAPIをRubyで書きます。非常に簡単です。

[program lang=’ruby’ escaped=’true’]

config = {
  :url  => "http://127.0.0.1/zabbix/api_jsonrpc.php", 
  :ua   => "mruby-zabbix",
  :user => "api-admin",
  :pass => "api-admin",
}

z = Zabbix::Client.new(config)

data = {
  :method => "get",
  :object => "host",
  :params => {
               :output => "extend",
               :filter => {
                            :host    =>  "example.com",
                          },
             },
}

puts "request:  #{JSON::stringify(data)}"
puts "response: #{z.post(data)["body"]}"

[/program]

ユーザ名やパスワード、URLが間違っていない事を確認して、以下のように実行してみましょう。

[program lang=’bash’ escaped=’true’]

./bin/mruby zabbix-api-client.rb

[/program]

すると、以下のようにきちんとZabbixから結果が帰ってきていると思います。

[program lang=’json’ escaped=’true’]

request:  {"object":"host","params":{"output":"extend","filter":{"host":"example.com"}},"method":"get"}
response: {"jsonrpc":"2.0","result":[{"maintenances":[],"hostid":"10085","proxy_hostid":"0","host":"example.com","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"4","ipmi_privilege":"4","ipmi_username":"USERID","ipmi_password":"PASSW0RD","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"example"}],"id":2}

[/program]

素晴らしいですね!簡単です!

さいごに

このように、ZabbixとGrowthForecastにmrubyからアクセスできるようになったので、もはやmruby組み込みデバイスやアプリケーションからの情報の可視化は十分なのではないかと思っていたりします。

後は、ログ周りを連携できるようにFluentとの連携を少し考えてみようかなぁと思っています。

高機能mrubyウォシュレットも夢では無くなって来ました。

A-EInHqCYAEJlfo