AnsibleでZabbix Serverを構築してみた | Ansible入門

Ansible

プロビジョニングや構成管理ツールである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で構築してみたいと思います。

タイトルとURLをコピーしました