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 @matsu...
実行されるrubyコード
class Something
def call()
u = Userdata.new
return "hello world " + u.name + " " + u.age.to_s
end
end
def zbx...
$ zabbix_get -s localhost 
-k "mruby.file[sample.rb]"
hello world test_user01 30
実行されるrubyコード
デモ
(時間があれば)
Any question?
Upcoming SlideShare
Loading in …5
×

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

2,163 views

Published on

[mruby embedded loadable module for zabbix agent]
https://github.com/BlueSkyDetector/mruby_module_for_zabbix_agent
で作ったものの説明。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,163
On SlideShare
0
From Embeds
0
Number of Embeds
110
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×