1. Sử dụng role của người khác.
Để cài đặt Zabbix sử dụng Ansible, ta cần chuẩn bị các bước sau:
- Cài đặt các gói yêu cầu
- Thiết lập cấu hình cho Zabbix server và database
- Cài đặt Zabbix server và agent
- Cấu hình Zabbix server và agent
Sau đây là một ví dụ Ansible playbook để cài đặt Zabbix và cấu hình nó.
inventory.ini:
[zabbix_server]
zabbix ansible_host=192.168.0.10
[zabbix_agent]
zabbix-01 ansible_host=192.168.0.11
zabbix-02 ansible_host=192.168.0.12
playbook.yml:
- name: Install Zabbix server and agents
hosts: zabbix_server,zabbix_agent
become: true
vars_files:
- vars/main.yml
roles:
- zabbix
vars/main.yml:
zabbix_server_version: "5.0"
zabbix_agent_version: "5.0"
zabbix_mysql_root_password: "password123"
roles/zabbix/tasks/main.yml:
---
- name: Install Zabbix server and agents
hosts: zabbix_server,zabbix_agent
become: true
vars:
zabbix_server_version: "{{ zabbix_server_version }}"
zabbix_agent_version: "{{ zabbix_agent_version }}"
zabbix_mysql_root_password: "{{ zabbix_mysql_root_password }}"
zabbix_server_port: 10051
roles:
- role: geerlingguy.repo-epel
- role: geerlingguy.mysql
mysql_root_password: "{{ zabbix_mysql_root_password }}"
mysql_databases:
- name: zabbix
encoding: utf8mb4
collation: utf8mb4_unicode_ci
mysql_users:
- name: zabbix
password: "{{ zabbix_mysql_root_password }}"
priv: "zabbix.*:ALL"
- role: geerlingguy.apache
- role: geerlingguy.php
- role: geerlingguy.zabbix
zabbix_web_hostname: "{{ inventory_hostname }}"
zabbix_server_version: "{{ zabbix_server_version }}"
zabbix_agent_version: "{{ zabbix_agent_version }}"
zabbix_server_database_password: "{{ zabbix_mysql_root_password }}"
zabbix_server_install_agent: true
zabbix_server_port: "{{ zabbix_server_port }}"
Cụ thể, playbook này sử dụng roles của Geerlingguy để cài đặt các thành phần như: Apache, MySQL, PHP và Zabbix. Biến được định nghĩa trong vars/main.yml, và được sử dụng trong file roles/zabbix/tasks/main.yml. Chúng ta có thể tùy chỉnh các biến này tùy theo nhu cầu cài đặt Zabbix của mình.
2. Tự viết role của mình.
Để cài đặt Zabbix bằng Ansible mà không sử dụng role của người khác, bạn có thể thực hiện các bước sau:
Tạo một playbook mới để cài đặt Zabbix. Trong playbook, sử dụng module yum
hoặc apt
để cài đặt các gói cần thiết cho Zabbix. Ví dụ:
- name: Install required packages
yum:
name:
- epel-release
- https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm
- zabbix-server-mysql
- zabbix-web-mysql
- zabbix-agent
state: present
Trong đó, epel-release
là gói phụ thuộc cần thiết để cài đặt Zabbix trên một số hệ điều hành. Bạn cũng cần thay đổi URL đến gói zabbix-release
phù hợp với phiên bản Zabbix bạn muốn cài đặt.
Cấu hình các file cấu hình của Zabbix. Ví dụ, bạn có thể sử dụng module copy
để sao chép các file cấu hình từ máy cài đặt Ansible đến máy Zabbix:
- name: Copy Zabbix server configuration file
copy:
src: /path/to/zabbix_server.conf
dest: /etc/zabbix/zabbix_server.conf
owner: zabbix
group: zabbix
mode: '0640'
- name: Copy Zabbix web configuration file
copy:
src: /path/to/zabbix_web.conf.php
dest: /etc/zabbix/web/zabbix.conf.php
owner: apache
group: apache
mode: '0644'
Khởi động dịch vụ MySQL:
- name: Start MySQL service
service:
name: mysqld
state: started
- name: Enable MySQL at boot time
service:
name: mysqld
enabled: yes
Cấu hình cơ sở dữ liệu. Bạn có thể sử dụng module mysql_db
hoặc postgresql_db
để tạo cơ sở dữ liệu Zabbix, module mysql_user
hoặc postgresql_user
để tạo người dùng cho cơ sở dữ liệu và module mysql_query
hoặc postgresql_query
để chạy các câu lệnh SQL để tạo bảng và đổ dữ liệu:
- name: Create Zabbix database
mysql_db:
name: zabbix
state: present
login_user: root
login_password: your_root_password
- name: Create Zabbix database user
mysql_user:
name: zabbix
password: your_zabbix_password
priv: "zabbix.*:ALL"
host: localhost
state: present
login_user: root
login_password: your_root_password
- name: Create Zabbix database schema
mysql_query:
db: zabbix
login_user: root
login_password: your_root_password
sql: "/usr/share/doc/zabbix-server-mysql*/create.sql.gz | gunzip | mysql zabbix"
Khởi động dịch vụ Zabbix server và Zabbix agent:
- name: Start Zabbix server
service:
name: zabbix-server
state: started
- name: Enable Zabbix server at boot time
service:
name: zabbix-server
enabled: yes
- name: Start Zabbix agent
service:
name: zabbix-agent
state: started
- name: Enable Zabbix agent at boot time
service:
name: zabbix-agent
enabled: yes
Cấu hình firewall để cho phép kết nối đến các cổng Zabbix server và Zabbix agent:
- name: Allow Zabbix server and agent ports in firewall
firewalld:
service: "{{ item }}"
permanent: yes
state: enabled
immediate: yes
loop:
- zabbix-server
- zabbix-agent
Cấu hình Zabbix web interface. Bạn có thể sử dụng module lineinfile
để sửa file cấu hình httpd.conf
để cho phép truy cập vào Zabbix web interface từ xa:
- name: Allow remote access to Zabbix web interface
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^#.*Listen.*80$'
line: 'Listen 80'
state: present
- name: Allow remote access to Zabbix web interface
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^<Directory /usr/share/zabbix>'
line: ' Require all granted'
state: present
Cuối cùng, khởi động dịch vụ httpd để sử dụng Zabbix web interface:
- name: Start Apache httpd
service:
name: httpd
state: started
- name: Enable Apache httpd at boot time
service:
name: httpd
enabled: yes
Sau khi hoàn thành các bước trên, bạn đã cài đặt thành công Zabbix bằng Ansible mà không sử dụng role của người khác. Bạn có thể chạy playbook bằng lệnh sau:
ansible-playbook zabbix-install.yml
Với zabbix-install.yml
là tên playbook của bạn.