cacti でローカルサーバの監視

全然つかいこなせないです(;>_<;)

ローカル環境をスクリプトで監視する場合,

  1. Data Input Methods へ監視に使う Data Input Method(Script/Command)を登録する
  2. Data Sources に様々な Data Input Method を指定した Data Source を登録する
  3. Graph Management で様々な Data Source を利用した Graph を登録する

で,

  • 2: Data Source のテンプレートとして Data Templates を作れる
  • 3: Graph のテンプレートとして Graph Template を作れる

テンプレートとは,Data Input Method の引数やその他の変数などを外部化することができるものなんですが,後々の取り回しを考えると,外部変数がなかったとしてもとりあえずテンプレートとして登録しておくのが吉*1

遊びで CPU load average を監視するスクリプトLua で書いてみました。ほんとは loadavg_multi.pl というスクリプトが添付しますが Perl てのも大げさかなと思い Lua で書いてみるのです。

#!/usr/bin/lua

f = io.open('/proc/loadavg', 'r')
s = f:read('*a')
f:close()

for v1, v2, v3 \\
in string.gmatch(s, '([%d.]+)%s+([%d.]+)%s+([%d.]+)') do
    la1, la5, la15 = v1, v2, v3
    break
end

io.stdout:write( \\
  string.format('1min:%s 5min:%s 15min:%s', \\
      la1, la5, la15 \\
  ) \\
)

ほんとは「\\」なんて使えないんですが適宜改行は除いて考えてくださいね。

print() を使うと勝手に最後に改行が入るので,io.stdout:write() を使っています。このように RRDTool で収集するデータは最後の改行はつけちゃいけないらしいです*2

cacti をローカルで使う分には RRDTool のいいフロントエンドなんですが,やっぱり煩雑な印象。それだけ RRDTool が複雑というか奥が深いというか…

*1:既存の Data Source / Graph からテンプレートを作ることもできますが

*2:実際のところどうなのかは検証してません