b.l0g.jp     About     Archive     Feed

Cactiで一定値以上になるとグラフが正常に描画されない時

Cactiを使っていると、下の画像のように、ある一定の値以上をグラフに描画できない時がある。この例の場合、青い線であらわされたout-boundのトラフィックが80Mbpsを超えるとグラフが描画されていない。

このような場合は、以下を確認する。

トラフィックの場合、値を32ビットカウンタで取得していないか。

64ビットカウンタで値を取得しないと、桁あふれが起きてグラフが正常に描画されない。ホストの編集画面(Console → Devices → ホストをクリック)のAssociated Data Queriesで「SNMP - Interface Statistics 64bit only」を選ぶ。

そのグラフの扱える最大値を超えていないか。

グラフの編集画面(Console → Data Source → ホスト名 - 分類 - 項目(たとえば hogehoge-db01 - Traffic - eth0 のような)) のMaximum Valueの値が、小さく設定されているようなら、これを大きくしてみる。

RRDファイルに設定されている最大値を超えていないか。

RRDファイルにも各値の最大値が設定されている。これを無限大に設定してやる。以下は、上の画像のようにトラフィックが途切れる場合の対策の例。

  
$ rrdtool info hogehoge-db01\_traffic\_in_200.rrd

filename = "mwap-r10\_traffic\_in_200.rrd"
  
rrd_version = "0003"
  
step = 300
  
last_update = 1352714073
  
ds[traffic_in].type = "COUNTER"
  
ds[traffic\_in].minimal\_heartbeat = 600
  
ds[traffic_in].min = 0.0000000000e+00
  
ds[traffic_in].max = 1.0000000000e+07 ← ここが最大値
  
ds[traffic\_in].last\_ds = "3293068416"
  
ds[traffic_in].value = 1.2345678909e+08
  
ds[traffic\_in].unknown\_sec = 0
  
ds[traffic_out].type = "COUNTER"
  
ds[traffic\_out].minimal\_heartbeat = 600
  
ds[traffic_out].min = 0.0000000000e+00
  
ds[traffic_out].max = 1.0000000000e+07 ← ここが最大値
  
ds[traffic\_out].last\_ds = "2054038296"
  
ds[traffic_out].value = 1.2345678909e+08
  
ds[traffic\_out].unknown\_sec = 0
  
(後略)
  

rrdtool tuneコマンドで変更

  
$ sudo rrdtool tune hogehoge-db01\_traffic\_in\_200.rrd -a traffic\_in:U
  
$ sudo rrdtool tune hogehoge-db01\_traffic\_in\_200.rrd -a traffic\_out:U
  
  
$ rrdtool info hogehoge-db01\_traffic\_in_200.rrd

filename = "mwap-r10\_traffic\_in_200.rrd"
  
rrd_version = "0003"
  
step = 300
  
last_update = 1352714073
  
ds[traffic_in].type = "COUNTER"
  
ds[traffic\_in].minimal\_heartbeat = 600
  
ds[traffic_in].min = 0.0000000000e+00
  
ds[traffic_in].max = NaN ← 無限大に変わってる
  
ds[traffic\_in].last\_ds = "3293068416"
  
ds[traffic_in].value = 1.2345678909e+08
  
ds[traffic\_in].unknown\_sec = 0
  
ds[traffic_out].type = "COUNTER"
  
ds[traffic\_out].minimal\_heartbeat = 600
  
ds[traffic_out].min = 0.0000000000e+00
  
ds[traffic_out].max = NaN ← 無限大に変わってる
  
ds[traffic\_out].last\_ds = "2054038296"
  
ds[traffic_out].value = 1.2345678909e+08
  
ds[traffic\_out].unknown\_sec = 0
  
(後略)
  

海外の役立つブログ記事などを人力で翻訳して公開するYakstというプロジェクトをやっています。よろしければそちらもどうぞ!