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.12playbook.yml:
- name: Install Zabbix server and agents
hosts: zabbix_server,zabbix_agent
become: true
vars_files:
- vars/main.yml
roles:
- zabbixvars/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: presentTrong đó, 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: yesCấ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: yesCấ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-agentCấ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: presentCuố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: yesSau 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.ymlVới zabbix-install.yml là tên playbook của bạn.
