📯 Zabbix - Tối ưu hóa Zabbix + MySQL
Post
Cancel

📯 Zabbix - Tối ưu hóa Zabbix + MySQL

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

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 !

This post is licensed under CC BY 4.0 by the author.