皆さんこんにちは。
AWS上にRHEL8 OSインスタンスを構築し、Cactiをインストールする際の手順を紹介します。
要件
- OSはRHEL8.6を選択する
- Cactiのパッケージは最新バージョンのものを利用する (今回はCacti-1.2.22-1バージョンを利用)
- 社内環境のNW機器のパフォーマンス監視ができるようにする
- 管理用サーバのため外部公開はせず、社内管理用セグメントからのみアクセスできるようにする
構成
AWS上に構築したい新Cactiサーバについて、想定する構成図を作成します。
※関係するリソース以外のものは省略して記載しています。
※別途「AWS Backup」「CloudWatch」の設定も入れていますが、今回の記事では設定手順は省略します。
ここでは例として、AWS上のCactiサーバから社内のネットワーク機器のリソースを監視できるように構築します。
その際、新サーバはAWS(社外)からVPNを経由して社内環境へアクセスする構成となるため、追加でUTMでのセキュリティポリシーの許可設定が必要になります。
さらにネットワーク機器自体も、場合によっては新CactiサーバからのSNMPアクセスを許可する必要があるので考慮が必要です。
Cactiサーバ構築手順
それでは実際に、Cactiサーバを構築する手順について記載します。
EC2インスタンスの作成
セキュリティグループの作成
インスタンスを作成する前に、要件に沿ったセキュリティグループを事前に作成します。
ルールは以下の通りです。
【インバウンドルール】
- SSH ソース:管理用セグメント
- HTTP ソース:管理用セグメント
【アウトバウンドルール】
デフォルトですべての通信が許可されています。(0.0.0.0/0)
必要に応じて制御の設定を追加ください。
インスタンスの作成
インスタンス起動画面より、RHEL8.6のAMIを選択し、インスタンスを起動します。
その他以下の通り項目を設定します。
※ インスタンスタイプ・ストレージについては監視対象規模等に応じて適宜選択ください。
- インスタンスタイプ:任意
- ネットワーク:任意のVPC
- サブネット:任意のプライベートサブネット
- セキュリティグループ:既存のセキュリティグループを選択する(先ほど作成したグループを選択)
- ストレージ:任意
インスタンスの作成が完了したら、インスタンスにSSHでアクセスし、設定を変更していきます。
パッケージインストール
Cacti(epel)インストール
Cactiが格納されている、epelリポジトリをまずインストールします。
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
その後、システムを更新します。
dnf update
続いて必要なパッケージをインストールします。
上記手順を実施しないと、下記epelインストールコマンドが実行できない場合があります。
dnf install epel-release -y
dnf install cacti -y
その他Cactiの利用に必要なApacheやsnmpdも一緒にインストールされるので、起動しておきます。
systemctl enable httpd.service --now systemctl enable snmpd.service --now
MariaDBの設定・インストール
現CactiサーバではDBにMySQLを使用していましたが、新CactiサーバではMySQLと完全互換性のあるMariaDBを使用します。
Cactiの設定情報はMariaDBに格納され、デフォルトの接続情報は「db.php」ファイルから確認できます。
下記はデフォルトの設定ですが、必要に応じて値を変更しても構いません。
/etc/cacti/db.php
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = 'cactiuser';
$database_port = '3306';
$database_retries = 5;
$database_ssl = false;
$database_ssl_key = '';
$database_ssl_cert = '';
$database_ssl_ca = '';
MariaDBをインストール・起動します。
dnf install mariadb-server -y systemctl enable mariadb.service --now
起動後、MariaDBにデータベースとユーザを作成します。
mysql -uroot << EOF create database cacti; grant all privileges on cacti.* to cactiuser@localhost identified by 'cactiuser'; flush privileges; EOF
mysql -u cactiuser -p cactiuser < /usr/share/doc/cacti/cacti.sql
cronの設定
Cactiがデータを取得するために、Cronの設定が必要です。
下記ファイルの行先頭のコメントアウトを外し、定期的なデータ取得ができるように設定します。
/etc/cron.d/cacti
*/5 * * * * apache /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
再起動して設定を反映させます。
systemctl restart crond
httpdの設定
Apacheは追加のインストール不要で利用できるようになっています。
(Cactiインストール時に同時にインストールされるため)
Apahceのアクセス許可を変更し、管理セグメントからHTTPでアクセスできるようにします。
/etc/httpd/conf.d/cacti.conf <Directory /usr/share/cacti/> <IfModule mod_authz_core.c> # httpd 2.4 Require host localhost Require ip XXX.XXX.XXX.XXX/XX ##行を追加し、許可するIPを記載## </IfModule> <IfModule !mod_authz_core.c> # httpd 2.2 Order deny,allow Deny from all Allow from localhost </IfModule> </Directory>
再起動して設定を反映させます。
systemctl restart httpd.service
ブラウザからCacti(http://<Cacti IP>/cacti/)へアクセスし、ログイン画面が現れることを確認します。
初期ユーザー:admin
初期パスワード:admin
初回ログイン後、パスワードの変更を求められるので変更して保存します。
言語は「Japanese」を選択し、
「Accept GPL License Agreement」にチェックを入れます。
Cactiログイン後のチューニング
ログインし、ライセンス契約に同意しても、まだCactiを操作することはできません。
インストール前のチェック項目がの状態が「合格」にならないと、次の画面に進むことができません。
したがって、設定値のチューニングが必要となります。
PHPの設定
エラーが出ている項目、「max_execution_time」「memory_limit」「date.timezone」について行を追加し、推奨値を設定します。
/etc/pip.ini -------------------------- ; Maximum execution time of each script, in seconds ; http://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 60 ##追加## -------------------------- ; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit = 400M ##追加## -------------------------- [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = Asia/Tokyo ##追加##
変更を反映させるために再起動します。 その後ブラウザをリロードし、エラーが解消すればOKです。
systemctl restart httpd.service
MariaDBの設定
次にMariaDBへのアクセス権の設定と、タイムゾーンの設定が必要になります。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot mysql mysql -u root -e "SET GLOBAL time_zone = 'Asia/Tokyo';"
/etc/my.cnf.d/mariadb-server.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mariadb/mariadb.log pid-file=/run/mariadb/mariadb.pid default-time-zone=Asia/Tokyo ##追加##
MariaDBを再起動します。
systemctl restart mariadb.service
設定が反映されているか確認します。
mysql -uroot -e "show variables like '%time_zone%';" +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | JST | | time_zone | Asia/Tokyo | +------------------+------------+
またcactiuserに対しても権限を付与します。
mysql -uroot << EOF grant select on mysql.time_zone_name to cactiuser@localhost identified by 'cactiuser'; flush privileges ; EOF
以下は必須の変更ではありませんが、必要に応じて行を追加しMariaDBのチューニングを行います。
/etc/my.cnf.d/mariadb-server.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mariadb/mariadb.log pid-file=/run/mariadb/mariadb.pid default-time-zone=Asia/Tokyo character_set_server=utf8mb4 collation_server=utf8mb4_unicode_ci character_set_client=utf8mb4 max_heap_table_size=62M tmp_table_size=62M join_buffer_size=123M innodb_file_format=Barracuda innodb_large_prefix=1 innodb_buffer_pool_size=1G innodb_flush_log_at_timeout=3 innodb_read_io_threads=32 innodb_write_io_threads=16 innodb_buffer_pool_instances=19 innodb_io_capacity=5000 innodb_io_capacity_max=10000 innodb_doublewrite=OFF
DBのcharacter setの変更
データベースcactiのcharacter setを「utf8mb4_unicode_ci」に変更する必要があります。
mysql -uroot -e 'ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
以下のコマンドで「utf8mb4_unicode_ci」に変わったことを確認できます。
mysql -uroot -e 'show create database cacti'
各種設定が完了したら、準備完了です。
Cacti画面でインストールを実行することで、Cactiが利用できるようになります。
AWSのセキュリティグループと合わせて、社内環境とAWS環境の境界となるUTMでも、必要に応じてセキュリティポリシーを設定しておきます。
SSH、HTTP以外にもAWS→社内ネットワーク機器向けのSNMP許可設定も必要となります。
※アウトバウンド通信のみのため、AWSのセキュリティグループでは設定不要