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á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ử và xu hướng cũ. 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:
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à đặt 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, chúng tôi đang chia sẻ một máy chủ với Zabbix và Apache, vì vậy bạn nên đặ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 tôi có RAM 2 GB.
Tôi 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, chúng tôi 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
Nếu Bạn thấy nội dung này có giá trị, hãy mời Mình một ly cà phê nhé!
Xin chào các Bạn, Mình là Đăng Lê, đang làm việc trong lĩnh vực CNTT. Mình là người yêu thích viết blog, đang cố gắng để trở thành một blogger chuyên nghiệp. Với blog thuvienhay.com, Mình mong muốn được chia sẻ những kiến thức, kinh nghiệm đến với mọi người.
Mong các bạn hãy theo dõi và ủng hộ blog thuvienhay.com. Chân thành cảm ơn!