プロビジョニングや構成管理ツールであるAnsibleでZabbix Serverを構築してみたという記事です。
今回の記事ではVMを2台作成して1台をAnsibleサーバー、もう1台をzabbixサーバーとして構築します。2台ともOSインストールとネットワークがつながる状態にしておくことと、2つのVMが相互にSSHできる環境にしてください。OSはUbuntu22.04を使います。
Ansibleサーバーの準備
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
$ ansible-galaxy collection install community.zabbix
Ansibleのインストールはこのコマンドを実行するだけで完了します。そのあとどこでもよいのでzabbix用のansible設定ファイル用のディレクトリを作成します
$ mkdir zabbix-ansible
$ cd zabbix-ansible
inventoryやplaybook等の作成
まず対象ホストや権限などどのサーバに対し設定を行うかを定義するinventoryを作成します。
$ vim inventory.ini
[zabbix_server]
ここにVMのIPアドレス ansible_user=sudoできるユーザーネーム ansible_ssh_pass=ここにSSHのパスワード ansible_become=yes ansible_become_password=ここにSSHのパスワード
下記のようになっていればOKです。
[zabbix_server]
192.168.0.10 ansible_user=ubuntu ansible_ssh_pass=Test555test ansible_become=yes ansible_become_password=Test555test
次にplaybookを作成します。
$ vim zabbix-setup.yml
---
- hosts: zabbix_server
become: yes
vars:
mysql_root_password: "" # MySQLのrootパスワードを設定
php_version: "8.1"
tasks:
- name: Install MySQL
apt:
name:
- mysql-server
- python3-mysqldb # Ansibleのmysql_*モジュールに必要
state: present
when: ansible_os_family == "Debian"
- name: Start MySQL Service
service:
name: mysql
state: started
enabled: yes
- name: Set MySQL root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create .my.cnf file
template:
src: templates/my.cnf.j2
dest: /root/.my.cnf
mode: '0600'
- name: Install PHP and PHP-FPM
apt:
name:
- "php{{ php_version }}"
- "php{{ php_version }}-fpm"
- "php{{ php_version }}-mysql"
- "php{{ php_version }}-gd"
- "php{{ php_version }}-bcmath"
- "php{{ php_version }}-mbstring"
- "php{{ php_version }}-xml"
- "php{{ php_version }}-ldap"
state: present
when: ansible_os_family == "Debian"
- name: Ensure PHP-FPM is running
service:
name: "php{{ php_version }}-fpm"
state: started
enabled: yes
- name: Install Apache
apt:
name: apache2
state: present
# Apache モジュールの有効化
- name: Enable Apache modules
apache2_module:
name: "{{ item }}"
state: present
loop:
- rewrite
# - ssl
notify: Restart Apache
# デフォルトの Apache サイトを無効化
- name: Disable default Apache site
command: a2dissite 000-default.conf
notify: Restart Apache
handlers:
- name: Restart Apache
service:
name: apache2
state: restarted
- hosts: zabbix_server
become: yes
collections:
- community.zabbix
vars:
zabbix_version: 6.0
zabbix_server_database: mysql
zabbix_server_database_long: mysql
zabbix_server_hostname: zabbix-server
zabbix_url: http://VMのIPアドレス # VMのIPアドレスを設定
zabbix_apache_vhost_port: 80
zabbix_php_fpm: false
php_version: "8.1"
roles:
- role: community.zabbix.zabbix_server
- role: community.zabbix.zabbix_web
次にDBにうまく接続ができるようにファイルを生成してリモート送信できるtemplatesを作成します。
$ mkdir templates
$ cd templates
$ vim my.cnf.j2
[client]
socket=/var/run/mysqld/mysqld.sock
user=root
password=DBのrootパスワード
これを追加して保存してください。rootパスワードはplaybookで設定したmysql_root_passwordです。
$ cd ..
templatesを作成することでmy.cnfというファイルをzabbixサーバーに作成することができます。my.cnfはデータベースの接続に必要なので作成しました。
ansible-playbookの実行
設定ファイルは完成したので実際に実行していきます。
ファイル構造は以下になっていればOKです。
zabbix-ansibleフォルダ
.
├── inventory.ini
├── templates/
│ └── my.cnf.j2
├── zabbix_setup.yml
また、fingerprintのエラーを回避するために/etc/ansible/ansible.cfgに一行追加します
$ vim /etc/ansible/ansible.cfg
[defaults]
allow_world_readable_tmpfiles = True
host_key_checking = False #これを追加
では先ほどのzabbix-ansibleに入って以下を実行してください
エラーで中断しなければ成功です。(一部エラー出るかもしれませんが再度実行すれば問題なくなると思います。)
ansible-playbook -i inventory.ini zabbix_setup.yml
最後まで実行できたら成功
TASK [community.zabbix.zabbix_web : Configure zabbix-web] ******************************************************
ok: [192.168.0.10]
TASK [community.zabbix.zabbix_web : Debian | Install PHP] ******************************************************
ok: [192.168.0.10]
PLAY RECAP *****************************************************************************************************
192.168.0.10 : ok=55 changed=2 unreachable=0 failed=0 skipped=11 rescued=0 ignored=0
zabbixの動作確認
ではzabbixが動いているかどうか確認します
ブラウザでVMのIPを入力します。成功していればzabbixの画面が出てきます。
デフォルトではAdminとパスワードはzabbixでログインできます。
ログインできれば成功です。
今回はAnsibleでzabbix構築をしてみました。お試し構築なのでしっかり設計はしていないですが、ansibleの基礎として良い学びになったと思います。また別のアプリもAnsibleで構築してみたいと思います。