RRDTool+Cactiによるサーバ監視(Linux編)

インストールと初期設定 -> 基本的な監視設定 -> 独自な監視設定

◆独自な監視設定

    Cactiでは、自分で作成したスクリプトの出力を利用してグラフを描画することができます。今回はMRTGでも監視していた、ルータのNAPTセッション数、CPUとHDDの温度(現用Athlon64用マザーボードでは、ケース内温度監視ができないので今回は省略。)、CPUファン回転数を監視してみました。なお、デフォルトのままではひとつのグラフに単一項目を表示する場合は問題ありませんでしたが、おやじがやったCPUとHDDの温度監視のように複数項目を表示させる場合は、正常に表示できませんでした。Cactiのドキュメントを見ると、「スクリプトをrootで実行しないと問題が出る可能性がある。」との記述があったので、cronの設定を変更しrootで実行させたところ問題なく表示できるようになりました。スクリプトでの表示を利用する場合は、あらかじめ設定を変更しておいてください。
    1. まず、cron の実行をApacheユーザのwwwrunからrootに変更する。

      # vi /etc/cron.d/cacti
      [i]押下。

      */5 * * * *  wwwrun /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

                          ↓変更

      */5 * * * *  root     /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

      [Esc][:][w][q]で保存。

    2. グラフ化したいデータを収集するスクリプトを作成してテストしておく。作成したスクリプトは、デフォルトのスクリプトと同じようにcactiのscriptsディレクトリ配下(/usr/share/cacti/scripts/)に設置する。
      出力データが単一の場合は、改行なしで [値] のみ出力し、複数データの場合は、[項目名1:値1 項目名2:値2 ・・・] のように、項目名と値を [:] ではさみ、項目間を半角スペース区切りで改行なしで出力する。
      おやじが使用しているスクリプトの例をいくつか示す。作成したら単独で所定のデータが出力されるか確認しておく。

      1. CPU FAN回転数

        これは、lm_sensoresで取得したFANの回転数を単独で出力するもの。

        出力例: 2018

      2. 温度測定(CPU/HDD)

        これは、lm_sensoresとsmartmontoolsとで取得したCPUとHDDの温度を出力する。

        出力例: cputemp:29 hddtemp:36

    3. メニューから [Data Input Methods] を選択。右上の [Add] をクリックしスクリプトの登録を行う。



    4. 登録するスクリプトに関し、以下の内容を設定し、 [create] をクリックする。

      項 目

      概 要

      Name Data Input Methodの名前をわかりやすく指定。
      Script Type Data Input Methodの種類をプルダウンメニューから選択。

      項 目

      概 要

      SNMP SNMPエージェントからデータを収集する場合に指定。
      Script/Command スクリプトを利用してデータ収集する場合に指定。
      上記以外 未サポート。
      Input String

      Script Type で [Script/Command] を選択した場合、使用するスクリプトのパス及び引数を指定。
      スクリプトのパスは、環境変数を使用した設定方法か絶対パスで指定する。スクリプトの引数がある場合は、名前を付与して <name> のように<  > でくくること。
      ・perl <path_cacti>/scripts/temp.pl <cputemp> <hddtemp>
      ・perl /usr/share/cacti/scripts/temp.pl <cputemp> <hddtemp>


      CPU FAN の回転数に関する設定例を示す。



    5. 上記の操作で [Input Fields] と [Output Fields] が追加される。
      [Input Fields] では、スクリプトが受け取る引数に関する設定を [Add] をクリックして行う。今回作成したスクリプトは引数はないので未設定。
      [Output Fields] では、スクリプトが出力する項目に関する設定を [Add] をクリックして行う。複数項目ある場合は、その全てに関して設定を行う。



    6. [Output Fields] に関する設定を行う。  

      項 目

      概 要

      Field[Output] スクリプトが出力する項目名を指定。単一の場合は、他の項目と重複しないよう適宜指定する。
      Friendry Name この項目に関する簡易な表示名を指定。
      Update RRD File この項目に関するRRD ファイルを更新する場合にチェックする。デフォルトでチェック済みなのでそのままとする。

      ここでは、CPU FAN 回転数に関する設定例を示す。各項目を設定し、 [create] をクリックする。



    7. 下記のように設定した項目が [Output Fields] に表示されたことと、上部に Save Successfull. と表示されたことを確認し、[save] をクリックする。



    8. 上部に Save Successfull. と表示されたことを確認し、続けて設定を行うため [Add] をクリックする。



    9. ここでは、複数項目(CPU温度とHDD温度)を持つ温度関係の例を示す。CPU FAN 回転数と同様に [Data Input Methods] の名前、インプットタイプ、スクリプトを指定して、[create] をクリックする。



    10. 以降は、CPU FAN回転数の設定と同様であるが、温度関係のスクリプトは二つの項目が出力されるので、以下のように2項目を [Output Fields] に設定する。複数項目の場合は、項目名はスクリプトにあわせること。

      [CPU 温度]


      [HDD 温度]


    11. 上記で2項目(cputemp/hddtemp)を [Output Fields] に設定すると以下のように表示されるので、確認後、 [save] をクリックする。



    12. 上記で作成したデータインプットメソッドを使って、 データテンプレートを作成する。メニューの [Data Templates] を選択し、右上の [Add] をクリックしテップレートの登録を行う。



    13. まずは、CPU FAN回転数関係の設定を行う。データテンプレートで設定する項目は、以下のとおりである。

      項 目

      概 要

      Data Templates
      Name データテンプレートの名称を指定。
      Data Source
      Name データソースの名称を指定。
      ここでは、デフォルトの他の設定にならい '|host_description| - cpufan' と設定したが、|host_description| は [Devices] の [Description] で指定した値に置き換わるので、実質的には、'Localhost - cpufan'となる。
      Data Input Method プルダウンメニューから、上記で作成したデータインプットメソッドを指定する。
      Associated RAA's デフォルトのまま、全て選択状態とする。4段階のグラフを作成。
      Step デフォルトのまま、300秒とする。RRDToolに通知するupdate間隔とのことだが、cornの周期との関係がいまいち不明。
      Data Source Active デフォルトのまま、チェックする。データソースを一時的に無効にするためのパラメータ。
      Data Source Item
      Internal Data Source Name RRDで内部的に利用されるデータソースの名称を指定。 '-'や'_'を含め19文字以下という制限があるので注意が必要。
      Minimum Value

      ここで、指定した値以下の数値をunknownとして扱う。ということだが、具体的なイメージが不明なので、デフォルトの0のままとした。

      Maximum Value

      ここで、指定した値以上の数値をunknownとして扱う。ということだが、具体的なイメージが不明なので、デフォルトの0のままとした。(極端に値が変動する場合に、グラフがピーク値でつぶれてしまうための対策用?)

      Data SourceType 4つのデータソースタイプから選択。今回の対象は全て単なる数値のため、デフォルトのGAUGEのままとした。

      タイプ

      概 要

      COUNTER オーバフローを無視してカウントされるカウンタの場合に指定。
      GAUGE 増加したりしない単純な数値の場合に指定。
      ABSOLUTE リードリセット(読み込むと0に戻る)のカウンタの場合に指定。
      DERIVE オーバフローせずにカウントされるカウンタの場合に指定。
      Heartbeat RRDToolがunknownとして扱う間隔を指定。デフォルトの600秒(2周期)のままとする。


      ほとんどがデフォルトのままでよいが、CPU FAN回転数に関しては下記を設定し、 [create] をクリックする。



    14. [Output Field] が追加されるので、 cpufanになっていることを確認する。続けて、HDD温度の関する設定を行うため、[Data Source Item] の [New] をクリックする。



    15. 新しい Item が [ds] として表示されるので、データテンプレートで指定した[Internal Data Source Name] と [output Field] をHDD温度用に変更し、[save] をクリックする。 



    16. 同様に、ルータのNAPTセッション数についても設定する。下記を設定し、 [create] をクリックする。



      [Output Field] が追加されるので、 naptになっていることを確認する。



    17. 次のステップとして、[Data Sources] の登録を行う。メニューから [Data Sources] を選択し、右上の [Add] をクリックする。



    18. データテンプレートとホストの選択画面が表示されるので、まずはCPU FAN回転数の設定を行うため、プルダウンメニューからデータテンプレートとlocalhostを選択し、[create] をクリックする。



    19. 上記操作で、RRDファイルが自動的に生成されパスが表示されるので [save] をクリックする。



    20. データソースの初期画面に戻り、追加したソースが表示されるので、各項目が問題ないか確認する。



    21. [Graph Templates] にCPU FAN回転数の設定を行う。メニューから [Graph Templates] を選択し、右上の [Add] をクリックする。



    22. グラフテンプレートの設定を行う。項目はいろいろあるが大半はデフォルトのままでよいので、設定を変える必要性がありそうなものを以下に示す。


      項 目

      概 要

      Templates
      Name グラフテンプレートの名称を指定。
      Graph Template
      Title グラフに付与されるタイトルの名称を指定。
      ここでは、デフォルトの他の設定にならい '|host_description| - CPU FAN Rotational Speed' と設定したが、|host_description| は [Devices] の [Description] で指定した値に置き換わるので、実質的には、'Localhost - CPU FAN Rotational Speed' となる。
      Base Value デフォルトは1000であり通常はそのままでよいが、メモリやHDDのように1024単位の場合は変更要。
      Unit Exponent Value デフォルトは空白。縦軸の数値の単位を動かしたくない場合(回転数や周波数等)は、[0]を設定する。
      Vertical Label グラフの縦軸に付与する単位情報を指定。

      CPU FAN回転数に関して下記のように設定し、[create] をクリックする。



    23. 上記操作で上部に [Save Successful] と表示され、 [Graph Template Items] と [Graph Item Inputs] が追加されたことを確認し、グラフ表示する項目を設定する。 [Graph Template Items] 欄の [Add] をクリックする。



    24. 以下で、実際にグラフで描画する内容を設定していく。設定項目は以下のとおり。

      項 目

      概 要

      Graph Template Items
      Data Source プルダウンメニューで、グラフ化するデータソースを選択。
      Color プルダウンメニューでグラフの色を指定。グラフ中に示す凡例設定時は [none] を指定。
      Graph Item Type グラフの形式を指定。

      項 目 概 要
      COMMENT これらの解説は見つからないので内容不明?
      HRULE
      VRULE
      LINE1 折れ線グラフ1/2/3。複数グラフを同時に描画し、且つそれぞれを単独表示したい場合等に利用するとよい。
      LINE1が一番細く、LINE3が太線となる。
      LINE2
      LINE3
      AREA 棒グラフ表示。複数データを積み重ねて表示する場合はAREAでもよいが、AREA表示では単独表示させると重なってしまい先に指定したグラフ値のほうが値が小さい場合は、隠れて見えなくなってしまうので注意が必要。
      STACK AREAで描画したグラフの上に数値を積み上げる形で別のデータを描画する場合に使用する。この設定以前に、AREAで設定したデータが必須である。
      GPRINT 凡例表示の場合に指定。
      LEGEND GPRINT-LAST/GPRINT-AVERAGE/GPRINT-MAXIMUMグラフの品目を自動生成する場合に使用する。

      Consolidation Function 表示する統計モードを指定。

      項 目 概 要
      AVERAGE 平均値。一般的にグラフ描画で使用するモード。
      MIN 最小値。一般的に凡例で数値表示に使用するモード。
      MAX 最大値。一般的に凡例で数値表示に使用するモード。
      LAST 現在値。一般的に凡例で数値表示に使用するモード。

      CDEF Function CDEF機能(数式を適用する機能)をグラフ項目に適用する場合に選択。通常は [None] 。
      現在値を元に5分間の値を算出したり、バイトデータをビットに変換したりできる。
      Value HRULE/VRULEグラフアイテムタイプで使用されるパラメータ。使用方法不明。
      GPRINT Type 凡例の数字のフォーマットを指定。

      項 目 概 要
      Normal 1000(1024)単位で、K -> M等と単位が変化させたい場合に指定。
      Load Average 平均値表示する場合。
      Exact Numbers 元の値のまま整数化する場合。回転数や周波数等はこれがよい。

      Text Format グラフの凡例に表示されるタイトル。
      Insert Hard Return 複数データ表示する場合に、前データの最後の項目でチェックを入れ、次項から次のデータであることを明示する。グラフがオーバレイされ凡例が改行される。





    25. 設定した [Graph Item] と使用する [Data Source Item] 名が表示されていることを確認する。



    26. 続けて、このグラフで表示するItem(凡例)を追加設定する。

      項 目

      グラフ

      凡 例

      備 考

      Data Source Unix - CPU FAN Speed - (cpufan) グラフ化するデータソースを選択。
      Color 0000FF None グラフの色を指定。凡例時は [None] を設定。
      Graph Item Type AREA GPRINT

      グラフ形式を設定。(グラフ/凡例)

      Consolidation Function AVERAGE AVERAGE MAX LAST 表示する統計モードを指定。
      GPRINT Type Normal Exact Numbers 凡例の表示モードを指定。回転数なので[Exact Numbers]を設定。
      Text Format CPU FAN Speed Average: Maximum: Current: 凡例に表示されるタイトル。

      下記は、上記に従い最大値と現在値を表示するように設定した結果である。内容を確認し、 [save] をクリックする。



    27. 最後に、実際にグラフ表示するように登録する。メニューから [Graph Management] を選択し、新規に表示するグラフを登録するため [Add] をクリックする。



    28. 表示する [Graph Template] と [Host] を選択し、 [create] をクリックする。



    29. 選択したグラフテンプレートに対応した [Data Source] が表示されていることを確認し、 [save] をクリックする。この時点ではグラフは表示されていないが、問題はない。



    30. 追加した [Grafu Item] があることを確認し、再度当該Itemを選択し開いてみる。




    31. 設定したItemが表示されているはずである。



      他のItemについても同様に追加すればよい。

    負数の表示

    Cacti(RRDTool)のよいところの一つとして、負の数が扱えることがあげられますが、時として負数を表示できない問題が出ることがあります。おやじの場合、NTPのオフセット値の表示で負の数が存在するがうまく表示できませんでした。これは、Cactiが「Data Source Item」作成時にデフォルトで最小・最大値を設定してしまうためと思われます。
    この問題には以下の対処を行うことで、負の数も扱えるようになります。ここでは、NTPのオフセット値を扱ったときの例を示します。

    1. [Data Sources] を開き、対象となるデータソース名(今回の例ではLocalhost - ntp )を開き、[Supplemental Data Template Data] の [Data Source Fields] の [Data Source Path] から rrd ファイル名を調べる。



    2. RRDファイルの表示コマンドで、上記で調べた対象のRRDファイルの内容を確認する。負の数が表示できない場合は、下記のように扱う最小値の設定であるds[xxx].minに値(この例では"0")が入っているはずである。同様に、最大値(ds[xxx].max)にも値(この例では"100")が入っている場合は、最大値も押さえられてしまう。

      # rrdtool info /var/lib/cacti/localhost_ntp1_12.rrd
      filename = "/var/lib/cacti/localhost_ntp1_12.rrd"
      rrd_version = "0003"
      step = 300
      last_update = 1186793402
      ds[ntp1].type = "GAUGE"
      ds[ntp1].minimal_heartbeat = 600
      ds[ntp1].min =
      0.0000000000e+00
      ds[ntp1].max =
      1.0000000000e+02
      ds[ntp1].last_ds = "UNKN"
      ds[ntp1].value = NaN
      ds[ntp1].unknown_sec = 2
      ds[ntp2].type = "GAUGE"
      ds[ntp2].minimal_heartbeat = 600
      ds[ntp2].min =
      0.0000000000e+00
      ds[ntp2].max =
      1.0000000000e+02
      ds[ntp2].last_ds = "UNKN"
      ds[ntp2].value = 1.1120000000e+00
      ds[ntp2].unknown_sec = 0
      ds[ntp3].type = "GAUGE"
      ds[ntp3].minimal_heartbeat = 600
      ds[ntp3].min =
      0.0000000000e+00
      ds[ntp3].max =
      1.0000000000e+02
      ds[ntp3].last_ds = "UNKN"
      ds[ntp3].value = NaN
      ds[ntp3].unknown_sec = 2
      rra[0].cf = "AVERAGE"
      rra[0].rows = 600
      rra[0].pdp_per_row = 1
      rra[0].xff = 5.0000000000e-01
      rra[0].cdp_prep[0].value = NaN
      rra[0].cdp_prep[0].unknown_datapoints = 0
      rra[0].cdp_prep[1].value = NaN
      rra[0].cdp_prep[1].unknown_datapoints = 0
      rra[0].cdp_prep[2].value = NaN
      rra[0].cdp_prep[2].unknown_datapoints = 0

        (snip)


    3. 一般的にここには有り得ない値が挿入されないように制限するが、オフセット値の変動範囲はわからないため、未定義(U: Unknown)を設定した。
      コマンドイメージは下記のとおりである。

      # rrdtool tune RRDファイル名(/var/lib/cacti/localhost_ntp1_12.rrd) 最小/最大オプション(-i/-a) DS名:値(ntp1:U)

      今回は、最小・最大の両方とも無制限にした。

      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -i ntp1:U
      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -i ntp2:U
      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -i ntp3:U
      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -a ntp1:U
      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -a ntp2:U
      # rrdtool tune /var/lib/cacti/localhost_ntp1_12.rrd -a ntp3:U

    4. 設定が変更されたか確認する。変更箇所が「NaN」となっていれば、無制限に変更されているので、負の値も扱えるようになる。

      # rrdtool info /var/lib/cacti/localhost_ntp1_12.rrd
      filename = "/var/lib/cacti/localhost_ntp1_12.rrd"
      rrd_version = "0003"
      step = 300
      last_update = 1186794301
      ds[ntp1].type = "GAUGE"
      ds[ntp1].minimal_heartbeat = 600
      ds[ntp1].min =
      NaN
      ds[ntp1].max =
      NaN
      ds[ntp1].last_ds = "UNKN"
      ds[ntp1].value = 2.2700000000e-01
      ds[ntp1].unknown_sec = 0
      ds[ntp2].type = "GAUGE"
      ds[ntp2].minimal_heartbeat = 600
      ds[ntp2].min =
      NaN
      ds[ntp2].max =
      NaN
      ds[ntp2].last_ds = "UNKN"
      ds[ntp2].value = 5.5600000000e-01
      ds[ntp2].unknown_sec = 0
      ds[ntp3].type = "GAUGE"
      ds[ntp3].minimal_heartbeat = 600
      ds[ntp3].min =
      NaN
      ds[ntp3].max =
      NaN
      ds[ntp3].last_ds = "UNKN"
      ds[ntp3].value = -8.4400000000e-01
      ds[ntp3].unknown_sec = 0
      rra[0].cf = "AVERAGE"
      rra[0].rows = 600
      rra[0].pdp_per_row = 1
      rra[0].xff = 5.0000000000e-01
      rra[0].cdp_prep[0].value = NaN
      rra[0].cdp_prep[0].unknown_datapoints = 0
      rra[0].cdp_prep[1].value = NaN
      rra[0].cdp_prep[1].unknown_datapoints = 0
      rra[0].cdp_prep[2].value = NaN
      rra[0].cdp_prep[2].unknown_datapoints = 0

        (snip)


    インストールと初期設定 -> 基本的な監視設定 -> 独自な監視設定


    Top Pageへ