CentOS7にcacti1.2.8をインストールする＋グラフを日本語化する(2020/1/20更新)

CentOS8＋Dockerな環境で整理しなおしました。
**[docker-composeでcacti1.2.8＋グラフを日本語化](https://qiita.com/bashaway/items/f0ac09822bc10c0a7470)**

## はじめに
このエントリはCentOS7にcactiをインストールする手順を記載します。

## 更新
2020/1/20 CentOS、cacti、ともに最新版で更新しています。

## 対象機器および環境
* CentOS7(7.7.1908)
* cacti/spine(1.2.8)
* MariaDB(10.4)

## 関連するエントリ
[cactiの過去グラフが平均化されないようにする方法](https://qiita.com/haruca_tech/items/bc4de1ba6d1b97298031)

## cactiとは

[cacti](http://www.cacti.net)

サーバや通信機器のグラフレポーティングツール。
基本的な機能はSNMPにより情報を取得しグラフ化する。
データの収集はrrdtoolによる。
自作スクリプトを利用すればあらゆる数値情報をグラフ化できる。

## インストール手順

### SELinux

```:/etc/selinux/config
-----8<-----snip-----8<-----
#SELINUX=enforced
SELINUX=disabled
-----8<-----snip-----8<-----
```

再起動して設定を適用する。

```
# shutdown -r now
# getenforce
Disabled
#
```

### MariaDB用リポジトリ準備

手順は[公式サイト](https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-amd64--centos7&mirror=exascale&version=10.4)を参照

```:/etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

mariadb-libsを事前に削除しておく

```
# yum remove mariadb-libs
```


### パッケージインストール

cactiはepelに含まれるので、リポジトリをインストールする。
cactiと付随するソフトウェアは依存関係で自動的にインストールされる。
日本語フォントも入れておくので、明示的に指定する。

```
# yum install epel-release
# yum update
# yum install mariadb-server cacti-spine php ipa-*-fonts
```

### ファイアウォール設定（firewalld）

必要なポートに穴あけ

```
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=snmp --zone=public --permanent
# firewall-cmd --add-service=snmptrap --zone=public --permanent
# firewall-cmd --reload
```

### apache設定

日本語対応

```:/etc/sysconfig/httpd
-----8<-----snip-----8<-----
#LANG=C
HTTPD_LANG=ja_JP.UTF-8
-----8<-----snip-----8<-----
```

サービス自動起動の設定

```
# systemctl enable httpd
# systemctl start httpd
# systemctl status httpd
```

### php環境設定

```:/etc/php.ini
-----8<-----snip-----8<-----
;max_execution_time = 30
max_execution_time = 60
;memory_limit = 128M
memory_limit = 800M
date.timezone = 'Asia/Tokyo'
-----8<-----snip-----8<-----
```




### MariaDBの設定

MariaDBの設定はcacti利用時にチェックされる下記の設定を追加する。

```/etc/my.cnf.d/server.cnf
-----8<-----snip-----8<-----
[server]
collation_server=utf8mb4_unicode_ci
character-set-server=utf8mb4
character_set_client=utf8mb4
max_heap_table_size=32M
tmp_table_size=32M
join_buffer_size=64M
innodb_file_format=Barracuda
innodb_large_prefix=1
innodb_buffer_pool_size=1024M
innodb_flush_log_at_timeout=3
innodb_read_io_threads=32
innodb_write_io_threads=16
innodb_buffer_pool_instances=11
innodb_io_capacity=5000
-----8<-----snip-----8<-----
```

サービス自動起動の設定

```
# systemctl enable mariadb
# systemctl status mariadb
# systemctl start  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
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n]
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the 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!
#
```

タイムゾーン設定

```
# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
```


cacti用データベースの作成

```
# mysql -u root -p
MariaDB> create database cacti;
MariaDB> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipwd';
MariaDB> grant select on mysql.time_zone_name to cactiuser@localhost identified by 'cactipwd';
MariaDB> flush privileges;
MariaDB> quit;

# mysql -u cactiuser -pcactipwd cacti < /usr/share/doc/cacti-1.2.*/cacti.sql
```


### cacti環境設定

cron有効化（デフォルトで設定されているもののコメントアウトを解除）

```:/etc/cron.d/cacti
*/5 * * * *     apache  /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
```

cactiで利用するデータベース設定

```:/usr/share/cacti/include/config.php
-----8<-----snip-----8<-----
$database_default  = 'cacti';
$database_username = 'cactiuser';
$database_password = 'cactipwd';
-----8<-----snip-----8<-----
```


spine用の設定ファイルをバックアップしてから編集
`cp /etc/spine.conf /etc/spine.conf.orig`

```:/etc/spine.conf
-----8<-----snip-----8<-----
DB_Host                 localhost
DB_Database             cacti
DB_User                 cactiuser
DB_Pass                 cactipwd
DB_Port                 3306

RDB_Host                localhost
RDB_Database            cacti
RDB_User                cactiuser
RDB_Pass                cactipwd
RDB_Port                3306
-----8<-----snip-----8<-----
```

apache用の設定ファイル修正

```:/etc/httpd/conf.d/cacti.conf
-----8<-----snip-----8<-----
<Directory /usr/share/cacti/>
        <IfModule mod_authz_core.c>
                # httpd 2.4
                Require host localhost
                Require all granted        # <--- 追加
        </IfModule>
        <IfModule !mod_authz_core.c>
                # httpd 2.2
                Order deny,allow
                Deny from all
                Allow from localhost
        </IfModule>
</Directory>
-----8<-----snip-----8<-----
```

apacheを再起動する
`systemctl restart httpd`


### web上での初期設定

ブラウザで
[http://[IPアドレス]/cacti/]()
にアクセスする。



初期アカウントは admin/admin でログイン
![Screenshot from Gyazo](https://gyazo.com/a5228098cfe01716e03853f7ba7cf9fa/raw)

直後に変更を促されるので、パスワードを変更する。
![Screenshot from Gyazo](https://gyazo.com/3b2d06832bcbd97f09ead6af765b5b85/raw)

ライセンスに同意して次へ進む
![Screenshot from Gyazo](https://gyazo.com/5647932d6e00c091e33019191d285d22/raw)

　
環境変数などの確認
（問題がある箇所は Passed以外になったり、赤字で表示。適宜修正して右上のリロードマークをクリックしながらチェック）
![Screenshot from Gyazo](https://gyazo.com/3c6f7f845aa5a1f402e1d2ea8dd99054/raw)

（問題がない状態となれば、緑のいいねマークになる）
![Screenshot from Gyazo](https://gyazo.com/811472f22d12284d4e29792f0f6e0c38/raw)

　
確認に問題なければ、最下部の「Next」がクリックできる状態になるので、クリックする。
（問題がある場合には、確認結果が赤文字になり、「Next」がクリックできない状態になる）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/334782/838feb74-27c8-d8ac-a109-af6e0f94c218.png)

　
今回はスタンドアロンでの構築なので、「New Primary Server」（デフォルト）を選択して「Next」をクリック
![Screenshot from Gyazo](https://gyazo.com/b1369c2711a48531baa8b916a438a181/raw)

　
ディレクトリのパーミッション確認に問題なければ、最下部の「Next」がクリックできる状態になるので、クリックする。
（問題がある場合には、確認結果が赤文字になり、「Next」がクリックできない状態になる）
![Screenshot from Gyazo](https://gyazo.com/8bb258fe7af4cab96915988a1d2f4a93/raw)

　
その他のソフトウェア確認に問題なければ、最下部の「Next」がクリックできる状態になるので、クリックする。
（問題がある場合には、確認結果が赤文字になり、「Next」がクリックできない状態になる）
![Screenshot from Gyazo](https://gyazo.com/5530cec0978ea775b175410e7f61a796/raw)

　
デフォルトのプロファイルを選択。今回はCron設定を５分おきのポーリングを５分で選択。
ScanModeをオン（ボタンが右側になり薄い緑がON状態：ちょっとわかりにくい）にすると、スキャンしてくれる。
![Screenshot from Gyazo](https://gyazo.com/fc2acf013e8e8e8b0d11c193787aed7c/raw)

　
必要なテンプレートを選択して「Next」をクリック
（とりあえず全部選択しといてよいです）
![Screenshot from Gyazo](https://gyazo.com/58beebf30ab9f2a391c8ed5cbf1cb412/raw)

　
文字コードのチェックで問題なければ、そのまま「Next」をクリック
（文字コードを変えろという指令がでる場合は指示に従う。　）
![Screenshot from Gyazo](https://gyazo.com/a9fbde95b97888095ea7d41444644bd6/raw)


Confirm Installation にチェックを入れて、「Install」をクリック
![Screenshot from Gyazo](https://gyazo.com/dcaf3bbce831cb66f7f979027598f5be/raw)



インストールログが表示されれば完了。「Get Started」をクリック
![Screenshot from Gyazo](https://gyazo.com/2ac81a30cc16dcbc51e40b49bc8daccb/raw)

全部終わると、トップページに遷移します。
![Screenshot from Gyazo](https://gyazo.com/d568ad96412a1007ad41dc19f4162858/raw)


### spineの設定

標準のPollerよりも高速なSpineでポーリングできるようにする。

上部メニュ「Console」→サイドメニュ「Configuration」→「Settings」→「Poller」タブのPollerTypeを "cmd.php" から "spine" に変更して、右下の「Save」をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/334782/19e128a7-7260-9ff5-9bcd-ebb75c526e50.png)


もし、うまく値が取得できない場合は、コマンドラインで動作確認してみる

```
# spine -V=3 -R
SPINE: Using spine config file [/etc/spine.conf]
SPINE: Version 1.1.38 starting
2019/01/09 23:07:24 - SPINE: Poller[1] NOTE: Spine will support multithread device polling.
2019/01/09 23:07:24 - SPINE: Poller[1] DEBUG: Initial Value of Active Threads is 0
2019/01/09 23:07:24 - SPINE: Poller[1] SPINE: Active Threads is 1, Pending is 1
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] NOTE: There are '5' Polling Items for this Device
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] DS[1] SCRIPT: perl /usr/share/cacti/scripts/unix_processes.pl, output: 184
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] DS[2] SCRIPT: perl /usr/share/cacti/scripts/loadavg_multi.pl, output: 1min:0.00 5min:0.02 10min:0.09
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] DS[3] SCRIPT: perl /usr/share/cacti/scripts/unix_users.pl '', output: 1
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] DS[4] SCRIPT: perl /usr/share/cacti/scripts/linux_memory.pl 'MemFree:', output: 793572
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] DS[5] SCRIPT: perl /usr/share/cacti/scripts/linux_memory.pl 'SwapFree:', output: 2097148
2019/01/09 23:07:24 - SPINE: Poller[1] Device[1] TH[1] Total Time: 0.058 Seconds
2019/01/09 23:07:24 - SPINE: Poller[1] POLLR: Active Threads is 0, Pending is 0
2019/01/09 23:07:25 - SPINE: Poller[1] SPINE: The Final Value of Threads is 0
2019/01/09 23:07:25 - SPINE: Poller[1] Time: 1.0277 s, Threads: 1, Devices: 1
#
```

outputにそれっぽい数字が取得できていることが確認できれば、取得できているはず。



### 動作確認
　
適当なグラフのタイトルを日本語にしてみると、きちんと日本語化もできています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/334782/5ce5275a-df7d-30cf-506a-387bfc86528f.png)

## その他の設定

### 過去グラフの参照
インストール直後のデフォルト設定のままでは、３日以上前のデータは平均化され、取得した値が消えてしまいます。
以下参照して、長期間データを細かく取得できるようにしておくとよいです。

[cactiの過去グラフが平均化されないようにする方法](https://qiita.com/haruca_tech/items/bc4de1ba6d1b97298031)


### https化

自営CAでのサーバ証明書発行は **[こちら](https://qiita.com/haruca_tech/items/a9cf4a9168f325e65513#freeradius%E3%82%B5%E3%83%BC%E3%83%90)** を参照してください。

```
# yum install mod_ssl
# systemctl restart httpd
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload
```



## さいごに

### 感想
0.8.8の頃に比べると格段にインストールしやくすなったと思います。
1.xになってUIもスタイリッシュになったのですが、動作がもっさりしてしまったような。。。