CentOS 6.5でzabbix+nginx+php-fpm環境を構築してみる



## zabbix インストール

参考：[Zabbix サーバ 2.2.3のインストール](http://qiita.com/gitya107/items/3e0e4dcdc82ce1ff2f44), [Zabbix-2.2をインストールする手順（using PostgreSQL/Nginx)](http://qiita.com/pekokun@github/items/137dbb46ad5cb5bc94c5)

### yumリポジトリ設定

例によって公式リポジトリから最新版を入手します。

```bash:yumリポジトリ追加＆インストール
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
$ sudo yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent
$ zabbix_server -V
Zabbix server v2.2.4 (revision 46772) (23 June 2014)
Compilation time: Jun 26 2014 02:27:30
$ zabbix_agent -V
Zabbix agent v2.2.4 (revision 46772) (23 June 2014)
Compilation time: Jun 26 2014 02:31:36
```

公式の最新版からインストールします。

インストールが終わったら`/etc/yum.repos.d/zabbix.repo`は`enable=0`にしておいてもいいかもしれません。

### MySQL設定

まずはDB設定からで、MySQLを使用します。

```bash:mysqlインストール
$ sudo yum -y install mysql-server
$ sudo /usr/bin/mysql_secure_installation
$ sudo service mysqld start
$ sudo chkconfig mysqld on
```

ここではmysql-serverが未インストールだったので、yumからのインストールと初期設定をやっていますが、既に使っているDBがあるなら飛ばしてもいいかもしれません。

```bash:mysql初期設定
$ mysql -u root -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '任意のパスワード';
mysql> exit
$ cd /usr/share/doc/zabbix-server-mysql-2.2.4/create/
$ mysql -u root -p zabbix < schema.sql
$ mysql -u root -p zabbix < images.sql
$ mysql -u root -p zabbix < data.sql
```

必要なスキーマなどはSQLファイルが用意されているので、読み込ませるだけになります。

### zabbix-server設定

概ね必要な設定は初期設定で入っているので、DBPasswordだけ設定します。

```diff:/etc/zabbix/zabbix_server.conf
@@ -114,6 +114,8 @@
 # Default:
 # DBPassword=

+DBPassword=MySQLに設定した任意のパスワード
+
 ### Option: DBSocket
 #      Path to MySQL socket.
 #
```

その他にDBHost/DBName/DBUser辺りは必要に応じて設定変更が必要らしいです。

### zabbixサービス起動

```bash:zabbix-server起動
$ sudo service zabbix-server start
Starting Zabbix server:                                    [  OK  ]
$ chkconfig --list | grep zabbix
zabbix-agent    0:off   1:off   2:off   3:off   4:off   5:off   6:off
zabbix-server   0:off   1:off   2:off   3:off   4:off   5:off   6:off
$ sudo chkconfig zabbix-server on
$ chkconfig --list zabbix-server
zabbix-server   0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

まずは、サーバ側のサービスを起動しておきます。

```bash:zabbix-agent起動
$ sudo service zabbix-agent start
Starting Zabbix agent:                                     [  OK  ]
$ sudo chkconfig zabbix-agent on
$ chkconfig --list zabbix-agent
zabbix-agent    0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

ついでに、サーバ本体もzabbix-agentとして登録するために、エージェントも起動しておきました。

### zabbix-web設定

nginx側の設定前に、zabbix-web関連のファイルを適当なディレクトリでnginx側から見れるように設定しておきます。

```bash:nginxでzabbixを見れるように
$ cd /etc/zabbix
$ ls -ld web
drwxr-x--- 2 apache apache  4096  6月 27 20:34 2014 web
$ sudo chown nginx.nginx web
drwxr-x--- 2 nginx  nginx   4096  6月 27 20:34 2014 web
$ cd /var/www
$ sudo ln -s /usr/share/zabbix .
```

デフォルト(rpmで入れたばかりの)状態ではapache権限になっていたりするので、その辺りを変更したり、ベースとして`/var/www`配下でファイルを管理したいので、シンボリックリンクを設定したりします。

zabbix側の設定としてはここまででほぼ完了です。

## nginx+php-fpmで監視画面を起動

参考：[CentOSにてnginxでPHPを動かす](http://qiita.com/utano320/items/36b6eac2bbd5bb5657f6), 


### nginx設定

nginx側にサーバ設定を丸ごと追加します。もしかしたら単に`location`単位で増やした方が簡単なのかもしれませんが、サーバ設定ファイル丸ごと別管理にしたかったので(^_^;)

ここで追加している`server_name`について、別途DNS設定などを追加する必要がありますが、現状はローカルPCの`/etc/hosts`に追記する方向で動作確認しています。

別途認証とかの設定を追加したりしたら、DNS設定入れようかな…。


```nginx:/etc/nginx/conf.d/zabbix.conf
server {
        server_name zabbix.example.org;

        root        /var/www/zabbix;
        index       index.html index.php;
        access_log  /var/log/nginx/access_zabbix.log main;
        error_log   /var/log/nginx/error_zabbix.log error;

        location ~ \.php {
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}
```

access/errorログについては、`/etc/logrotate.d/nginx`で適当にローテートして貰うためにファイルパスを合わせて(`/var/log/nginx/*.log`にして)います。error_log辺りはデフォルトの`error.log`に纏めてしまっても良かったのだろうか…。

サーバ設定が出来たら`sudo service nginx restart`するだけですが、必要に応じて`/etc/nginx/nginx.conf`で`server_names_hash_bucket_size`を変更する必要があるかもしれません。

### php-fpm設定

次にphp関連の設定を変更します。

```diff:/etc/php.ini
@@ -437,7 +437,8 @@

 ; Maximum execution time of each script, in seconds
 ; http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
-max_execution_time = 30
+;max_execution_time = 30
+max_execution_time = 300

 ; Maximum amount of time each script may spend parsing request data. It's a good
 ; idea to limit this time on productions servers in order to eliminate unexpectedly
@@ -446,7 +447,8 @@
 ; Development Value: 60 (60 seconds)
 ; Production Value: 60 (60 seconds)
 ; http://www.php.net/manual/en/info.configuration.php#ini.max-input-time
-max_input_time = 60
+;max_input_time = 60
+max_input_time = 300

 ; Maximum input variable nesting level
 ; http://www.php.net/manual/en/info.configuration.php#ini.max-input-nesting-level
@@ -726,7 +728,8 @@

 ; Maximum size of POST data that PHP will accept.
 ; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
-post_max_size = 8M
+;post_max_size = 8M
+post_max_size = 32M

 ; Magic quotes are a preprocessing feature of PHP where PHP will attempt to
 ; escape any character sequences in GET, POST, COOKIE and ENV data which might
@@ -944,6 +947,7 @@
 ; Defines the default timezone used by the date functions
 ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
 ;date.timezone =
+date.timezone = Asia/Tokyo

 ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.default-latitude
 ;date.default_latitude = 31.7667
```

php-fpmもデフォルトだとapache権限で動作しようとする為、nginx権限で動作するように、設定を変更しておきます。

```diff:/etc/php-fpm.d/www.conf
@@ -36,9 +36,9 @@
 ; Note: The user is mandatory. If the group is not set, the default user's group
 ;       will be used.
 ; RPM: apache Choosed to be able to access some dir as httpd
-user = apache
+user = nginx
 ; RPM: Keep a group allowed to write in log dir.
-group = apache
+group = nginx
 
 ; Choose how the process manager will control the number of child processes.
 ; Possible Values:
```

ここまでで最低限の設定は終わったので、php-fpmを自動起動するようにしておきます。

```bash:php-fpm起動
$ chkconfig php-fpm --list
php-fpm         0:off   1:off   2:off   3:off   4:off   5:off   6:off
$ sudo service php-fpm start
php-fpm を起動中:                                          [  OK  ]
$ chkconfig php-fpm --list
php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

## ブラウザでの設定

後はブラウザ側で操作します。

`http://zabbix.example.org`にアクセスすることで、初期画面が表示されるので、基本はそのままNextしていけば完了します。

その後、適時設定(監視対象の追加など)が出来るはずです。