Cacti

(更新:2014/01)EqualLogic監視
(更新:2013/12)テンプレート編集
(更新:2013/10)Disk IO監視
(作成:2013/07)

サービス停止に一早く気付けないのはインフラ屋さんとして失格よね。サーバは立てたら監視しませう。
監視にも色々あるけれど、こちらは主にリソース監視をするもの。

Install on CentOS

epelパッケージ使えるようにしておきましょう。足りないパッケージもがっつりやっつけてくれます。いやーパッケージ管理システムって便利だな。

# yum install --enablerepo=epel httpd mysql-server cacti

初期状態ではアクセスできないので、設定が幾つか必要。まずはhttpd設定、Webアクセスできる所は限定出来るならしておきましょう。ローカルに設置するならallでも良いんじゃないかな。

#### /etc/httpd/conf.d/cacti.conf

...
<Directory /usr/share/cacti/>
        ...
        <IfModule !mod_authz_core.c>
                ...
                #Allow from localhost
                Allow from all
                ...

続いてMySQLサーバ設定。既に用意してあれば不要だけれど、Cacti用にインストールしたなら簡単に初期設定しときましょう。

# mv /etc/my.cnf /etc/my.cnf.org
# cp /usr/share/doc/mysql-server-5.1.69/my-huge.cnf /etc/my.cnf
#### /etc/my.cnf

...
server-id       = 1
max-binlog-size = 1G
expire_logs_days = 7
...
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 384M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 100M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
...
# /etc/init.d/mysqld start
# mysql_secure_installation
...
Enter current password for root (enter for none): (空のままEnter)
...
Set root password? [Y/n]
New password: (MySQL rootログイン用パスワード)
Re-enter new password: (MySQL rootログイン用パスワード)
Password updated successfully!
Reloading privilege tables..
 ... Success!
...
Remove anonymous users? [Y/n] (Enter)
 ... Success!
...
Disallow root login remotely? [Y/n] (Enter)
 ... Success!
...
Remove test database and access to it? [Y/n] (Enter)
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
...
Reload privilege tables now? [Y/n] (Enter)
 ... Success!

Cacti用アカウントと初期SQLの流し込み。

# mysql -u root -p
Enter password:
...
mysql> create database cacti;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on cacti.* to cactiuser@localhost identified by '(cactiuser用パスワード)';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
# mysql -u root -p cacti < /usr/share/doc/cacti-0.8.8a/cacti.sql
Enter password:

Cactiスクリプトの設定修正。

//// /usr/share/cacti/include/config.php

...
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "(cactiuser用パスワード)";
$database_port = "3306";
$database_ssl = false;
...

ここまできたらブラウザで http://(cactiサーバのIP)/cacti/ にアクセス。まだまだ初期インストール画面は続く……。ここでは設定の流れを掻い摘んで。

  • Thanks for taking the time to...
    Next>>
  • Please select the type of installation
    初期導入ならNew Install``Next>>
  • Make sure all of these values are correct before continuing.
    余程変な構成してない限り、そのまま Finish 。ここで足りないコマンドがあるようなら yum install しておく。
  • User Login
    初期導入なら admin / adminLogin
  • \*\*\* Forced Password Change \*\*\*
    admin 用の新規パスワードを入力して Save

初期導入はこれにて完了。

Cacti-Spine

Cacti情報収集の効率化。標準の cmd.php によるpollingだと低速かつシングルタスク動作だけれど、spineにすればC言語の高速実行かつマルチタスク動作してくれる。超速い。
特にこのあたりの収集速度はグラフ欠けに直接関わる部分なので、可能ならばCacti-Spineに変更しておいた方が無難。

CentOSの場合、インストールはRPMforgeを使う。ここで大事なのは、Cacti本体とCacti-Spineのバージョンは同じものにしておく事。そうしないと上手くグラフデータが更新されず、ググっても見付からないエラーに翻弄される事に……。
まあ、同一リポジトリからパッケージインストールすれば大抵揃う筈なので、素直にRPMforgeからインスコ。

# yum install cacti-spine --enablerepo=rpmforge

一応こんな感じに確認しとこう。同一バージョンだから「0.8.7i」まで同じである事。

# rpm -qa | grep cacti
cacti-0.8.7i-2.el5.rf
cacti-spine-0.8.7i-1.el5.rf

設定。

#### /etc/spine.conf

DB_Host         localhost
DB_Database     cacti
DB_User         cactiuser
DB_Pass         (DBアクセスパスワード)
DB_Port         3306

spine.conf の設定については /var/www/cacti/include/config.php の内容に順じればOK。
後はCactiの設定。

ブラウザアクセス
- console-Configuration-Settings
- Paths
- Alternative Poller Path-Spine Poller File Path: /usr/bin/spine
- Poller
- General-Poller Type: spine

テンプレート追加

Cactiは標準で一般的なサーバのリソース監視が可能、だけれど監視したいものは世の中にあれこれある。しかし心配する事無かれ、Cactiにはテンプレート機能があって監視したいものに最適なテンプレートを作ったり、既にあるものを適用したりできる。ここではそんな追加テンプレートについて。
なおテンプレート適用は大抵サーバへファイルを直接設置する必要がある。個人的には管理上、素直にそのまま置くのではなくシンボリックリンクを使った方が良いと思う。ウチは /usr/local/src/cacti_tpl/ 以下に貰ってきたテンプレート毎ディレクトリを作って設置してます。

何か欲しいCactiテンプレートがある時は、まず以下のサイトなどで探してみると良い。

Disk IO監視

サーバの処理速度はCPUのパワー不足やメモリ不足に加え、ディスクアクセス速度がネックになる。割と忘れられがちなので、3点セットで監視を仕込んでおきたいところ。でもDisk IOについては標準テンプレートに含まれないのでDLしてくる必要がある。

導入方法をコマンドレヴェルで簡単に。

(local)# tar xvfz diskio087d.tar.gz
# scp diskio087d/disk_io.xml (Cactiサーバ):/var/tmp/
(Cactiサーバ)# mv /var/tmp/disk_io.xml /usr/share/cacti/resource/snmp_queries

ブラウザアクセス
- console-Import Templates
- Import Template from Loca File: cacti087d_data_query_snmp_-_get_disk_io.xml
- Import

このテンプレートを使うと、指定したディスクのRead/WriteそれぞれのBytes/secが取得できるようになる。

EqualLogic監視

DELLのスゴイStrage。まー個人で使う事は無いでしょうけれど。テンプレートは以下から。

導入方法はサイトに記載の通り。

(local)# tar xvfz cacti_host_template_dell_equallogic_group_snmpv2_required.1.2.tar.gz
# scp equallogic_member.xml (Cactiサーバ):/var/tmp/
(Cactiサーバ)# mv /var/tmp/equallogic_member.xml /usr/share/cacti/resource/snmp_queries

ブラウザアクセス
- console-Import Templates
- Import Template from Loca File: cacti_host_template_dell_equallogic_group_snmpv2_required.xml
- Import

このテンプレートによる生成グラフは多種あって紹介し難い。まあ単純にEqualLogicごとのBytes/secだけでも見る価値はあると思う。Snapshotバックアップをしているなら「Snapshot Space」も価値あるかな。

BIG-IP監視

BIG-IPのリソース監視はf5 Networks社から提供されているテンプレートが使える。要アカウント。

導入方法はサイトに記載の通り。以下、コマンドレヴェルで簡単に設置までの流れを。

(local)# scp cacti_f5_host_template_v2.zip (Cactiサーバ):/var/tmp/
(Cactiサーバ)# cd /usr/local/src/cacti_tpl/
# unzip /var/tmp/cacti_f5_host_template_v2.zip
...
# cd cacti_f5_host_template_v2/
# ls -1 ./f5_*.xml | while read name; do ln -sf "${name}" /usr/share/cacti/resource/snmp_queries/; done
# ls -1 ./*.pl | while read name; do ln -sf "${name}" /usr/share/cacti/scripts/; done

ブラウザアクセス
- console-Import Templates
- Import Template from Loca File: cacti_host_template_f5_big-ip.xml
- Import

こちらは情報が多いので紹介が難しい……。「Connections」「Global HTTP Requests」「Global HTTP Response Errors」「Global HTTP responses」「SSL TPS」「Connection Rate」あたりは通信状況の参考として使えると思う。

テンプレート編集

Cacti標準のテンプレートは何も考えずに導入できてステキだけれど、気に食わない箇所もちらほら。というわけでこれまで手を加えたテンプレートについて書き残してみる。

ucd/net - Memory

以下の記事を信じるならば、メモリの使用率というのはこうなるらしい。

$ free
             total       used       free     shared    buffers     cached
Mem:       8155108    4496288    3658820          0     477432    1824740
-/+ buffers/cache:    2194116    5960992
Swap:      9822204          0    9822204

Mem:free < (使用可能な空きメモリ) < Mem:free + Mem:buffers + Mem:cached

で、Cacti標準テンプレートのメモリ監視では「Memory Free」「Memory Buffers」「Cache Memory」の積み重ねグラフが取得できる。……ぱっと考えただけだと必要十分に思えるかも知れないけれど、実際にグラフ化するとガンガン波打って意味不明。こいつをDisk Spaceのグラフと同じように、Totalに対するUsed/Available表示にして使用率まで一目瞭然にしてみる。
まずはTotal Memoryの値をSNMPから取得できるようにする。

  • Console-Data Templates-Add
    • Data Templates
    • Name: ucd/net - Memory - Total
    • Data Source
    • Name: |host_description| - Memory - Total
    • Data Input Method: Get SNMP Data
    • Data Source Item
    • Internal Data Source Name: mem_total
    • Maximum Value ('U' for No Maximum): 1000000000
    • Custom Data
    • OID: .1.3.6.1.4.1.2021.4.5.0

こいつを既存のMemory Usageテンプレートに突っ込む。

  • Console-Graph Templates-ucd/net - Memory Usage
    • Graph Template Items
    • Add
      • Graph Template Items
      • Data Source: ucd/net - Memory - Total -(mem_total)
      • Color: C0C0C0
      • Graph Item Type: AREA
      • Consolidation Function: AVERAGE
      • CDEF Function: Multiply by 1024
      • Text Format: Memory Total
    • Add
      • Graph Template Items
      • Data Source: ucd/net - Memory - Total - (mem_total)
      • Color: None
      • Graph Item Type: GPRINT
      • Consolidation Function: AVERAGE
      • CDEF Function: Multiply by 1024
      • Text Format: Total:
      • Insert Hard Return: チェック

ボタンにて上記2つを Item # 1 Item # 2 に昇格。

こうしてからMemory Usageグラフを作り直す。
─これが→

灰色でマシンの搭載メモリが描画され、重ね合わせで「Memory Free」「Memory Buffers」「Cache Memory」のグラフが描画されるので、メモリの利用率も見た目で大体判断できて良い感じ。