次期プラグインシステム構想
TIME rest time current/total
TopicsPlaceHolder

次期プラグインシステム構想

Mackerel drinkup #3

Dec 14th, 2016

ソーシャルシェアOKです

ハッシュタグ: #mackerelio

Profile

songmu

【宣伝】みんなのGo言語という本を書きました

はてなデベロッパーアドベントカレンダー

Mackerel Advent Calendar 2016

次期プラグインシステム構想

今後のプラグインシステムに関する前提

現状のmackerel-agentのプラグインシステム

おさらい

プラグイン自体は単なるコマンド

メトリックプラグインとチェックプラグインがある

メトリックプラグインを実行してみる

sensuのメトリックプラグイン互換の出力

$ mackerel-plugin-memcached
memcached.evictions.evictions   0.000000        1481707889
memcached.unfetched.expired_unfetched   0.000000        1481707889
memcached.unfetched.evicted_unfetched   0.000000        1481707889
memcached.cachesize.limit_maxbytes      67108864.000000 1481707889
memcached.cachesize.bytes       0       1481707889
memcached.connections.curr_connections  15.000000       1481707889
memcached.cmd.cmd_get   0.000000        1481707889
memcached.cmd.cmd_set   0.000000        1481707889
memcached.cmd.cmd_flush 0.000000        1481707889
memcached.cmd.cmd_touch 0.000000        1481707889
memcached.hitmiss.get_hits      0.000000        1481707889
memcached.hitmiss.get_misses    0.000000        1481707889
memcached.hitmiss.delete_hits   0.000000        1481707889
memcached.hitmiss.delete_misses 0.000000        1481707889
memcached.hitmiss.incr_hits     0.000000        1481707889
memcached.hitmiss.incr_misses   0.000000        1481707889
memcached.hitmiss.cas_hits      0.000000        1481707889
memcached.hitmiss.cas_misses    0.000000        1481707889
memcached.hitmiss.touch_hits    0.000000        1481707889
memcached.hitmiss.touch_misses  0.000000        1481707889
memcached.rusage.rusage_user    0.004140        1481707889
memcached.rusage.rusage_system  0.009150        1481707889
memcached.bytes.bytes_read      180.000000      1481707889
memcached.bytes.bytes_written   39840.000000    1481707889
memcached.items.curr_items      0       1481707889
memcached.items.new_items       0.000000        1481707889

メトリックプラグイン(グラフ定義)

環境変数 MACKEREL_AGENT_PLUGIN_META がセットされていたら、グラフ定義が出力される。(Mackerel独自フォーマット)

$ MACKEREL_AGENT_PLUGIN_META=1 mackerel-plugin-memcached
# mackerel-agent-plugin
{"graphs":{"memcached.bytes":{"label":"Memcached Traffics","unit":"bytes","metrics":[{"name":"bytes_read","label":"Read","stacked":false},{"name":"bytes_written","label":"Write","stacked":false}]},"memcached.cachesize":{"label":"Memcached Cache Size","unit":"bytes","metrics":[{"name":"limit_maxbytes","label":"Total","stacked":false},{"name":"bytes","label":"Used","stacked":false}]},"memcached.cmd":{"label":"Memcached Command","unit":"integer","metrics":[{"name":"cmd_get","label":"Get","stacked":false},{"name":"cmd_set","label":"Set","stacked":false},{"name":"cmd_flush","label":"Flush","stacked":false},{"name":"cmd_touch","label":"Touch","stacked":false}]},"memcached.connections":{"label":"Memcached Connections","unit":"integer","metrics":[{"name":"curr_connections","label":"Connections","stacked":false}]},"memcached.evictions":{"label":"Memcached Evictions","unit":"integer","metrics":[{"name":"evictions","label":"Evictions","stacked":false}]},"memcached.hitmiss":{"label":"Memcached Hits/Misses","unit":"integer","metrics":[{"name":"get_hits","label":"Get Hits","stacked":false},{"name":"get_misses","label":"Get Misses","stacked":false},{"name":"delete_hits","label":"Delete Hits","stacked":false},{"name":"delete_misses","label":"Delete Misses","stacked":false},{"name":"incr_hits","label":"Incr Hits","stacked":false},{"name":"incr_misses","label":"Incr Misses","stacked":false},{"name":"cas_hits","label":"Cas Hits","stacked":false},{"name":"cas_misses","label":"Cas Misses","stacked":false},{"name":"touch_hits","label":"Touch Hits","stacked":false},{"name":"touch_misses","label":"Touch Misses","stacked":false}]},"memcached.items":{"label":"Memcached Items","unit":"integer","metrics":[{"name":"curr_items","label":"Current Items","stacked":false},{"name":"new_items","label":"New Items","stacked":false}]},"memcached.rusage":{"label":"Memcached Resouce Usage","unit":"float","metrics":[{"name":"rusage_user","label":"User","stacked":false},{"name":"rusage_system","label":"System","stacked":false}]},"memcached.unfetched":{"label":"Memcached Unfetched","unit":"integer","metrics":[{"name":"expired_unfetched","label":"Expired unfetched","stacked":false},{"name":"evicted_unfetched","label":"Evicted unfetched","stacked":false}]}}}

メトリックプラグインの設定

[plugin.metrics.memcached]
command = "/path/to/mackerel-plugin-memcached"

チェックプラグインを実行してみる

Nagios/Sensu check/Consul check などと互換。コマンドの終了コードで状態を観測

$ check-procs -p crond
Procs OK: Found 1 matching processes; cmd /crond/

チェックプラグインの設定

[plugin.checks.crond]
command = "check-procs -p crond"
max_check_attempts = 3 // optional
check_interval = 5     // optional

公式プラグインはGoで書かれている

OSSとして提供。社外からのコントリビュートも受け付けている

ここまでおさらい

現状の課題

バイナリサイズ問題

go-mackerel-plugin-helper使いづらい問題

go-mackerel-plugin を整備しなおました

中央リポジトリへのコントリビュート問題

過去のSensuと同じ問題を抱えるようになった

公式以外のプラグイン情報が散逸している問題

公式以外の有用なプラグイン

解決構想

その他構想

以上