Rocky LinuxでCacti構築

Cacti,Others,RockyLinux/CentOS

Rocky Linux8でCactiの構築手順を纏めてみました。
Rocky LinuxへのCactiパッケージのインストールからブラウザでのCacti初期インストールまでの手順を纏めています。
Rocky Linuxは仮想マシン(Azure VM)を利用しています。

スポンサーリンク

CactiパッケージインストールからConfig設定まで

参考サイト

今回のインストールにあたってはこちらのサイトを参考にしております。

Installing on CentOS/RHEL/ROCKY

セットアップ環境条件

セットアップ環境です。
Rocky Linuxは仮想マシン(Azure VM)を利用しています。
パッケージを使ってインストールしています。

    • 仮想マシン(Azure VM)を利用
      • Standard D2lds v5 (2 vcpu 数、4 GiB メモリ)
      • Rocky Linux release 8.8 (Green Obsidian)
    • パッケージはセットアップ時点(2023年7月)の最新を使用
      • cactiは1.2.23を使用
      • mariadb-server-10.3.35
      • php-fpm-8.2.8
      • cacti-spineもインストール

※SELinuxは無効化した状態で実施しています。SELinux有効化している場合にはSELinuxでの許可設定が追加で必要になります。

仮想マシン(Azure VM)をデプロイ

仮想マシン(Azure VM)のデプロイ手順はこちらに纏めています。
SELinuxの無効化手順もこちらに纏めています。

Rocky Linux9の場合のSELinux無効化手順はこちらに纏めています。

パッケージインストール

パッケージをインストールします。
Cactiをインストールするとphp7が一緒にインストールされます。
php8.xを利用する場合はremiリポジトリで8.xを利用するように設定します。

※RRD Tool、PHP、Httpd(Apache)等はCactiの依存関係として一緒にインストールされます。
※mariadb-serverもCactiと一緒にインストールされますが、パッケージ不足のエラーが発生したので個別にインストールしています。

#epelインストール
[root@sv-cacti-01 ~]# dnf install epel-release

#remiリポジトリ設定(PHP8.2を使用するように変更)
[root@sv-cacti-01 ~]# dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
[root@sv-cacti-01 ~]# dnf clean all
[root@sv-cacti-01 ~]# dnf -y makecache

[root@sv-cacti-01 ~]# dnf module list php
[root@sv-cacti-01 ~]# dnf -y module reset php
[root@sv-cacti-01 ~]# dnf -y module enable php:remi-8.2

#パッケージインストール
[root@sv-cacti-01 ~]# dnf –enablerepo=epel -y install -y mariadb-server mariadb mariadb-devel
[root@sv-cacti-01 ~]# dnf –enablerepo=epel -y install cacti
[root@sv-cacti-01 ~]# dnf –enablerepo=epel -y install cacti-spine

php.iniの編集

php.inの設定です。
ファイルバックアップ後に設定しています。
Cactiで必要となる設定をしています。

#PHP.iniの編集
[root@sv-cacti-01 ~]# cp -p /etc/php.ini /etc/php.ini.`date “+%Y%m%d"`
[root@sv-cacti-01 ~]# vi /etc/php.ini

#【追加変更内容】
max_execution_time = 60
memory_limit = 512M
date.timezone = Asia/Tokyo

php-fpmの設定

php-fpmの設定です。
ファイルバックアップ後に設定しています。
Cacti初期セットアップでは必要ない設定なのですが、php-fpmのCPU使用率が高くなることがあったので設定しています。

※仮に設定した値です。利用用途や環境に合わせて設定します。

#PHP-fpmの設定
[root@sv-cacti-01 ~]# cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.`date “+%Y%m%d"`
[root@sv-cacti-01 ~]# vi /etc/php-fpm.d/www.conf

#【追加変更内容】
pm = static
pm.max_children = 2
pm.max_requests = 500 

MariaDBセキュアインストール

MariaDBのセキュアインストールを実行します。
セキュアインストールにあたってはMariaDBを起動しておく必要があります。

#MariaDB起動
[root@sv-cacti-01 my.cnf.d]# systemctl start mariadb

#MariaDBセキュアインストール
[root@sv-cacti-01 mariadb]# 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.

#rootユーザーのパスワード入力。インストール直後はrootユーザー未設定なのでそのままEnterで進みます。
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.

#rootユーザーのパスワード設定確認。yを選択してパスワード設定します。
Set root password? [Y/n] y

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.

#anonymousユーザーの削除確認。yを選択して削除します。
Remove anonymous users? [Y/n] y

… Success!

Normally, root should only be allowed to connect from 'localhost’. This
ensures that someone cannot guess at the root password from the network.

#rootユーザーのリモートログイン確認。リモートからのログイン要件が無い場合はyを選択します。
Disallow root login remotely? [Y/n] y

… 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.

#testデータベースの削除確認。利用しない無い場合はyを選択し削除します。
Remove test database and access to it? [Y/n] y

– 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.

#testデータベースの削除確認。利用しない無い場合はyを選択し削除します。
Reload privilege tables now? [Y/n] y

… 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!

MariaDB設定

MariaDBの設定です。
TimeZoneの設定とserver.cnfを設定します。

server.cnfの設定はサーバリソース(メモリサイズ)によって変わります。
自身の環境に合わせて設定するようにします。

※server.cnfは存在していませんので新規作成します。
※MariaDBのサーバパラメータチェックはCactiセットアップ時に実行されます。Warnningが発生した場合はパラメータを調整します。(そのまま進める事も可能です。)
※今回はCactiのパラメータチェックでエラーが発生しないように設定した場合の設定値にしています。

#ファイルバックアップ(今回はserver.cnfを別で作成するので必要ないが念のため)
[root@sv-cacti-01 my.cnf.d]# cp -p /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.`date “+%Y%m%d"`

#TimeZone設定
[root@sv-cacti-01 mariadb]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Enter password:MariaDBに設定したrootユーザーのパスワードを入力
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list’ as time zone. Skipping it.
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.

#MariaDB設定ファイル追加(server.cnf)
[root@sv-cacti-01 my.cnf.d]# vi /etc/my.cnf.d/server.cnf

#【追記内容】

[mariadb-10.3]
default-time-zone=’Asia/Tokyo’
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

max_heap_table_size= 128M
tmp_table_size= 128M
join_buffer_size = 8M #Cacti設定時にエラーが発生しないようにした場合の設定値。
innodb_flush_log_at_timeout = 5
innodb_write_io_threads = 16
innodb_read_io_threads = 32
max_allowed_packet = 16777777
innodb_file_per_table = ON
innodb_buffer_pool_size = 2048M
innodb_flush_log_at_trx_commit = 2
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000
sort_buffer_size = 8M #Cacti設定時にエラーが発生しないようにした場合の設定値。
innodb_doublewrite = off
innodb_buffer_pool_instances = 10

innodb_file_format=Barracuda
innodb_large_prefix=1

#設定反映(サービス再起動)
[root@sv-cacti-01 my.cnf.d]# systemctl restart mariadb

データベース設定

Cacti用のデータベース作成、Cacti用DBユーザーの作成、権限付与、文字コードをします。
最後にSQLを読み込んでCacti用のテーブルを作成します。

※データベースユーザー名はcactiuserとしています。任意で設定可能です。

#DB設定(データベース作成、ユーザー作成、権限付与、文字コード設定)
#DBログイン
[root@sv-cacti-01 my.cnf.d]# mysql -u root -p

#DB作成
MariaDB [(none)]>create database cacti;

#DBユーザー作成
MariaDB [(none)]>CREATE USER 'cactiuser’@’localhost’ IDENTIFIED BY 'Cactiuserに設定するパスワード’;

#権限付与(データベース、TimeZone)
MariaDB [(none)]>GRANT ALL PRIVILEGES ON cacti.* TO 'cactiuser’@’localhost’;

MariaDB [(none)]>grant select on mysql.time_zone_name to cactiuser@’localhost’;
#文字コード設定
MariaDB [(none)]>ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
#変更内容反映
MariaDB [(none)]>FLUSH PRIVILEGES;
#テーブル作成(データベースCactiに作成)
MariaDB [(none)]> use cacti;
Database changed
MariaDB [cacti]>source /usr/share/doc/cacti/cacti.sql
MariaDB [cacti]>FLUSH PRIVILEGES;

Cron設定

CactiのCron設定します。
コメントアウトを外し実行されるようにします。

※時間はPollerの間隔です。1分間隔にする場合は/1にします。

#Crond設定
[root@sv-cacti-01 my.cnf.d]# vi /etc/cron.d/cacti

#コメントアウトを外す(有効化)
/5 * * * * apache /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

DB接続設定

データベースへの接続設定します。
設定ファイルをバックアップ後編集しています。
ローカルのデータベースを利用していますのでユーザー名とパスワードを確認変更します。

※今回はDBユーザー名をcactiuserとしていますのでユーザー名の変更は必要ありませんでした。

#config.phpの設定
[root@sv-cacti-01 my.cnf.d]# cp -p /usr/share/cacti/include/config.php /usr/share/cacti/include/config.php.`date “+%Y%m%d"`
[root@sv-cacti-01 my.cnf.d]# vi /usr/share/cacti/include/config.php
$database_type = 'mysql’;
$database_default = 'cacti’;
$database_hostname = 'localhost’;
$database_username = 'cactiuser’;
$database_password = 'cactiuser(DBユーザー)のパスワード’;
$database_port = '3306’;
$database_retries = 5;

#db.phpの設定
[root@sv-cacti-01 my.cnf.d]# cp -p/etc/cacti/db.php /etc/cacti/db.php.`date “+%Y%m%d"`

[root@sv-cacti-01 my.cnf.d]# vi /etc/cacti/db.php

$database_type = 'mysql’;
$database_default = 'cacti’;
$database_hostname = 'localhost’;
$database_username = 'cactiuser’;
$database_password = 'cactiuser(DBユーザー)のパスワード’;
$database_port = '3306’;
$database_retries = 5;
$database_ssl = false;
$database_ssl_key = ";
$database_ssl_cert = ";
$database_ssl_ca = ";
$database_persist = false;

Cacti Spineの設定

Cacti SpineにもDB接続用の設定が必要になります。
設定ファイルをバックアップ後にファイル編集しています。
MariaDB(Cacti)へ接続するためのユーザー名やパスワード設定します。

#spine.confの設定
[root@sv-cacti-01 my.cnf.d]# cp -p /etc/spine.conf /etc/spine.conf.`date “+%Y%m%d"`
[root@sv-cacti-01 my.cnf.d]# vi /etc/spine.conf

DB_Host localhost
DB_Database cacti
DB_User cactiuser
DB_Pass cactiuser(DBユーザー)のパスワード
DB_Port 3306

snmpd.conf設定

snmpd.confを設定します。
コミュニティ名やシステムロケーション名はtamanegiとしています。

#snmpd.conf設定
[root@sv-cacti-01 my.cnf.d]# cp -p /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.`date “+%Y%m%d"`
[root@sv-cacti-01 my.cnf.d]# vi /etc/snmp/snmpd.conf

#設定例(有効な行のみを抜粋しています。)
# groupName securityModel securityName

group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1

# group context sec.model sec.level prefix read write notif
access notConfigGroup “" any noauth exact systemview none none

## sec.name source community
com2sec local localhost tamanegi #LocalHostのコミュニティ名を設定
com2sec mynetwork 10.0.1.0/24 tamanegi #MyNetworkのコミュニティ名を設定

## group.name sec.model sec.name
group MyRWGroup v2c local
group MyROGroup v2c mynetwork

## incl/excl subtree mask
view all included .1 80

## context sec.model sec.level prefix read write notif
access MyROGroup “" v2c noauth exact all none none
access MyRWGroup “" v2c noauth exact all all all

syslocation tamanegi (edit /etc/snmp/snmpd.conf) #syslocationにもTamanegiを設定しています。
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

※テスト用の設定です。環境に合わせて適時修正願います。

httpd設定

httpdの設定です。
パッケージでCactiをインストールした場合はcacti.confが生成されています。
このファイルを編集します。
アクセス許可したいIPをRequire ipとして追加します。

#cacti.conf(httpd.conf)設定
[root@sv-cacti-01 my.cnf.d]# cp -p /etc/httpd/conf.d/cacti.conf /etc/httpd/conf.d/cacti.conf.`date “+%Y%m%d"`
[root@sv-cacti-01 my.cnf.d]# vi /etc/httpd/conf.d/cacti.conf

#【RequiredIPを追加】
#
# Cacti: An rrd based graphing tool
#

# For security reasons, the Cacti web interface is accessible only to
# localhost in the default configuration. If you want to allow other clients
# to access your Cacti installation, change the httpd ACLs below.
# For example:
# On httpd 2.4, change “Require host localhost" to “Require all granted".
# On httpd 2.2, change “Allow from localhost" to “Allow from all".

Alias /cacti /usr/share/cacti

<Directory /usr/share/cacti/>
 <IfModule mod_authz_core.c>
  # httpd 2.4
  Require ip 許可したいIP(例 10.0.1.0/16)
  Require host localhost
 </IfModule>
 <IfModule !mod_authz_core.c>
  # httpd 2.2
  Order deny,allow
  Deny from all
  Allow from localhost
 </IfModule>
</Directory>

~以下略~

サービス起動設定

サービスを起動します。併せて自動起動設定します。

#サービス起動
[root@sv-cacti-01 my.cnf.d]# systemctl restart mariadb
[root@sv-cacti-01 my.cnf.d]# systemctl start httpd
[root@sv-cacti-01 my.cnf.d]# systemctl start php-fpm

#自動起動有効化
[root@sv-cacti-01 my.cnf.d]# systemctl enable mariadb
[root@sv-cacti-01 my.cnf.d]# systemctl enable httpd
[root@sv-cacti-01 my.cnf.d]# systemctl enable php-fpm

Cactiインストール

ブラウザでCactiにアクセスしてインストールします。
http://サーバのIPアドレス/cacti/でアクセスします。

Cactiインストール

アクセスするとログイン画面が表示されます。
ユーザー名、パスワードを入力しログインします。

※インストール直後のユーザー名、パスワードは共に”admin”です。

パスワード変更画面です。
初期パスワードの変更が要求されます。
新パスワードを設定しSaveします。

ライセンス確認画面です。
画面のテーマや言語も本画面で設定します。

※今回は言語だけを日本語にしています。

インストールや設定の確認画面です。
PHPやMariaDBの設定(パラメータ)設定が推奨値に沿ってない場合は警告やエラーが表示されます。
都度調整して設定します。

※警告の場合はそのままセットアップを進める事も出来ます。

インストールの種類選択画面です。
そのまま進めます。

ディレクトリのパーミッション確認画面です。
警告が表示された場合はパーミッション設定します。

※警告と同時にパーミッション適用コマンドも表示されます。

各アプリケーションのパスやバージョンのチェック画面です。
Spine Config File Pathが入って無かったので設定します。

※パスが入力されていない場合でもグリーンになる場合があるのでチェックします。

データ入力方法に関する確認画面が表示されます。
内容確認後チェックを入れて進めます。

※Cactiのインストール後に実行のアクションに関する説明です。

 

デフォルト設定値の確認画面です。
データの取得間隔を設定します。
Default Automation Networkで自動スキャン可否や対象のネットワークレンジの設定をします。
今回はNetwork Rangeだけ自身のネットワークに変更しています。

Automation Networks

テンプレートの設定画面です。
必要なテンプレートにチェックを入れて

Device Templates

DatabaseやTableのセットアップ確認画面です。
そのまま進めます。

インストール確認画面です。
インストールを確認にチェックを入れます。
インストールを開始します。
完了画面が表示されたら始めるを選択します。
Cactiのトップ画面が確認出来ました。

最後に

今回はRocky LinuxにCactiのインストールをパッケージ使ってやってみました。
バージョンやインストール対象のOSによって手順が変わる事が多いですが、大きな流れは変わる事は少ないかと思います。
引き続き色々試してみたいと思います。

Windows ServerのSNMPサービス構成からCactiでのデバイス登録手順についてはこちらに纏めています。

スポンサーリンク