MacOSX(Tiger) with cactiでMemoryUsageを表示する

cactiを入れてみましたが、気になるMemoryUsageが表示されませんでした。これはcactiのデフォルトで入っているlinux_memory.plが内部で使っている/proc/meminfoがMacOSXにはないためです。

FreeBSDではlinuxエミュレーションを使って回避する方法があるようで、MacOSXでもそれが使えるかな?と思いましたが、Forum(Load average, memory usage templates for Mac OSXS?)にvm_statコマンドを利用して表示する方法が投稿されていたのでこれを使うことにしました。

ちなみにvm_statをたたくとこんな感じで表示されます。(Memory1.2GB搭載iBook)

# vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                   169542.
Pages active:                  33859.
Pages inactive:                96057.
Pages wired down:              28222.
"Translation faults":       28520287.
Pages copy-on-write:         2736519.
Pages zero filled:           9521282.
Pages reactivated:                 0.
Pageins:                       30706.
Pageouts:                          0.
Object cache: 411538 hits of 874418 lookups (47% hit rate)

さて、さきほどのforumのスレッドにはperlのスクリプトが載っているだけで、表示するグラフをどうやって変更するかはまったく書いていませんでした。いろいろ設定があってわけかかめなのでまずはcactiのグラフ構成を調べてみました。

トップダウンでたどると

  • cactiは複数のDevice(host)をもてます
  • 各Deviceは複数のGraphをもてます
  • 一つのGraphは表示するためのGraph TemplateとデータのData Sourceを一つずつ持ちます
  • つまりcactiではViewとDataをそれぞれ別々に管理することができます
  • Data Sourceのデータ(ログ)そのものであり、残すデータの構成はData Templateで作成します
  • Graph TemplateはData Templateに依存します
  • Data TemplateはDate Input Methodsをどう使うかを定義します
  • Data Input Methodsはその名の通り、データの入力メソッドを定義します

という感じかなと思います。

さて、forumにあってperlのスクリプトはData Input Methodsにあたるので、ボトムアップ的に作成していけばいけるはずです。

1) Scriptをおく
http://forums.cacti.net/about7323.html
にあるperlのスクリプトを

<path_cacti>/scripts/darwin_memory.pl

に作成します。

# sudo vi /opt/local/share/cacti/scripts/darwin_memory.pl
#!/usr/bin/perl
$vmstatres = `vm_stat`;
#print $vmstatres;
$pagesize = $vmstatres;
$pagesize =~ /page size of (.*[0-9]) bytes/;
$pagesize = $1;
#page size of 4096 bytes
$mem = $vmstatres;
$mem =~ /($ARGV[0])\:\s+(\d+)\./;
#$mem = `vm_stat | grep -w "$ARGV[0]"`;
#$mem =~ s/($ARGV[0].*\s)(.*[0-9])( kB)//;
print int(($2 * $pagesize) / 1024); 

2) DataInputMethodを作成する
追加

Name: Darwin - Get Memory Usage
Input Type: Script/Command
Input String: perl <path_cacti>/scripts/darwin_memory.pl <grepstr> 

InputFieldsのgrepstrを

Field [Input]: grepstr
Friendly Name: Grep String
Regular Expression Match: (空にする)
Allow Emputy Input: (チェックを入れる)
Special Type Code: (空にする)

にします。

次にOutput Fieldsのkilobytesを

Field [Output]: kilobytes
Friendly Name: Result (in Kilobytes)
Update RRD File: (チェックを入れる)

とします。

3) Data Templatesを作る
ここは「Linux – Memory – Free」をベースに作成します。Linux – Memory – Freeにチェックを入れて、action = “Duplicate”を使い、複製された”Linux – Memory – Free (1)”を編集します。

Data Templtes >

Name: Darwin - Memory - Free

Data Source >

Name: |host_description| - Darwin - Memory - Free
Data Input Method: Darwin - Get Memory Usage
Associated RRA's: (変更なし)
Step: (変更なし)
Data Source Active: (変更なし)

Data Source Item >

Internal Data Source Name: darwin_mem_buffers
Minimum Value: (変更なし)
Maximum Value: (変更なし)
Data Source Type: (変更なし)
Output Field: (変更なし)
Heartbeat: (変更なし)

Custom Data >

Grep String: free

4) Graph Templatesを作る
Data Templatesと同じく、「Linux – Memory Usage」をベースに作成します。Linux – Memory Usageにチェックを入れて、action = “Duplicate”を使い、複製された”Linux – Memory Usage (1)”を編集します。

Graph Template Items>

  • Item #1からItem #4においてData SourceをLinux – Memory – Free(mem_buffers)をDarwin- Memory – Free(darwin_mem_buffers)に変更します。
  • SwapのItem #5からItem #8を削除します。

Graph Item Inputs>

  • Data Source [darwin_mem_buffers]があれば削除します。
  • Swap Data Sourceがあれば削除します。
  • Free Data Sourceを編集し、Item #1からItem #4にチェックをいれます

Template >

Name: Darwin - Memory Usage

Graph Template >

Title: |host_description| - Darwin - Memory Usage

5) Data Sourceを作る
ここは設定項目が少ないのでAddを押して新規作成します。

Selected Data Templateに「Darwin – Memory Usage」を選択します。

6) Graph Managementでグラフを追加
Addを押して新規作成します。

Graph Templateは#4で作成した”Darwin – Memory Usage”を
Graph Item Fields > Data Sourceには#5で作成した”Darwin – Memory Usage”を
それぞれ選択します。

Graphが表示できるようになったらokです。

必要に応じてLinux – Memory UsageグラフをGraph Managementから削除しましょう。