【AWS】PHP製監視ツール Cacti (Cacti on EC2セットアップ編)

2013.11.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹です。以前「PHP製監視ツール Cacti (URL監視編)」というエントリでCactiを用いたURL監視の方法をご紹介しました。

順序が前後してしまいましたが、本日はEC2とRDSを用いたCactiのセットアップをご紹介したいと思います。

必要なもの

事前に下記のCactiサーバー用EC2インスタンスを作成しておきます。

  • EC2(t1.micro, Amazon Linux)
  • Cacti用セキュリティグループ ssh(tcp/22)、http(tcp/80)
  • RDS用セキュリティグループ MySQL(tcp/3306)

RDS(MySQL)構築

MySQLでcactiデータベースを作成しておきます。RDSでは初期データベースのキャラクターセットがlatin1になりますので、初期DBは最初は作らないようにしています。

Endpoint
cacti.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
DB Engine
MySQL(5.6.12)
DB Name
cacti(後から作ります)
Username
cactiuser
Password
cactiuser
Parameter Group
キャラクターセットとしてUTF8を有効にしています

Cactiのインストールと設定

ミドルウェア インストール

ローカルPCからchef-soloとberkshelfを使ってApache2.2とPHP5.3をインストールします。

$ knife solo init .
$ vi Berksfile
$ knife cookbook create cacti -o site-cookbooks
$ vi site-cookbooks/cacti/recipes/default.rb
$ vi roles/cacti_server.json
$ knife solo bootstrap -i my_keypair.pem ec2-user@12.34.56.78 -o 'role[cacti_server]'

Berksfile

site :opscode

cookbook "apache2"
cookbook "php"

site-cookbooks/cacti/recipes/default.rb

package "cacti" do
  action :install
  notifies :restart, "service[httpd]"
end

service "httpd" do
  action :nothing
end

roles/cacti_server.json

{
  "name": "cacti_server",
  "default_attributes": {},
  "json_class": "Chef::Role",
  "description": "This is a Role for setting up a cacti server",
  "chef_type": "role",
  "run_list": [
    "recipe[apache2]",
    "recipe",
    "recipe[cacti]"
  ]
}

以降の作業はCactiをインストールしたEC2にsshでログインして作業します。

Cacti設定ファイルの修正

Chefでインストールされた設定ファイルを少々修正します。本来ならテンプレートにしてChefで配布すべきなのでしょうが、説明が本筋と外れるので割愛します。

$ sudo yum install httpd24 cacti net-snmp-utils -y
$ sudo vi /etc/httpd/conf.d/cacti.conf
    <IfModule mod_authz_core.c>
        # httpd 2.2
        Order deny,allow
        Deny from all
        Allow from all (← localhost から all に変更)
    </IfModule>

$ sudo vi /etc/cacti/db.php
(RDSのエンドポイントに変更する)
$database_hostname = "cacti.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com";

$ sudo chkconfig httpd on
$ sudo service httpd restart

DB初期設定(MyISAM → InnoDBへの変換)

Cactiから公式に配布されている初期DB作成用SQLは、テーブル形式がMyISAM指定になっています。このままだとRDSから「Message : DB Instance cacti contains MyISAM tables that have not been migrated to InnoDB. These tables can impact your ability to perform point-in-time restores. Consider converting these tables to InnoDB.」と警告されます。MyISAMだとポイント・イン・タイム リストア機能が使えないということですね。

Cactiのフォーラムを読んでみたところ、特にMyISAM形式である必要はないようなのでInnoDBに変更してしまいましょう。

$ sudo sed -i.bak -e 's/MyISAM/InnoDB/' /usr/share/doc/cacti-0.8.8a/cacti.sql
$ mysqladmin -u cactiuser -p -h cactidb.xxxxxxxx.ap-northeast-1.rds.amazonaws.com create cacti
$ mysql -u cactiuser -p -h cactidb.xxxxxxxx.ap-northeast-1.rds.amazonaws.com cacti < /usr/share/doc/cacti-0.8.8a/cacti.sql

cronを有効にする

$ sudo vi /etc/cron.d/cacti
*/5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
(行頭のコメントを外します)

Cactiの設定

初期設定はブラウザから行うことができます。CactiサーバーのPublicDNSに対して http://cacti.example.com/cacti/ のようにアクセスすると設定画面が表示されます。

20131104_cacti_001

「New Install」を選びます。

20131104_cacti_002

Cactiが内部で使用するコマンドのパスを設定します。自動設定されるので、そのまま「Finish」をクリックします。

20131104_cacti_003

設定画完了するとログイン画面に移ります。Cacti管理者(admin)の初期パスワードは admin になっていますので、ログイン後に[Utilities]-[User Management]画面で変更してください。

20131104_cacti_004

Cactiは初期状態で自分自身(127.0.0.1)が監視対象になっていますので、cronによるデータ収集が何度か実行される10〜15分後にはグラフが表示されることも確認できるかと思います。

まとめ

Cactiのインストール記事自体はネットを検索すれば相当数でてきますので、インストールは簡単にできるかと思います。

Cactiで一番の難関はData Queriesを用いたデータ収集とGraph Template設定だと思っています。追々そのあたりをご紹介したいと思います。