Sau khi các bạn cài đặt Zabbix trên CentOS hoàn thành để cho hệ thống Zabbix server hoạt động với hiệu năng cao nhất thì các bạn cần thực hiện các bước tối ưu hóa Zabbix server và MySQL database.
Nếu chưa xem bài viết “Cài đặt Zabbix trên CentOS” thì các bạn tham khảo tại đây: Hướng dẫn cài đặt Zabbix.
Hướng dẫn các bước tối ưu hóa Zabbix server và MySQL database
Bước 1: Tạo phân vùng MySQL trên Lịch sử và bảng Sự kiện
Quy trình housekeeping của Zabbix chịu trách nhiệm xóa dữ liệu lịch sử. Xóa dữ liệu cũ khỏi database bằng cách sử dụng truy vấn xóa SQL, hành động này tác động tiêu cực đến hiệu suất database, có thể sẽ nhận được thông báo “Zabbix housekeeper processes more than 75% busy” vì điều đó.
Vấn đề này có thể được giải quyết với việc phân vùng cơ sở dữ liệu. Phân vùng tạo ra các bảng cho mỗi giờ hoặc mỗi ngày và loại bỏ chúng khi không cần thiết. SQL DROP hiệu quả hơn câu lệnh DELETE.
Bạn có thể phân vùng các bảng MySQL bằng cách sử dụng hướng dẫn đơn giản này:
Tạo phân vùng database Zabbix trên MySQL MariaDB
Bước 2: Tối ưu hóa Zabbix Server
Nếu bạn đang vận hành với số lượng ít thiết bị thì bạn có thể bỏ qua bước này, còn nếu hệ thống của bạn lớn bao gồm nhiều thiết bị thì tiếp tục thực hiện tiếp nào.
Mở file “zabbix_server.conf” bằng lệnh “ nano /etc/zabbix/zabbix_server.conf” và thêm cấu hình dưới vào bất kỳ đâu trong file:
StartPollers=100 StartPollersUnreachable=50 StartPingers=50 StartTrappers=10 StartDiscoverers=15 StartPreprocessors=15 StartHTTPPollers=5 StartAlerters=5 StartTimers=2 StartEscalators=2 CacheSize=128M HistoryCacheSize=64M HistoryIndexCacheSize=32M TrendCacheSize=32M ValueCacheSize=256M
Lưu và thoát file ( ctrl + x , tiếp theo là y và enter ).
Bước 3: Tối ưu hóa MySQL/MariaDB database
a. Tạo file cấu hình MySQL
Tạo file “10_my_tweaks.cnf” bằng lệnh “nano /etc/my.cnf.d/10_my_tweaks.cnf” và thêm cấu hình dưới vào:
[mysqld] max_connections = 404 innodb_buffer_pool_size = 800M innodb-log-file-size = 128M innodb-log-buffer-size = 128M innodb-file-per-table = 1 innodb_buffer_pool_instances = 8 innodb_old_blocks_time = 1000 innodb_stats_on_metadata = off innodb-flush-method = O_DIRECT innodb-log-files-in-group = 2 innodb-flush-log-at-trx-commit = 2 tmp-table-size = 96M max-heap-table-size = 96M open_files_limit = 65535 max_connect_errors = 1000000 connect_timeout = 60 wait_timeout = 28800
Lưu và thoát khỏi file ( ctrl + x , theo sau là y và enter ) và phân lại quyền đối với file bằng lệnh
chown mysql:mysql /etc/my.cnf.d/10_my_tweaks.cnf chmod 644 /etc/my.cnf.d/10_my_tweaks.cnf
Hai điều cần lưu ý:
Tham số cấu hình max_connections phải lớn hơn tổng số của tất cả các quy trình Zabbix proxy +150. Bạn có thể sử dụng lệnh bên dưới để tự động kiểm tra số lượng quy trình Zabbix và + thêm 150 vào số đó:
egrep "^Start.+=[0-9]" /etc/zabbix/zabbix_server.conf | awk -F "=" '{s+=$2} END {print s+150}' 295
Tham số quan trọng thứ hai là innodb_buffer_pool_size , xác định dung lượng bộ nhớ mà MySQL có thể lấy để lưu vào bộ nhớ đệm các bảng InnoDB và dữ liệu chỉ mục. Bạn nên đặt tham số đó thành 70% bộ nhớ hệ thống nếu chỉ có database được cài đặt trên máy server.
Tuy nhiên, trong trường hợp này, mình có đồng thời Zabbix và Apache, vì vậy mình đặt innodb_buffer_pool_size thành 40% tổng bộ nhớ hệ thống. Đó sẽ là 800 MB vì máy CentOS của mình có RAM 2 GB.
Mình không gặp bất kỳ sự cố nào với bộ nhớ, nhưng nếu Zabbix proxy của bạn bị treo vì thiếu bộ nhớ, hãy giảm “innodb_buffer_pool_size” và khởi động lại máy chủ MySQL.
Lưu ý rằng nếu bạn làm theo cấu hình này, bạn sẽ nhận được cảnh báo “Too many processes on the Zabbix server” trong giao diện người dùng của Zabbix do cấu hình Zabbix mới, nhưng không sao nó tuyệt đối không có lỗi gì. Để tăng ngưỡng kích hoạt hoặc tắt báo thức đó (chọn “ Problems ” → chuột trái vào alarm → chọn “Configuration ” → bỏ chọn “ Enabled ” → nhấn nút “ Update”)
b. Khởi động lại Zabbix và MySQL
systemctl stop zabbix-server systemctl stop mysql systemctl start mysql systemctl start zabbix-server
Bước 4: Kích hoạt cấu hình SELinux trên Zabbix
Cấu hình SElinux để cho phép Zabbix hoạt động, SElinux vẫn sẽ ghi lại tất cả các lỗi bảo mật nhưng sẽ không chặn bất cứ thứ gì liên quan đến Zabbix.
a. Cho phép http daemon kết nối tới Zabbix
setsebool -P httpd_can_connect_zabbix 1
b. Cho phép Zabbix kết nối với tất cả các cổng TCP
setsebool -P zabbix_can_network 1
c. Đặt SELinux hoạt động ở chế độ thực thi
setenforce 1 && sed -i 's/^SELINUX=.*/SELINUX=enforcing/g' /etc/selinux/config
Kiểm tra trạng thái SELinux
# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 31
d. Tạo chính sách SELINUX bổ sung cho Zabbix
Để đề phòng, ta sẽ tạo chính sách SELinux bổ sung cho từng lỗi trong log kiểm tra (“ /var/log/audit/audit.log“)
Chúng ta sẽ cần công cụ Policycoreutils-python, vì vậy hãy cài đặt nó:
dnf -y install policycoreutils-python-utils
Tạo gói chính sách tùy chỉnh:
grep "denied.*zabbix" /var/log/audit/audit.log | audit2allow -M zabbix_policy
Cài đặt gói chính sách SELinux tùy chỉnh:
semodule -i zabbix_policy.pp
Bạn đã cấu hình xong SELinux cho Zabbix!
Bước 5: Nâng cấp các phiên bản Zabbix mới
Mục đích chính của các bản nâng cấp nhỏ là sửa lỗi và đôi khi mang lại chức năng mới. Do đó, hãy cố gắng nâng cấp Zabbix ít nhất mỗi tháng một lần.
dnf upgrade 'zabbix-*'
Và khởi động lại Zabbix server sau đó:
systemctl restart zabbix-server
Như vậy bạn đã thực hiện xong các bước tối ưu hóa Zabbix server và MySQL database. Felicitation !