本ガイドは、Cactiバージョン0.8.6iの内容となっています。 最新バージョンにおけるガイドはhttp://www.sabakan.info/techinfo/cacti.htmをご覧下さい。

Cactiによるネットワーク監視システム構築ガイド(0.8.6i)

| サバカンTOP | ウィデア合同会社TOP | 問い合わせ |

はじめに
監視設計
OSセットアップ
Cactiセットアップ
初期設定
テンプレート
さいごに
リンク

はじめに

本ガイドでは、ネットワークグラフソリューションCactiを使用し、ネットワーク監視システムを構築します。 CactiはSNMPを使用し、監視ターゲットの統計情報(Load Average、Traffic等)の取得・表示だけに止まらず、Cacti Users提供のプラグインをインストールすることで監視システムとしても利用できます。 監視設計からスタートし、CentOSによるCacti環境構築および筆者オリジナルテンプレートの提供までご案内します。

監視設計

本ガイドでは、グローバルIPアドレスにて外部公開しているサーバを監視ターゲットとします。

ネットワーク環境

ネットワーク図

ファイアウォールルータ

フィルタリングポリシーは以下の通りです。

  • LAN側(192.168.10.0/24)からインターネット側へのアクセスは原則許可
  • インターネット側からLAN側(192.168.10.0/24)へのアクセスは原則禁止
  • グローバルIPアドレスへのアクセスは外部公開サーバへフォワーディング

外部公開サーバ

監視ターゲットとなる外部公開サーバは、ウェブ・メール・DNS・データベースサービスを提供します。 インターネットからグローバルIPアドレスへのアクセスはすべて外部公開サーバにフォワーディングされるため、セキュリティ対策として、iptablesによるファイアウォール機能を有効にします。

監視サーバ

本ガイドにて、構築する監視サーバです。プライベートIPアドレスにて運用するため、外部からは接続できません。

統計情報

筆者オリジナルテンプレートで監視ターゲットから取得する統計情報を以下に示します。

No. 項目 備考
1 Load Average 5分平均のロードアベレージを取得
2 CPU Usage CPUの使用率を取得
3 Memory Usage メモリおよびスワップの使用率を取得
4 Disk Usage パーティション単位のディスク使用率を取得
5 Traffic 5分平均のネットワークトラフィック量(bps)を取得
6 Proc Count 稼動プロセス数を取得

統計情報の保管期間は400日とします。
SNMPタイムアウトは3秒(3000ms)とします。

監視項目

下記項目の監視を行い、検知時はメールにて通知します。

No 項目 閾値1 閾値2 備考
1 Disk Usage 80% 90% ディスク使用率を監視(警告[hdd_warn]:閾値1、異常[hdd_err]:閾値2)
2 Proc Count 1未満 - 必須プロセスを監視
3 Device(Host) - - SNMPの応答を監視

各監視は障害発生時と復旧時にメール通知を行います。 障害が継続している場合、1時間毎にメールを送信します。

OSセットアップ

監視サーバは、CentOS4.4 ServerCDを使用します。 CentOSは、北米ベンダーのEnterprise Linuxをベースに開発されているクローンLinuxです。 CentOSコミュニティは北米ベンダーの公開しているソースパッケージから製品名・商標ロゴ等を除去し再構築したパッケージを無償で公開しています。 このバイナリパッケージは100%互換を目指しています。

CentOSインストール

本ガイド環境のインストール手順を示します。 あなたのハードウェア環境・ネットワーク環境・管理ポリシーに応じて変更してください。

インストール画面はVMware Workstationにてキャプチャしています。 実機で確認した方法をVMwareで再現しています。 実機作業前にVMwareを使用したい場合は無償版のVMware Serverがありますので、VMwareをお持ちでない方はServer版をお勧めします。

  1. Welcome to CentOS_ServerCD
    [Next]をクリック。
  2. Language Selection
    [Japanese (日本語)]を選択し、[Next]をクリック。
  3. キーボード設定
    [次(N)]をクリック。
  4. ディスクパーティションの設定
    [次(N)]をクリック。
  5. ディスクパーティションの設定(警告)
    [はい(Y)]をクリック。
  6. 自動パーティション設定
    [次(N)]をクリック。
  7. 自動パーティション設定(警告)
    ※ドライブに存在するデータがすべて削除されます。必要なデータがある場合はバックアップを取得して下さい。
    [はい(Y)]をクリック。
  8. ディスクの設定
    [次(N)]をクリック。
  9. ブートローダーの設定
    [次(N)]をクリック。
  10. ネットワークの設定
    [編集(E)]をクリック。
  11. ネットワークの設定(インターフェースeth0を編集)
    [DHCPを使用して設定(D)]のチェックを外す。[IPアドレス(I)]、[ネットマスク(M)]を入力し、[OK(O)]をクリック。
  12. ネットワークの設定
    [手動設定(M)]、[ゲートウェイ(G)]、[1番目のDNS(P)]を入力し、[次(N)]をクリック。
  13. ファイヤーウォール設定
    [ファイアウォールなし(O)]を選択。[SELinuxを有効にしますか?(S)]を[無効]とし、[次(N)]をクリック。
  14. ファイヤーウォール設定(警告)
    ※本ガイドのネットワーク環境では監視サーバは外部(インターネット)から接続できないようにしています。 外部から接続できる環境に監視サーバを設置する場合は、ファイアウォールを設定することをお勧めします。
    [続行(P)]をクリック。
  15. 追加の言語サポート
    [システムにインストールする追加言語を選択してください(A)]の[English (USA)]を選択。[システム標準の言語を選択して下さい(D)]の[English (USA)]を選択し、[次(N)]をクリック。
  16. タイムゾーンの選択
    [次(N)]をクリック。
  17. Rootパスワードを設定
    [Rootパスワード(P)]、[確認(C)]を入力し、[次(N)]をクリック。
  18. パッケージインストールのデフォルト
    [インストールするソフトウェアパッケージをカスタマイズ(C)]を選択し、[次(N)]をクリック。
  19. パッケージグループの選択
    [その他→最小]を選択し、[次(N)]をクリック。
  20. インストール準備完了
    [次(N)]をクリック。
  21. パッケージのインストール
    10分程度でインストールが完了します。
  22. インストール完了
    [再起動(T)]をクリック。

アップデート

最新のパッケージにアップデートします。最も近いミラーサイトを利用するようfastestmirrorプラグインを使用します。

[root]# yum install yum-plugin-fastestmirror
[root]# vi /etc/yum.conf

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=centos-release
tolerant=1
exactarch=1
retries=20
obsoletes=1
gpgcheck=1
plugins=1

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

[root]# yum update

不要サービスの停止

監視サーバに必要のないサービスを停止します。

仮想コンソール

[root]# vi /etc/inittab

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
####4:2345:respawn:/sbin/mingetty tty4
####5:2345:respawn:/sbin/mingetty tty5
####6:2345:respawn:/sbin/mingetty tty6

デーモン

LISTENしているサービスを停止します。

[root]# chkconfig cups off
[root]# chkconfig portmap off
[root]# chkconfig nfslock off

netstatコマンドの実行結果が以下のようであることを確認して下さい。

[root]# netstat -lntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN

メンテナンスユーザ

サーバ管理、パッケージ作成等に使用する一般ユーザを登録します。 登録したユーザは、sudoコマンドの実行、rpmパッケージの再構築を行うことができるよう環境を準備します。

ユーザ登録

サーバのメンテナンスを行うユーザ(sabakan)を登録します。

[root]# useradd -u 1000 -c "Maintenance User" sabakan
[root]# passwd sabakan

rpm環境設定

rpmパッケージの作成、再構築は登録した一般ユーザにて行います。

[root]# su - sabakan
[user]$ echo "%_topdir $HOME/rpm" > ~/.rpmmacros
[user]$ mkdir -p ~/rpm/{SPECS,BUILD,SOURCES,SRPMS,RPMS}

ディレクトリの用途を以下に示します。

ディレクトリ 用途
SPECS rpmパッケージの設定ファイルspecファイルを配置
BUILD ビルド時の作業ディレクトリ
SOURCES パッケージのソース、パッチを配置
SRPMS 作成されたsrc.rpmパッケージを保存
RPMS 作成されたrpmパッケージを保存

sudoコマンド

一般ユーザプロンプトにて、実行したいコマンドの前にsudoをつけることでroot権限にてコマンドを実行できるようにします。 sudoコマンド実行後に表示されるPassword:プロンプトには、ユーザ自身のパスワードを入力します。 また、sudoによるコマンド実行は、/var/log/secureに記録されるため作業後に実行したコマンドを確認することができます。

[root]# visudo

# User privilege specification
root    ALL=(ALL) ALL
sabakan ALL=(ALL) ALL

今後、rootでの作業は出来る限り避け、sudoコマンドを使用して作業を行うことをお勧めします。

追加パッケージ

Cactiには直接関係ありませんが、日本語環境で便利なパッケージを追加します。 時間の惜しい方やつまづいた方はビルド環境準備とNTPの設定だけを行い、nkf、lv、kccは読み飛ばして下さい。 各パッケージはfedora(日本)からソースパッケージ(/fedora/core/6/source/SRPMS以下)をダウンロードし、再構築したパッケージをインストールします。 パッケージのバージョンやダウンロードサーバは適宜読み替えてください。

ビルド環境準備

[user]$ sudo yum install rpm-build
[user]$ sudo yum install gcc
[user]$ sudo yum install autoconf

NTP

時刻同期を行うためNTPをインストールします。

[user]$ sudo yum install ntp
[user]$ sudo vi /etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -x"

# Set to 'yes' to sync hw clock after successful ntpdate.
SYNC_HWCLOCK=yes

[user]$ sudo /etc/init.d/ntpd start

nkf

nkf(Network Kanji Filter)は文字コードの変換に使用します。

[user]$ rpm -ivh http://ftp.kddilabs.jp/Linux/packages/fedora/core/6/source/SRPMS/nkf-2.07-1.1.fc6.src.rpm
[user]$ rpmbuild -ba rpm/SPECS/nkf.spec
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/nkf-2.07-1.1.i386.rpm

lv

lvは強力な多国語対応テキストファイルビューアです。

[user]$ sudo yum install libtermcap-devel
[user]$ rpm -ivh http://ftp.kddilabs.jp/Linux/packages/fedora/core/6/source/SRPMS/lv-4.51-8.1.src.rpm
[user]$ rpmbuild -ba rpm/SPECS/lv.spec
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/lv-4.51-8.1.i386.rpm

kcc

kcc(Kanji Code Coverter)はテキストファイルの文字コード調査、変換に使用します。

[user]$ rpm -ivh http://ftp.kddilabs.jp/Linux/packages/fedora/core/6/source/SRPMS/kcc-2.3-24.2.2.src.rpm
[user]$ rpmbuild -ba rpm/SPECS/kcc.spec
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/kcc-2.3-24.2.2.i386.rpm

Cactiセットアップ

ここからメインテーマであるCactiのインストールを行います。 冒頭でCactiはネットワークグラフソリューションと表記しましたが、Cacti自身にはグラフ作成機能は持ちません。 実際のグラフ作成およびデータ保管はRRDtool(Round Robin Database Tool)が行います。 RRDtoolおよびCactiの理解には、rrdtutorial(日本語訳)の一読およびコマンドを試してみることを強くお勧めします。 ちなみにRRDtoolとMRTG(Multi Router Traffic Grapher)はTobias Oetikerにより開発されているソフトウェアです。 他にもSmokePingというネットワークのレスポンスをグラフ化するツールも作成しています。

また、データの収集はSNMP(Simple Network Management Protocol)を使用します。 SNMPはネットワーク経由でターゲット機器の管理情報を取得するプロトコルです。 LinuxではほぼすべてのディストリビューションにNet-SNMPが用意されており、CactiでもNet-SNMPを必要とします。

ではCactiは何者かというと、RRDtoolおよびNet-SNMPを実行する際のコマンドオプションを管理するフロントエンドツールということができます。 さらにユーザの取り出したいグラフをウェブブラウザから簡単に取り出せるインターフェースも提供します。 また、Cacti Users提供のTholdプラグインを使用することで、閾値の設定、ターゲットのダウンをメールにて通知を行うよう機能強化することができます。

準備

RRDtool、Net-SNMPおよびMySQLをインストールします。

RRDtool

RRDtoolはfedoraのソースパッケージを再構築します。

[user]$ sudo yum install gcc-c++ openssl-devel freetype-devel libpng-devel zlib-devel libart_lgpl-devel python-devel php-devel tcl-devel
[user]$ rpm -ivh http://ftp.riken.jp/Linux/fedora/extras/6/SRPMS/rrdtool-1.2.15-6.fc6.src.rpm
[user]$ rpmbuild -ba rpm/SPECS/rrdtool.spec
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/rrdtool-*.rpm

Net-SNMP

[user]$ sudo yum install net-snmp*

MySQL

Cactiは設定内容をMySQLに保管します。日本語を使用することを考慮し、文字コードはUTF-8に統一します。

[user]$ sudo yum install mysql mysql-server mysql-devel
[user]$ sudo vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=127.0.0.1
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
init_connect='SET NAMES utf8'
default-character-set=utf8

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set=utf8

[user]$ sudo /etc/init.d/mysqld start
[user]$ sudo /sbin/chkconfig mysqld on

SQLの実行結果が以下のようであることを確認して下さい。

[user]$ mysql
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| character_set_client     | utf8  |
| character_set_connection | utf8  |
| character_set_database   | utf8  |
| character_set_results    | utf8  |
| character_set_server     | utf8  |
| character_set_system     | utf8  |
+--------------------------+-------+
6 rows in set (0.00 sec)

Cactiインストール

Cactiサイトからソースパッケージをダウンロードします。

[user]$ rpm -ivh http://www.cacti.net/downloads/packages/SRPMS/cacti-0.8.6i-1.src.rpm
[user]$ rpmbuild -ba rpm/SPECS/cacti.spec
[user]$ sudo yum install php-mysql php-snmp
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/cacti-0.8.6i-1.i386.rpm
[user]$ cd /var/www/html/cacti
[user]$ mysqladmin --user=root create cacti
[user]$ mysql --user=root cacti < cacti.sql
[user]$ mysql --user=root mysql
mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser';
mysql> flush privileges;
mysql> \q

Cactidインストール

Cactiはデフォルトではcmd.phpというスクリプトを5分ごとに実行(/etc/cron.d/cacti)し、ターゲットからデータを収集します。 大量の機器からデータを収集する場合、cmd.phpでは5分以内にすべての収集を終えることができなくなります。 Cactidを使用すると収集が高速化され、大量機器のデータ収集も可能となります。 ターゲットが50を超えるような場合は、通常Cactidを使用します。

ただし、今回使用するTholdプラグインの不具合があり、Cactidを使用した場合Device監視におけるメール通知が正常に動きません。 Device監視を使用したい場合はcmd.phpを使用してください。 Tholdだけでは大量の機器をターゲットとし、かつDevice監視を行うことは現状できません。 Monitorプラグインを使うことで代用できるような記述をどこかでみました(未確認)。 Tholdの改修を期待しましょう。

CactiサイトからCactidのソースパッケージをダウンロードします。

/bin/sh ./config/mkinstalldirs /etc
 /usr/bin/install -c -m 644 cactid.conf /etc/cactid.conf
/usr/bin/install: cannot create regular file `/etc/cactid.conf': Permission denied
make[1]: *** [install-configDATA] Error 1
make[1]: Leaving directory `/home/sabakan/rpm/BUILD/cacti-cactid-0.8.6i'
make: *** [install-am] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.40265 (%install)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.40265 (%install)

ビルド時に/etc/cactid.confを参照しようとするのが原因のようです。 rootユーザ権限が必要となるのでsudoコマンドでrpmbuildを実行します。

[user]$ rpm -ivh http://www.cacti.net/downloads/cactid/packages/SRPMS/cacti-cactid-0.8.6i-1.src.rpm
[user]$ sudo rpmbuild -ba rpm/SPECS/cactid.spec
[user]$ sudo rpm -ivh /home/sabakan/rpm/RPMS/i386/cacti-cactid-0.8.6i-1.i386.rpm

プラグインインストール

Tholdプラグインを使用すると、取得したデータに対して閾値(Threshold)を設け、アラートメールを送信することができます。 Device(Host)ダウン、リカバリ時にもメールを送信します。 このプラグインを利用してCactiに監視機能を持たせます。

また、Cacti UsersではTholdプラグイン以外にもプラグインが用意されています。 またCentOSにCactiおよびプラグインを組み込んだCactiEZというインストールCDも配布しています。 手っ取り早く試してみたい方には良いかもしれません。

Plugin Architecture

Cacti Usersのプラグインを使用するには、Cactiのプログラムを置き換えるもしくはパッチを適用する必要があります。 今回はより簡単な方法であるプラグラムの置き換えを行います。 Cacti UsersサイトからPlugin Architectureをダウンロードします。 解凍したディレクトリ内のfiles-バージョン(今回files-0.8.6i)は必ずCactiのバージョン(今回0.8.6i)にあわせてください。

[user]$ wget http://download.cactiusers.org/downloads/cacti-plugin-arch.gzip
[user]$ tar -zvxf cacti-plugin-arch.tar.gz
[user]$ cd cacti-plugin-arch
[user]$ sudo cp -dR files-0.8.6i/* /var/www/html/cacti/

Thold

Cacti UsersサイトからTholdをダウンロードします。

[user]$ wget http://download.cactiusers.org/downloads/thold.gzip
[user]$ tar -zvxf thold-0.3.0.tar.gz
[user]$ sudo chown -R root:root thold
[user]$ sudo mv thold /var/www/html/cacti/plugins/
[user]$ sudo vi /var/www/html/cacti/include/config.php
$plugins = array();
$plugins[] = 'thold';

インストール後の確認

ウェブサーバ(apache)を起動します。ついでに自動起動設定も行います。

[user]$ sudo /etc/init.d/httpd start
[user]$ sudo /sbin/chkconfig httpd on

http://監視サーバのIPアドレス/cacti/(今回http://192.168.10.11/cacti/)にアクセスします。

  1. Cacti Installation Guide 1
    [Next >>]をクリック。
  2. Cacti Installation Guide 2
    [Next >>]をクリック。
  3. Cacti Installation Guide 3
    [Next >>]をクリック。
  4. User Login 1
    [User Name:]に admin 、[Password:] admin を入力し、[Login]をクリック。
  5. User Login 2
    [Password:]、[Confirm:]に新パスワードを入力し、[Save]をクリック。
  6. Logged in Cacti !
    [threshhld]タブが存在していれば、インストールは正常に完了しています。

このまましばらくほうっておけば監視サーバ自身の統計情報が自然と保存されていきます。 [graphs]タブから確認できます。
Cactiを楽しんでください!

初期設定

監視設計にもとづく環境の下準備と確認を行います。

ログ

設定後の実行結果確認のため、ログにポーリング時の実行結果を出力させます。

  1. [console]タブをクリック
  2. Configuration->[Settings]リンクをクリック
  3. General->[Poller Specific Logging]プルダウンメニューから Medium - Statistics,Errors and Results を選択
  4. [save]ボタンをクリック

ログは下記手順にて参照できます。

  1. [console]タブをクリック
  2. Utilities->[System Utilities]リンクをクリック
  3. System Log Administration->[View Cacti Log File]リンクをクリック

なお、運用開始後はログの肥大化予防のため、再度 Low - Statistics and Errors に戻すことをお奨めします。

タイムアウト

Cactiインストール時のSNMPタイムアウトは500msecに設定されています。 このままだと負荷が高めの環境では頻繁にタイムアウトが発生(Deviceダウンと認識)するので数値を大きく(500->3000)します。

  1. [console]タブをクリック
  2. Configuration->[Settings]リンクをクリック
  3. General->SNMP Defaults->[SNMP Timeout]に 3000 を入力
  4. [save]ボタンをクリック

統計情報保存期間

統計情報の保存期間(RRA:Round Robin Archives)を400日に設定します。

RRDにおけるデータ保存

RRD(Round Robin Database)は円周上にデータを格納する箱を配置(イメージ)します。 1日1個の箱を400日分用意したとすると、400日ではじめに用意した箱はすべて格納されます。 401日目はどうなるかというと、円周上を1週し1日目の箱を再利用(上書き)しデータを格納します。 以降再利用を繰り返し決められた期間(ここでは400日間)のデータを保存します。

Cactiのデフォルトの設定では797日分の箱が用意されています。 ただしこの箱は前述のように1日1個の箱しか用意されていません。 1つの箱はその期間の1つのデータ(平均値/最大値/最小値/最近値のうちどれか)しか格納できないため、取り出す際も用意した期間より短い期間のデータを取り出すことはできません。 つまり1日1箱では、1日のうちのある特定の時間帯のデータを取り出すことはできません。 1時間単位で取り出したい場合は1時間毎で箱を用意し、5分単位で取り出したい場合は5分毎で箱を用意する必要があります。

Cactiではこの箱をSteps、Rowsで管理します。 Stepsは参照単位を表し、最小単位は5分となり値を1とすると5分毎(5x1)、12とすると1時間毎(5x12)の箱を用意します。 Rowsは保存するデータ数(箱の個数)を指定します。

CactiデフォルトRRA

Cactiのデフォルトで用意されているDaily/Weekly/Monthly/Yearlyの4つのRRAをみてみましょう。

RRAs Steps 参照単位 Rows 保存期間 解説 Timespan
Daily 1 5分毎 600 50時間 50時間(2日強)以内であれば5分毎のデータを取り出すことが可能 86400
Weekly 6 30分毎 700 350時間 350時間(2週間強)以内であれば30分後とのデータを取り出すことが可能 604800
Monthly 24 2時間毎 775 1550時間 1550時間(2ヶ月強)以内であれば2時間毎のデータを取り出すことが可能 2678400
Yearly 288 1日毎 797 797日 797日(2年強)以内であれば1日毎のデータを取り出すことが可能 33053184

計算式
参照単位=Steps×5(分)
保存期間=参照単位×Rows
※表の最後の列Timespanは日単位、週単位、月単位、年単位でグラフを表示した際に表示する期間を分単位で表しています。

Rowsの計算

上記のように取り出したいデータが期間に応じて参照単位が異なることは運用上煩雑となるので

  • 400日以内であれば5分毎のデータを取り出すことが可能

となるようSteps、Rowsを調整します。

RRAs Steps 参照単位 Rows 保存期間 計算式
Daily 1 5分毎 115200 400日 400x24x60/(5x1)
Weekly 6 30分毎 19200 400日 400x24x60/(5x6)
Monthly 24 2時間毎 4800 400日 400x24x60/(5x24)
Yearly 288 1日毎 400 400日 400x24x60/(5x288)

※保存期間を変更する場合は、計算式の400(日)を変更してください。

RRAの設定

Daily/Weekly/Monthly/YearlyのRowsの値を変更します。

Daily
  1. [console]タブをクリック
  2. Management->[Data Sources]リンクをクリック
  3. Management->---[RRAs]リンクをクリック
  4. Round Robin Archives->Name->[Daily (5 Minute Average)]をクリック
  5. Round Robin Archives->[Rows]に 115200 を入力
  6. [save]ボタンをクリック
Weekly
  1. [console]タブをクリック
  2. Management->[Data Sources]リンクをクリック
  3. Management->---[RRAs]リンクをクリック
  4. Round Robin Archives->Name->[Weekly (30 Minute Average)]をクリック
  5. Round Robin Archives->[Rows]に 19200 を入力
  6. [save]ボタンをクリック
Monthly
  1. [console]タブをクリック
  2. Management->[Data Sources]リンクをクリック
  3. Management->---[RRAs]リンクをクリック
  4. Round Robin Archives->Name->[Monthly (2 Hour Average)]をクリック
  5. Round Robin Archives->[Rows]に 4800 を入力
  6. [save]ボタンをクリック
Yearly
  1. [console]タブをクリック
  2. Management->[Data Sources]リンクをクリック
  3. Management->---[RRAs]リンクをクリック
  4. Round Robin Archives->Name->[Yearly (1 Day Average)]をクリック
  5. Round Robin Archives->[Rows]に 400 を入力
  6. [save]ボタンをクリック

cactidの設定

50以上の機器からデータ収集を行う場合は、cmd.phpではなくcactidを使うことで高速にデータ収集が実行されます。 今回はDevice監視を行うためcactidは使用しませんが、事前に正常に稼動することを確認します。

  1. [console]タブをクリック
  2. Configuration->[Settings]リンクをクリック
  3. [Paths]タブをクリック
  4. Alternate Poller Path->[Cactid Poller File Path]に /usr/bin/cactid を入力
  5. [save]ボタンをクリック
  6. [Poller]タブをクリック
  7. General->Poller Type->のプルダウンメニューから cactid を選択
  8. [save]ボタンをクリック

cactidのpathが異なる場合は下記コマンドにて確認してください。

[user]$ sudo find / -name cactid

Tholdのデフォルト設定

Deviceダウン時や閾値を越えた際の通知メールの設定を行います。

  1. [console]タブをクリック
  2. Configuration->[Settings]リンクをクリック
  3. [Alerting/Thold]タブをクリック
  4. General->[Alert e-mail]に 通知先メールアドレス を入力
  5. Emailing Options->[From Email Address]に 送信元メールアドレス を入力
  6. Emailing Options->[From Name]に 送信元名 を入力
  7. [save]ボタンをクリック
  8. Emailing Options右の[Send a Test Email]リンクをクリック
    別ウィンドウに送信結果が表示されます。

送信元メールアドレスを monitor@sabakan.info 、送信元を Cacti とした場合、下記のようなテストメールが届きます。

To: 通知先メールアドレス 
Subject: Cacti Test Message 
Date: Tue, 16 Jan 2007 16:41:14 +0900 
From: Cacti <monitor@sabakan.info> 

This is a test message generated from Cacti. This message was sent to test the configuration of your Mail Settings.

Your email settings are currently set as follows

Method: PHP's Mailer Class

SNMP接続確認

監視設計にあわせたテンプレート作成を行う前に、Cactiに用意されている ucd/net SNMP Host Template を使用してSNMP接続ができることを確認します。

SNMPエージェント設定

[user]$ cd /etc/snmp
[user]$ sudo cp -p snmpd.conf snmpd.conf.dist
[user]$ sudo vi snmpd.conf

# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    systemview    included   .1
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1

[user]$ sudo /etc/init.d/snmpd restart

Cactiホスト登録

Cactiのホスト登録の練習を兼ねて実際に作業を行ってみます。

  1. [console]タブをクリック
  2. Create->[New Graphs]リンクをクリック
  3. [Create New Host]リンクをクリック
  4. Devices->[Description]に 説明 を入力
    Descriptionはグラフのヘッダに表示されます。
    Hostnameとあわせてホスト名、IPアドレスを登録してもよいかと思います。
  5. Devices->[Hostname]に ホストまたはIPアドレス を入力
  6. Devices->[Host Template]プルダウンメニューから ucd/net SNMP Host を選択
  7. [save]ボタンをクリック
    実行後、SNMP Informationが取得できればSNMP接続は問題ありません。
  8. [Create Graphs for this Host]リンクをクリック
  9. Graph Templates、Data Queryのチェックボックスをすべてチェック
    チェックすると該当項目がオレンジ色に反転します。
  10. [create]ボタンをクリック

Cactiグラフ登録

Cactiはホストの登録とともにグラフを登録する必要があります。 データ収集とグラフ表示の機能が独立しているため、柔軟にグラフを表示できます。 このあたりがMRTGとの大きな違い(メリット)だと思います。

  1. [console]タブをクリック
  2. Management->[Graph Trees]リンクをクリック
  3. Graph Trees右の[Add]リンクをクリック
  4. Graph Trees->[Name]に グラフツリー名 を入力
    ホスト登録時のDescriptionとあわせると管理がしやすいかと思います。
  5. [create]ボタンをクリック
  6. Tree Items右の[Add]リンクをクリック
  7. Tree Items->[Tree Item Type]プルダウンメニューから Host を選択
  8. Tree Item Value->[Host]プルダウンメニューから 登録したホスト を選択
  9. [create]ボタンをクリック

このまましばらくたてば、データ収集が行われグラフを表示することができるようになります。

Tholdのテスト

登録したホストディスク使用量閾値に1を設定します。

  1. [console]タブをクリック
  2. Management->[Data Sources]リンクをクリック
  3. 登録したホスト->[ucd/net - Hard Drive Space]リンクをクリック
  4. Data Source Item->Mandatory settings->[High Threshold]に 1 を入力
  5. [save]ボタンをクリック

1を超えた場合(確実に超えるでしょう)、設定したTholdのデフォルト設定で登録した通知先にアラートメールが飛びます。

To: 通知先メールアドレス 
Subject: 192.168.10.10 - Partition - /dev/mapper/Vol went above threshold of 1 with 5967632.3733 
Date: Tue, 16 Jan 2007 17:45:04 +0900 
From: Cacti <monitor@sabakan.info>

http://192.168.10.11/cacti//graph.php?local_graph_id=19&rra_id=1

テンプレート

ここまでの作業でもある程度の運用を行うことができます。 しかし各統計値について筆者には理解できない部分や別の値を取得したい部分があります。 運用時にグラフの見方、数値の示す状況が理解できるようテンプレートを修正・追加します。

テンプレートインポート

筆者のオリジナルテンプレートをインポートします。

ファイルアップロード

監視サーバの<path_cacti>/scripts(本環境では/var/www/html/cacti/scripts)にscp等を使用し下記ファイルをアップロードします。

CPANからNet::SNMPモジュールダウンロード、インストールします。

[user]$ wget http://search.cpan.org/CPAN/authors/id/D/DT/DTOWN/Net-SNMP-5.2.0.tar.gz
[user]$ tar -xvzf Net-SNMP-5.2.0.tar.gz
[user]$ cd Net-SNMP-5.2.0
[user]$ perl Makefile.PL
[user]$ make test
[user]$ sudo make install

同様に下記ファイルを<path_cacti>/resource/snmp_queries(本環境では/var/www/html/cacti/resource/snmp_queries)にアップロードします。

インポート

Host Templatesのインポートを行います。

  1. [console]タブをクリック
  2. Import/Export->[Import Templates]リンクをクリック
  3. [Import Templates]->Import Template from Local Fileの[参照]ボタンをクリック
  4. [cacti_host_template_sabakan_linux_host.xml]を選択
  5. [save]ボタンをクリック

テンプレートインポート時に一部正常にインポートされない箇所がありますので修正を行います。

  1. [console]タブをクリック
  2. Collection Methods->[Data Input Methods]リンクをクリック
  3. Data Input Methods->[Sabakan - Get Memory Usage]リンクをクリック
  4. Data Input Methods->[Input String]テキストを修正
    perl <path_cacti>/scripts/sabakan_memory.pl <host><port><community><version>

    perl <path_cacti>/scripts/sabakan_memory.pl <host> <port> <community> <version>
    <host>、<port>、<community>、<version>の間に半角スペースを挿入
  5. [save]ボタンをクリック

ホスト登録

正常にインポートされたか確認するためホスト登録を行います。 SNMP接続確認と同じホストを登録します。

  1. [console]タブをクリック
  2. Create->[New Graphs]リンクをクリック
  3. [Create New Host]リンクをクリック
  4. Devices->[Description]に 説明 を入力
    SNMP接続確認と区別するため、異なる説明を入力してください。
  5. Devices->[Hostname]に ホストまたはIPアドレス を入力
  6. Devices->[Host Template]プルダウンメニューから Sabakan Linux Host を選択
  7. [save]ボタンをクリック
  8. [Create Graphs for this Host]リンクをクリック
  9. Graph Templates、Data Queryのチェックボックスをすべてチェック
  10. [create]ボタンをクリック

Process Count以外のグラフが表示されることを確認して下さい。

各グラフの説明

Traffic

トラフィックの収集は用意されているData Queriesの[SNMP - Interface Statistics] をそのまま使用します。

試しにHost Templateを作成してみます。

  1. [console]タブをクリック
  2. Templates->[Host Templates]リンクをクリック
  3. Host Templates右の[Add]リンクをクリック
  4. Host Templates->[Name]に Test Host Template を入力
  5. Associated Data Queries->[Add Data Query]プルダウンメニューから SNMP - Interface Statistics を選択
  6. [add]ボタンをクリック
  7. [save]ボタンをクリック

このようにHost TemplateにはData Queryを登録することができます。

Load Average

ロードアベレージはGraph Templatesの[Sabakan - Load Average]を使用します。 Traffic同様Host Templateに追加します。

  1. [console]タブをクリック
  2. Templates->[Host Templates]リンクをクリック
  3. Host Templates->[Test Host Template]リンクをクリック
  4. Associated Graph Templates->[Add Graph Template]プルダウンメニューから Sabakan - Load Average を選択
  5. [add]ボタンをクリック
  6. [save]ボタンをクリック

先ほどTrafficではData Queryでしたが、今回はGraph Templateを登録しました。 したがってHost Templateには下記のいずれかを登録できます。

  • Graph Template
  • Data Query

Sabakan - Load AverageはGraph Templatesで用意されているucd/net - Load Averageをもとに作成しています。 ucd/net - Load Averageは1分間、5分間、15分間の平均ロードアベレージを積み上げてグラフ表示します。 ここで1分間、5分間、15分間を積み上げてグラフ化することにどんな意味があるのでしょうか? サーバオペレーション(topコマンド等)を実行するさいLoad Averageを積み上げて状況を判断することは筆者の経験上ありません。 データ取得間隔が5分間であることから、5分間の平均Load Averageをグラフ化することが妥当と思われます。

CPU Usage

CPUに関する統計情報はucd/net - CPU Usageをもとに作成します。 ucd/net - CPU Usage はCPUの使用時間をグラフ表示しますが、ここでは使用時間ではなく使用率(%)を取得します。 また取得する項目もトラブルシューティングで頻繁に使用するvmstatコマンドにもとづき、user(us)、system(sy)、idle(id)、wait(wa)とします。

JM Project Manpage of VMSTATから引用

これらは CPU の総時間に対するパーセンテージである。
us: カーネルコード以外の実行に使用した時間 (ユーザー時間、nice 時間を含む)。
sy: カーネルコードの実行に使用した時間 (システム時間)。
id: アイドル時間。Linux 2.5.41 以前では、IO 待ち時間を含んでいる。
wa: IO 待ち時間。Linux 2.5.41 以前では、0 と表示される。

SNMPで取得するOIDを以下に示します。

  • User:.1.3.6.1.4.1.2021.11.50.0
  • System:.1.3.6.1.4.1.2021.11.52.0
  • Idle:.1.3.6.1.4.1.2021.11.53.0
  • Wait:.1.3.6.1.4.1.2021.11.54.0

上記OIDで取得できる値は、各項目がCPUを使用した時間となります。 時間の単位は100分の1単位(10ms)のデータとなりますので、パーセント表示するための係数100と相殺(1/100×100)され取得した値をそのまま使用することができます。

Disk Usage

閾値の設定を簡易化するため使用率で表します。 また、グラフにはパーティションの容量をコメント表示します。

Disk Usageを正しく使うためにはまず監視ターゲットの/etc/snmp/snmpd.confに下記のような行を追加する必要があります。

disk /     10000
disk /boot 10000
disk /var  10000
disk /usr  10000
disk /home 10000

パーティションは環境に合わせて設定してください。

Memory Usage

メモリ不足を判断するために物理メモリおよびスワップの使用率を取得します。 また、グラフには物理メモリおよびスワップの容量をコメント表示します。

SNMP経由でのメモリに関する情報は総容量、使用量といった数値が取得できますが、直接使用率を取得することができません。 そこでData Input Methodでperlスクリプト(sabakan_memory.pl)を使用しデータを計算します。 使用したOIDを以下に示します。

  • memTotalSwap:.1.3.6.1.4.1.2021.4.3.0
  • memAvailSwap:.1.3.6.1.4.1.2021.4.4.0
  • memTotalReal:.1.3.6.1.4.1.2021.4.5.0
  • memAvailReal:.1.3.6.1.4.1.2021.4.6.0

snmpwalkコマンドを使用する際は末尾の.0は必要ありませんが、snmpgetコマンド使用時は必須となります。 つけない場合下記エラーが発生します。

Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: UCD-SNMP-MIB::memTotalSwap

Proc Count

プロセス数の統計情報は新規に作成しています。 Proc Countを正しく使うためにはまず監視ターゲットの/etc/snmp/snmpd.confに下記のような行を追加する必要があります。

proc atd
proc crond
proc klogd
proc syslogd
proc ntpd

起動数を調べたいプロセスや常に稼動している必要のあるプロセスを指定してください。 指定するプロセス名は下記コマンドにて調査できます。

[user]$ ps -e | awk {'print $4'} | sort -u | egrep -v "(ps|awk|sort|egrep|CMD)"

監視項目

DeviceについてはAlerting/Tholdの設定がされていれば自動的に監視が行われます。 Disk UsageとProc Countにて閾値を設け監視を行う手順を記載します。

Disk Usage

まず警告閾値を設定します。 パーティションの使用量が80%を超えた場合通知されます。

  1. [console]タブをクリック
  2. Templates->[Threshold Templates]リンクをクリック
  3. Threshold Templates右の[Add]リンクをクリック
  4. [Please select a Data Template]プルダウンメニューから Sabakan - Disk Usage を選択
  5. [go]ボタンをクリック
  6. [Please select a Data Field]プルダウンメニューから hdd_warn を選択
  7. [go]ボタンをクリック
  8. Mandatory settings->[High Threshold]に 80 を入力
  9. Other setting->[Alert E-Mail]に メールアドレス を入力
  10. [save]ボタンをクリック

エラー閾値はデフォルトの通知先に設定します。 パーティションの使用量が90%を超えた場合通知されます。

  1. [console]タブをクリック
  2. Templates->[Threshold Templates]リンクをクリック
  3. Threshold Templates右の[Add]リンクをクリック
  4. [Please select a Data Template]プルダウンメニューから Sabakan - Disk Usage を選択
  5. [go]ボタンをクリック
  6. [Please select a Data Field]プルダウンメニューから hdd_err を選択
  7. [go]ボタンをクリック
  8. Mandatory settings->[High Threshold]に 90 を入力
  9. [save]ボタンをクリック

Proc Count

プロセス監視はLISTENしないデーモンや常駐プロセスを監視するために行います。 監視対象プロセス数が1以下のときに通知を行います。

  1. [console]タブをクリック
  2. Templates->[Threshold Templates]リンクをクリック
  3. Threshold Templates右の[Add]リンクをクリック
  4. [Please select a Data Template]プルダウンメニューから Sabakan - Process Count を選択
  5. [go]ボタンをクリック
  6. [Please select a Data Field]プルダウンメニューから proc_count を選択
  7. [go]ボタンをクリック
  8. Mandatory settings->[Low Threshold]に 1 を入力
  9. [save]ボタンをクリック

ここまでの作業が完了したら、稼動確認をおこなったDeviceを一度削除しホストの再登録をしてください。

テンプレートの適用

これまでと同様TholdでもTemplateを作成することができ監視対象追加時は容易に閾値を設定することができます。

  1. [console]タブをクリック
  2. Management->[Devices]リンクをクリック
  3. Devicesの該当サーバのリンクをクリック
  4. [Create Graphs for this Host]リンクをクリック
  5. [Auto-create thresholds]リンクをクリック

さいごに

当初本ガイドでテンプレートの作成方法を記載しようと考えていましたが、私の知識や労力が足らずその域までは踏み込むことができませんでしたので、筆者が統計情報を取得するときのポイントだけを示します。 実際の作成手順はThe Cacti HowTo Sectionが手助けになると思います。

本環境に関するお問い合わせやテンプレート作成方法について、なにかございましたらお気軽にお問い合わせ下さい。

リンク

©2006-2007 Widea Inc. All rights reserved