メモリをたくさん積んだサーバの Memory Usage が Cacti で正しく描画されない問題と解決策

メモリがお安くなった今日この頃。
「よーしパパ、年度末だし 32GB 積んだサーバ買っちゃうぞ〜」
と意気込んでメモリ盛り盛り16GBやら32GBのサーバを買って、意気揚々とセットアップしていざ監視系に組込んでみたら

「あれれー? 何だかおかしいよ〜? メモリの空き容量(Memory Free)がnanになっちゃってるよ〜?」


と、Cacti でサーバ監視してるのに、大容量のメモリを積んだサーバの Memory Usage の Memory Free が取得できなくなったことはないでしょうか?

SNMPでの取得ができていないのかと snmpwalk で確認すると、

$ snmpwalk -v 1 -c public foobar.jp .1.3.6.1.4.1.2021.4
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0
UCD-SNMP-MIB::memErrorName.0 = STRING: swap
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 18530296
UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 18530296
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 16288872
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 13028976
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 31559272
UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 81832
UCD-SNMP-MIB::memCached.0 = INTEGER: 2343540
UCD-SNMP-MIB::memSwapError.0 = INTEGER: 0
UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING:

ちゃんと返してる。
それなのに、グラフがちゃんと描画されない。

これの原因は、Cacti にデフォルトで設定されている上限値を越えているので、ちゃんと処理できなくなっている。ということらしいです(↓)。
Cacti • View topic - Memory not reporting correctly http://forums.cacti.net/about38955.html

TheWitness Posted: Wed Aug 11, 2010 2:25 pm
The max value in the data template needs to be adjusted (add a few zeros). Then, simply delete the RRDfile and start again.

TheWitness

対処法は、その上限値を増やしてやればいいので、Cacti の [Console] から
[Data Templates] → [ucd/net - Memory - Free] と開き、
Data Source Item の Maximum Value の項目に 0 を追加するなどで、上限値を引き上げましょう。
デフォルトではこれが 10GB になっているので、0 を追加して 100GB にしてやればOK。

これでしばらく待つと、

こんな感じにちゃんとグラフが描画されるようになるはず。
グラフが出ない場合は、グラフに対応する rrd ファイルを一度削除します。
rrd ファイルは /var/log/cacti/rra/ に入っていて、ファイル名は [Console] の [Data Sources] から監視対象を開いた [Data Source Path] に書いてあります。
例えば、[foobar - Memory - Free] を開くと [/foobar_mem_free_17.rrd] とかになってます。

後書きのようなもの

cacti メモリ」やら「cacti Memory Usage」でググって出てこなかったのでメモ書き作ってみた。
ググりかたが悪いのかレアケースなのか