ansible-galaxy で zabbix server を超簡単にインストールする

Zabbix サーバーをansible-galaxy でインストールした時のメモです。

Zabbix のように沢山のコンポーネント(Apache,php,MySQL)を必要とするものは、インストールも面倒ですし、途中で設定を間違えるとうまく動かなかったりするので、そろそろ手動でセットアップするのは避けたいところです。

Ansible を覚えたので自前でPlaybookを書くことも考えましたが、車輪の再発明をするのもなんなので、ansible-galaxy でどこまで行けるかやってみました。

#Zabbix のPlaybookがあるかどうか調べる
github で"ansible zabbix" で探すと、以下のレポジトリが見つかりました。

* ahelal/ansible-zabbix
* dj-wasabi/ansible-zabbix-server
* Open-Future-Belgium/Zabbix-Server-Ansible

今回は、CentOS 7にインストールするのでなるべく最近更新されているもので、
dj-wasabi/ansible-zabbix-server
にしました。
コンソールマシンは、Ubuntuを使いました。
Ansible を先にインストールしておいてください。
selinux,firewalldは先に止めておきます。

#ansible-galaxy でPlaybookを取ってきます。
```lang:shell
$ sudo ansible-galaxy install dj-wasabi.zabbix-agent
$ sudo ansible-galaxy install dj-wasabi.zabbix-server
```
(同時に依存関係のある geerlingguy.apache も一緒に入ります)
DBは、MySQL(CentOS 7ではMariadb)にするつもりなので、

```lang:shell
$ sudo ansible-galaxy install geerlingguy.mysql
```
も追加

> 本当は、コマンドでインストールするのではなくて、requirements.txtというファイルに書いて、以下のようにするほうがよさそうです。こちらの方が、git管理できるのでいいですね。

```lang:shell
ansible-galaxy install -r requirements.txt
```


#インストール時に利用するディレクトリを作成
後のことも考えてgitで管理しておくためにディレクトリを作成します。

```lang:shell
$ mkdir install-zabbix
```

## インストール時の固有パラメータ用ディレクトリを作成
```lang:shell
$ mkdir install-zabbix/vars
```
#インベントリーファイルを作成
https://github.com/dj-wasabi/ansible-zabbix-server#example-playbook を見ると hosts: zabbix-server とあるので以下のようにしました。

``` code:shell
$ cd install-zabbix
cat > hosts
[zabbix-server]
192.0.2.0
^D
```

#playbookを作成
Galaxyを使うのでPlaybookは最小でOK

``` code:install-zabbix-server.yml
- hosts: zabbix-server
  sudo: yes
  vars_files:
    - vars/main.yml
  roles:
     - { role: geerlingguy.mysql }
     - { role: geerlingguy.apache }
     - { role: dj-wasabi.zabbix-server, 
           zabbix_url: zabbix-server.example.jp,
           zabbix_timezone: Asia/Tokyo,
           database_type: mysql,
           database_type_long: mysql }
```

zabbix_urlは、VirtualHostのURLになります。
zabbix_timezoneは、日本時間にします。
database_type、database_type_logは、mysqlにします。
これらの設定は、この後に出てくる vars/main.yml に記入してもいいのですが、playbookに直接書いてみました。

#CentOS 7 Mariadb 対応
CentOS 7で標準インストールされるのはMariadbです。geerlingguy.mysql は、MySQL用なのでそのままだとエラーが出ます。
https://github.com/geerlingguy/ansible-role-mysql#mariadb-usage
に沿ってMariadb用の設定を追加します。
cd vars

``` lang:vars/main.yml
mysql_packages:
  - mariadb
  - mariadb-server
  - mariadb-libs
  - MySQL-python
  - perl-DBD-MySQL
mysql_daemon: mariadb
mysql_log_error: /var/log/mariadb/mariadb.log
mysql_syslog_tag: mariadb
mysql_pid_file: /var/run/mariadb/mariadb.pid
```
#Ansible を実行します。

``` lang:shell
$ ansible-playbook -i ./hosts ./install-zabbix-server.yml
```
この時にエラーが出るようならば、設定に失敗しています。
修正してリトライしてください。

#Apacheのconfigを2.4向けに修正
そのままだとApacheのconfigが 2.2向けなのでアクセスコントロールでエラーがでます。

Upgrading to 2.4 from 2.2 - Apache HTTP Server Version 2.4
http://httpd.apache.org/docs/2.4/upgrading.html
に従って、Order,Allow,Denyを書き換えます。

**エラーが出る設定**

```lang:/etc/httpd/conf.d/apache_vhost.conf
---中略---
  <Directory "/usr/share/zabbix">
    AllowOverride None
    Order Allow,Deny
    Allow from all
  </Directory>
---中略---
```
**正しい設定**

```lang:/etc/httpd/conf.d/apache_vhost.conf
---中略---
  <Directory "/usr/share/zabbix">
    AllowOverride None
    Require all granted
  </Directory>
---中略---
```

他のOrderの部分も修正します。
後は、httpd と zabbix が正しく動作しているか確認して、ブラウザーからアクセスします。

http://zabbix-server.example.jp

ログイン画面が出たら、
ID:admin
PW:zabbix
でログインします。
パスワードは変更しておきましょう。

補足：
install-zabbix-server.yml で設定できるパラメータは、以下を参照。
`/etc/ansible/roles/dj-wasabi.zabbix-server/defaults/main.yml`
(https://github.com/dj-wasabi/ansible-zabbix-server/blob/master/defaults/main.yml でもOK )

```lang:/etc/ansible/roles/dj-wasabi.zabbix-server/defaults/main.yml
---中略---
server_dbname: zabbix-server
server_dbuser: zabbix-server
server_dbpassword: zabbix-server
---中略---
```
についてはセキュリティの観点から install-zabbix-server.yml に違う値を設定しておいた方がいいと思う。Zabbixのバージョンは以下で指定する。

```lang:/etc/ansible/roles/dj-wasabi.zabbix-server/defaults/main.yml
zabbix_version: 2.4
```

ディレクトリ構成は以下の通りでした。
>~/src/install-zabbix
$ tree 
├── README
├── hosts
├── install-zabbix-server.yml
└── vars
　　└── main.yml



要望があれば、werner dijkerman さんのplaybookによる zabbix-agent をインストールして、zabbix-api からホスト登録についても投稿します。

参考URL：
Zabbix 2.4 を yumでインストール（CentOS6.5） | あぱーブログ
https://blog.apar.jp/linux/334/
Installing zabbix-agent with Ansible – werner-dijkerman.nl
http://werner-dijkerman.nl/2015/03/06/installing-zabbix-agent-with-ansible/
Configure Zabbix Server on CentOS 6.6 with Ansible - Jürgen's Blog
http://jurgenvm.blogspot.jp/2014/12/configure-zabbix-server-on-centos-66.html
Installing zabbix-agent with Ansible – werner-dijkerman.nl
http://werner-dijkerman.nl/2015/03/06/installing-zabbix-agent-with-ansible/