SlideShare a Scribd company logo
Ruby で zabbix agent の
loadable module を作れる
loadable module を
C言語 + mruby で作った
Takanori Suzuki
twitter: @BlueSkyDetector
Loadable
Module
http://blog.zabbix.com/zabbix-2-2-features-part-10-support-of-loadable-modules/2379/
Zabbix 2.2から
サポートされた
機能の一つ
ライブラリファイル
追加でZabbixに
独自の新規キーを
追加できる機能
dummy.pingキーで1を返すとか
好きなキーを追加して値を返す処理を
書ける
独自の新規キーを
追加する機能といえば
UserParameter
UserParameter
と比べメリットは?
監視時に毎回外部プロ
セスを起動せず、
同じプロセスで変数な
どを再利用して動作す
るので
動作が早い
&
データをキャッシュ
しておける
作るには?
C言語などで共有ライ
ブラリ.soファイルを
作成する必要がある
zbx_module_init()…
プロセス起動時の処理
キーと紐付けた任意の関数…
監視実行時の処理
zbx_module_uninit()…
プロセス終了時の処理
実行されるコード
zabbix_agentd.conf
LoadModulePath…
モジュールのディレクトリ
LoadModule…
モジュールのファイル名
設定方法
ところでmrubyとは?
mruby = 組み込み向けruby
組み込み機器用のruby
や
アプリへ組み込めるruby
mruby = 組み込み向けruby
組み込み機器用のruby
や
アプリへ組み込めるruby
(今回はこっち)
というわけで
Github
にあります
入力をmrubyで評価
する
loadable module
を作った
https://github.com/BlueSkyDetector/mruby_module_for_zabbix_agent
mruby.string[rubyコード]
mruby.file[rubyファイル]
でrubyコードが実行
できる
mruby_module.so
$ zabbix_get -s localhost 
-k 'mruby.string[1234 * 4]'
4936.000000
とかできる
mruby_module.so
$ zabbix_get -s localhost 
-k 'mruby.file[hello.rb]'
Hello World
とかできる
mruby_module.so
mruby.file で
loadable module と
似たものを ruby
でも書ける
監視時に毎回外部プロ
セスを起動せず、
同じプロセスで変数な
どを再利用して動作す
るので
動作が早い
&
データをキャッシュ
しておける
zbx_module_init()…
プロセス起動時の処理
zbx_module_run()…
監視実行時の処理
return値が監視結果となる
zbx_module_uninit()…
プロセス終了時の処理
実行されるrubyコード
init で作成したデータは
Userdata class for mruby
で共有する。
https://github.com/matsumoto-r/mruby-userdata
実行されるrubyコード
thanks to @matsumoto-r
実行されるrubyコード
class Something
def call()
u = Userdata.new
return "hello world " + u.name + " " + u.age.to_s
end
end
def zbx_module_init()
u = Userdata.new
u.name = "test_user01"
u.age = 30
return 'init world'
end
def zbx_module_run()
return Something.new.call()
end
def zbx_module_uninit()
return 'uninit world'
end
sample.rb
$ zabbix_get -s localhost 
-k "mruby.file[sample.rb]"
hello world test_user01 30
実行されるrubyコード
デモ
(時間があれば)
Any question?

More Related Content

Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った