Cacti × CentOS インストール、構築手順

本記事では Cacti v1.2.6 のインストールから構築までを紹介します。OS は CentOS7.6 です。以下の Cacti の公式マニュアルをベースに進行していきます。

公式マニュアル:Cacti Manual 1.0.0

※設定箇所のみが知りたい人は赤文字になっている部分だけ実行/設定変更してください。

Cacti のインストール

公式マニュアル:Download Cacti | cacti.net

早速 Cacti をインストールしていきます。Cacti には前提パッケージがいくつか存在しますが、yum でインストールするとそのあたりの関連するパッケージもほとんど一緒にインストールしてくれるので、一発目から yum で Cacti をインストールするのが一番楽です。

以下の順番でインストールを行いましょう。

[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install cacti

※Cacti をインストールする前に「epel-release」を yum でインストールしなかった場合、Cacti のパッケージが見つかりません。

前提パッケージのインストール

公式マニュアル:Cacti Manual 1.0.0 | docs.cacti.net
参考サイト:Required Packages for RPM-based Operating Systems | The Cacti Manual
※このサイトのマニュアルは恐らく大分古いバージョンのものなので、あまり真に受けない。参考程度に。

Cacti インストール時に前提パッケージはおおよそインストール済みですが、「php」と「mysql-server」のみ未インストールの状態だと思います。

そういった “インストールされていると思いきや” を防ぐために、一応全てのパッケージが揃っているかを確認します。

[root@localhost ~]# yum list installed | grep ***

以下は Cacti 1.0.0 のマニュアルから引用した前提パッケージです。

httpd
php
php-snmp
php-ldap
php-xml
php-session
php-sockets
php-PDO → php-pdo
php-pdo-mysql → php-mysql
php-mbstring
php-pcre
php-json
php-openssl
php-gd
php-gmp
php-zlib
mysql
mysql-server → mariadb-server
net-snmp
crond
rrdtool

mysql-server が未インストールなのは、正しくは「mariadb-server」だからです。以下のコマンドで mariadb-server をインストールしてください。

[root@localhost ~]# yum install mariadb-server

更にさらに、衝撃的なことに php がない…笑

[root@localhost ~]# yum list installed | grep php
php-cli.x86_64 5.4.16-46.el7 @base
php-common.x86_64 5.4.16-46.el7 @base
php-gd.x86_64 5.4.16-46.el7 @base
php-imap.x86_64 5.4.16-9.el7 @epel
php-intl.x86_64 5.4.16-46.el7 @base
php-ldap.x86_64 5.4.16-46.el7 @base
php-mbstring.x86_64 5.4.16-46.el7 @base
php-mysql.x86_64 5.4.16-46.el7 @base
php-pdo.x86_64 5.4.16-46.el7 @base
php-process.x86_64 5.4.16-46.el7 @base
php-snmp.x86_64 5.4.16-46.el7 @base
php-xml.x86_64 5.4.16-46.el7 @base
[root@localhost ~]#

php も個別でインストールしてあげましょう。

[root@localhost ~]# yum install php

php をインストールし忘れた場合は以下の記事のようになってしまいます(戒め)

Cacti で “403 Forbidden” になってしまう現象の解決方法

ちなみに、以下は「もしパッケージを個別でインストールする場合」の注意点です。興味が無ければ見なくても問題ありません。

php-pdo

 

マニュアルでは「php-PDO」と大文字になっていますが、「yum install php-PDO」だとインストールできないので注意してください。

[root@localhost ~]# yum install php-PDO
(省略)
パッケージ php-PDO は利用できません。
* おそらくの意味: php-pdo
エラー: 何もしません

php-mysql

 

マニュアルでは「php-pdo-mysql」となっていますが、「yum install php-pdo-mysql」だとインストールできません。これは恐らく「php-mysql」のことを指しているのかと。yum で Cacti をインストールした後は「php-mysql」が”インストール済み”となっている為、多分あってます。ちなみに「php-pdo-mariadb」「php-mariadb」は存在しません。

[root@localhost ~]# yum install php-pdo-mysql
(省略)
パッケージ php-pdo-mysql は利用できません。
エラー: 何もしません
[root@localhost ~]#

mariadb-server

 

マニュアルでは「mysql-server」となっていますが、「yum install mysql-server」だとインストールできないので注意してください。そもそも「yum install mysql」も結局は「mariadb」がインストールされます。「mysql-server」はいい感じに置き換えてくれないんですね。もし「mariadb-server」のインストールが漏れてしまった場合、mariadb のサービスが開始できません。

[root@localhost ~]# systemctl start mariadb
Failed to start mariadb.service: Unit not found.
[root@localhost ~]# systemctl status mariadb
Unit mariadb.service could not be found.

MariaDB と httpd の起動と自動起動有効化

公式マニュアル:Installing Under Unix | docs.cacti.net

MariaDB と httpd は起動し、更に自動起動するようにしておきます。

[root@localhost ~]# systemctl start mariadb

[root@localhost ~]# systemctl enable mariadb

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd

各設定作業

php の設定

公式マニュアル:Configure PHP | docs.cacti.net

/etc/php.ini の必須の設定はタイムゾーンの変更のみです。ただし、「memory_limit」と「max_execution_time」はデフォルトだとインストール中の前提要件で警告されてしまいます。

警告されるさま

無視もできますが、パフォーマンスが極端に制限されてしまうため Cacti があからさまに重い状態になります。ここで変更しておきましょう。ちなみに、インストール中の「Pre-installation Checks」では各パラメータの推奨値が表示されますが、PHP に関してはマシンスペックによらないことが多いので、以下の値が推奨値だと思います。ただし、もし推奨値と違う、もしくは設定を忘れていた場合「Pre-installation Checks」中に設定を変更して httpd を reload した後に更新ボタンを押せば OK です。

[root@localhost ~]# vi /etc/php.ini

(省略)

;max_execution_time = 30
max_execution_time = 60

(省略)

;memory_limit = 128M

memory_limit = 800M

(省略)
;date.timezone =
date.timezone = “Asia/Tokyo”

(省略)

[root@localhost ~]# systemctl reload httpd

Apache の設定

公式マニュアル:Configure the Webserver (Apache) | docs.cacti.net
参考サイト: Apache 2.4のアクセス制御をもうちょっとマジメに見てみた | Days of Speed

デフォルトの状態だと、Cacti にローカルホストからしかアクセスできません。設定を変更して任意の IP アドレスを持つホストからのアクセスを許可します。

httpd のバージョンによって設定箇所が微妙に異なるので、まずは httpd のバージョンを確認します。

[root@localhost ~]# yum info httpd

バージョン : 2.4.6

バージョン確認後、以下の設定を行います。バージョンに沿ってどちらか片方のみでよいです。

[root@localhost ~]# vi /etc/httpd/conf.d/cacti.conf

(省略)

<Directory /usr/share/cacti/>
<IfModule mod_authz_core.c>
# httpd 2.4
Require host localhost

Require ip 192.168.0.10 172.16.32.0/24 ※httpd2.4 の場合こんな感じ
</IfModule>
<IfModule !mod_authz_core.c>
# httpd 2.2
Order deny,allow
Deny from all
Allow from localhost

Allow from 192.168.0.10 172.16.32.0/24 ※httpd2.2 の場合こんな感じ

</IfModule>

(省略)

[root@localhost ~]# systemctl reload httpd

MariaDB

公式マニュアル:Configure MySQL | docs.cacti.net

MariaDB の設定に関しては、公式マニュアルは参考にしないでください。恐らく mysql ではなく MariaDB を使用しているからだと思いますが、基本的にコマンドが通らないです。

ほとんどがアクセス権関連のエラーなので、オプションをつけるなど手を加えれば一応沿うことはできますが、そこに拘る意味は無いのでやめましょう。以下のリンクを参考にしてください。

参考サイト:CentOS7 Cactiのインストールと基本設定 | UnixPower on Networking

まずは初期構成からはじめます。

[root@localhost ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we’ll need the current
password for the root user.  If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): ※エンター
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] ※エンター
New password: ※パスワードを設定
Re-enter new password: ※パスワードを設定
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] ※エンター
… Success!
Normally, root should only be allowed to connect from ‘localhost’.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] ※エンター
… Success!
By default, MariaDB comes with a database named ‘test’ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] ※エンター
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] ※エンター
… Success!
Cleaning up…
All done!  If you’ve completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
[root@localhost ~]#

次にキャラクターセットを変更します。キャラクターセットを UTF8 にしなければ、Cacti 初回起動時の「Pre-installation Checks」で以下のエラーとなります。

Server Collation
WARNING: Your server collation does NOT appear to be fully UTF8 compliant. Under the [mysqld] section, locate the entries named ‘character-set-server’ and ‘collation-server’ and set them as follows:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

 

Database Collation
WARNING: Your database default collation does NOT appear to be full UTF8 compliant. Any tables created by plugins may have issues linked against Cacti Core tables if the collation is not matched. Please ensure your database is changed to ‘utf8mb4_unicode_ci’ by running the following:

mysql> ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

上記エラーが出ても初期構成を続行することは可能なんですが、まあ続行する意味もないでしょう。というわけで以下のように修正した後に restart してください。

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

(省略)

# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

(省略)

[root@localhost ~]# systemctl restart mariadb

Database Collation のエラーは cacti データベース作成後に ALTER で変更するものなので、まずはデータベースとユーザを作成します。以下のコマンドを実行してください。

[root@localhost ~]# mysql -u root -p
Enter password: ※MariaDBのrootパスワードを入力

MariaDB [(none)]> create database cacti;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cacti.* TO cactiuser@localhost identified by ‘cactiP@ssw0rd’;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye

“cactiuser@localhost” は「ユーザ名@ホスト名」。ユーザのパスワードは任意

先ほど作成した “cactiuser” のユーザ名とパスワードを「/usr/share/cacti/include/config.php」に設定します。ユーザ名とパスワードのデフォルト値は「cactiuser」です。

[root@localhost ~]# vi /usr/share/cacti/include/config.php

$database_type = ‘mysql’;
$database_default = ‘cacti’;
$database_hostname = ‘localhost’;
$database_username = ‘cactiuser’;
$database_password = ‘cactiP@ssw0rd’;

先述したキャラクターセットの変更ですが、上記で cacti データベースを作成したためここで変更します。

[root@localhost ~]# mysql -u root -p
Enter password: ※MariaDBのrootパスワードを入力

MariaDB [(none)]> ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> exit
Bye

次に Cacti が用意してくれている SQL 文を流し込みます。以下のコマンドを実行してください。

[root@localhost ~]# mysql -u cactiuser -p cacti < /usr/share/doc/cacti-1.2.6/cacti.sql
Enter password: ※”cactiuser”のパスワードを入力
[root@localhost ~]#

ここで入力するのは先程作成した「cactiuser」のパスワードです。例えば MariaDB 初期構成時の「root」のパスワードを入力しても弾かれます。

次にタイムゾーンの設定を行います。タイムゾーンの設定を行わなかった場合、これまた Pre-installation Checks で以下のエラーとなり弾かれます。こっちは先述したキャラクターセット問題とは異なり、修正するまで先に進むことができません。

MySQL – TimeZone Support
エラー: Your Cacti database login account does not have access to the MySQL TimeZone database. Please provide the Cacti database account “select” access to the “time_zone_name” table in the “mysql” database, and populate MySQL’s TimeZone information before proceeding.

このエラーは少なくとも 0.8.8 以降のバージョンで表示されるようになったようです。

参考サイト:Cactiを0.8.8hから1.0.4にアップデートしたら | tech.galaweb.jp

で、いざタイムゾーンの設定をしようにも、MariaDB のタイムゾーン用のシステムテーブルが初期状態では空っぽなんですよね。なのでこちらもコマンドが弾かれます。

MariaDB [(none)]> SELECT @@global.time_zone;
+——————————+
| @@global.time_zone |
+——————————+
| SYSTEM                      |
+——————————+
1 row in set (0.00 sec)MariaDB [(none)]> SET GLOBAL time_zone = ‘Asia/Tokyo’;
ERROR 1298 (HY000): Unknown or incorrect time zone: ‘Asia/Tokyo’

参考サイト:MySQLのタイムゾーン | @tmtms のメモ

そのあたりも含めてコマンドを実行していかなくてはいけません。以下のコマンドを実行してください。

[root@localhost ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Enter password: ※MariaDBのrootパスワードを入力
Warning: Unable to load ‘/usr/share/zoneinfo/leapseconds’ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/tzdata.zi’ as time zone. Skipping it.

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

(省略)

# instructions in http://fedoraproject.org/wiki/Systemd

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

default-time-zone=’Asia/Tokyo’

(省略)

[root@localhost ~]# systemctl restart mariadb

[root@localhost ~]# mysql -u root -p
Enter password: ※MariaDBのrootパスワードを入力

MariaDB [(none)]> SELECT @@global.time_zone;
+——————————+
| @@global.time_zone |
+——————————+
| Asia/Tokyo                  |
+——————————+

SET GLOBAL コマンドを使わない理由

「SET GLOBAL time_zone=’Asia/Tokyo’;」で変更することも可能なんですが、再起動するとまた @@global.time_zone が「SYSTEM」に戻ってしまいます。

更に、cactiuser が Timezone テーブルにアクセスできるよう、権限を付与しなければなりません。権限を付与しなかった場合 Pre-installation Checks で以下のエラーとなり次へ進めません。

Your Cacti database login account does not have access to the MySQL TimeZone database. Please provide the Cacti database account “select” access to the “time_zone_name” table in the “mysql” database, and populate MySQL’s TimeZone information before proceeding.

MariaDB に入り、以下の GRANT 文を実行してください。

MariaDB [(none)]> GRANT SELECT ON mysql.time_zone_name TO ‘cactiuser’@’localhost’ IDENTIFIED BY ‘cactiP@ssw0rd’;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye

最後に MariaDB のパラメータを最適化します。これも「Pre-installation Checks」で警告が出るやつの修正です。ただし、php のメモリ上限の変更に比べると即座に効果が表れるものではありません。まあ運用中に色々問題が出てくるパターンだと思うので、設定しておく方が無難です。

ただし、ここでの値はマシンのメモリが 16GB の場合の推奨値です。当然マシンのスペックによって一部の推奨値は変化するので実際は「Pre-installation Checks」中にここの値を変更することになると思います。

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

(省略)

# instructions in http://fedoraproject.org/wiki/Systemd

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

default-time-zone=’Asia/Tokyo’

max_allowed_packet=16777216
max_heap_table_size=248M
tmp_table_size=248M
join_buffer_size=496M
innodb_file_per_table=ON
innodb_file_format=Barracuda
innodb_large_prefix=1
innodb_buffer_pool_size=3878M
innodb_doublewrite=OFF
innodb_additional_mem_pool_size=80M
innodb_flush_log_at_trx_commit=2

(省略)

[root@localhost ~]# systemctl restart mariadb

「Pre-installation Checks」の結果を見ながら変更する場合は、その最中にファイルを編集した後 mariadb を restart してください。その後に更新ボタンを押せばよいです。

innodb_buffer_pool_size

特に注意しなければならないのが「innodb_buffer_pool_size」で、この値はメモリの容量にもよりますが、結構大きめに設定します。ありがちな凡ミスとして、実際の物理メモリ容量(+swapの状況などによって変動)以上を設定しようとして MariaDB が再起動できないことがあります。

cron

cacti は cron で5分に一回ポーリングするというのがデフォルト設定なんですが、なぜかコメントアウトされちゃってるんですよね。まあトラップだけという運用も無きにしも非ずなのかもしれませんが。とりあえずコメントアウトされている部分をコメント解除してください。

[root@localhost ~]# vi /etc/cron.d/cacti

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

[root@localhost ~]# systemctl reload crond

Cacti へのアクセスと初期設定

参考サイト:Windows Server に Cacti をインストールする | iPentec

Cacti へのアクセスの前に、firewalld と SELinux を停止しておきましょう。どちらか1つでも有効だと Appache への HTTP アクセスが弾かれます。

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted

上記設定後、「http://IPアドレス/cacti/」にアクセスします。

下図のようにログイン画面が表示されます。ユーザ名とパスワードは「admin/admin」です。

パスワードの変更画面が表示されます。Current Password は先程入力した “admin” です。パスワードがチェックマークになる条件は “英小文字・英大文字・数字・記号” が全て含まれ、かつ8文字以上です。

ライセンス同意画面が表示されるので、右下の「Accept GPL License Agrement」にチェックを付けたうえで、「Select default theme」を「Japanese」にし、「開始」をクリックします。

次はインストール前の Pre-installation Checks (構成チェック)です。今回は事前に色々設定していたため警告はほとんどありません。また、警告が表示されても大体は無視できるんですが、先述した mysql のタイムゾーンなど、解消するまで次へ進めないものもあります。

先述したように、この画面を見ながら CentOS 側で設定変更を行いデーモンをリロード(リスタート)しながら解決していくことも可能です。

バージョンだけ警告されているが無視

cacti が遅い場合

Pre-installation Checks をクリアしているにも限らず Cacti の動作が重い場合はネットワークを疑ってください。Cacti を開いているブラウザと Cacti サーバ間の通信が遅い場合は挙動が重くなります。

1台目の cacti なので「New Primary Server」を選択します。

アクセス権がおかしければ怒られます。全てクリアするのが正常です。

パスを決定します。デフォルトのまま進みます。

コミュニティ名やポート番号、ポーリングのインターバルを設定します。後で変更可能なので適当に決めましょう。

デフォルト

こんな感じに設定

TRAP のポートは?

実は、Cacti は TRAP に対応していません。ただ、標準では搭載していないという意味で、実装することは可能なようです。

参考リンク:Plugin for snmp trap receive | forums.cacti.net

テンプレートはとりあえず全てインストールします。

文字コードの設定を行っていなかった場合ここで怒られます。

チェックをつけてインストールを開始します。

インストール中。インストールは5分程度で完了します。

インストール完了。

Cacti にアクセスできるようになりました。

snmpd の有効化

なんとなんと、Cacti をインストールしても CentOS の snmpd は起動していません。自動起動にもなっていません。この状況だと、Cacti がポーリングしても CentOS が161番ポートで待ち受けていないので情報が一切溜まりません。

以下のコマンドで snmptd の起動と自動起動の設定を行ってください。これで Cacti 側の準備は終了です。

[root@localhost ~]# systemctl start snmpd

[root@localhost ~]# systemctl enable snmpd

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)