Tại sao bạn nên bỏ ‘grep’ truyền thống để sang ELK?
Nếu bạn từng thức trắng đêm chỉ để grep tìm một dòng error vô định trong 50GB log trải dài trên 5 con server, bạn sẽ hiểu sự ức chế này. Hồi mới làm SysAdmin, mình mất cả buổi sáng chỉ để tìm nguyên nhân một lỗi hệ thống nhỏ. Khi công ty migrate từ CentOS 7 sang CentOS Stream 9, mình đã triển khai bộ đôi Elasticsearch và Kibana để chấm dứt cơn ác mộng đó.
Elasticsearch là một search engine cực mạnh dựa trên Lucene với khả năng xử lý hàng triệu bản ghi mỗi giây. Kibana đóng vai trò là lớp hiển thị, giúp biến đống dữ liệu thô thành biểu đồ trực quan. Trên CentOS Stream 9, cơ chế SELinux và Firewalld rất nghiêm ngặt. Nếu không nắm vững cách cấu hình, bạn sẽ rất dễ gặp lỗi Permission denied hoặc Connection refused.
Các bước cài đặt Elasticsearch và Kibana
Kho ứng dụng mặc định của CentOS 9 không có sẵn Elastic. Chúng ta sẽ thêm repository chính thức để cài đặt phiên bản 8.x mới nhất.
Bước 1: Thiết lập Repository
Đầu tiên, hãy nạp GPG Key để hệ thống tin tưởng các gói cài đặt từ Elastic:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Tiếp theo, tạo file cấu hình repo:
sudo vi /etc/yum.repos.d/elasticsearch.repo
Bạn dán nội dung dưới đây vào. Lưu ý mình đang dùng bản 8.x:
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Bước 2: Cài đặt và chuẩn bị tài nguyên
Chạy lệnh cài đặt bộ đôi này qua DNF:
sudo dnf install elasticsearch kibana -y
Cảnh báo: Elasticsearch khá ngốn RAM. Hãy đảm bảo server của bạn có ít nhất 4GB RAM. Sau khi cài xong, terminal sẽ hiển thị mật khẩu cho user elastic. Hãy copy mã này ngay vào Notepad vì nó chỉ xuất hiện một lần duy nhất.
Cấu hình thực chiến: Vượt rào SELinux và Firewalld
Đây là phần quan trọng nhất để hệ thống có thể chạy thực tế thay vì chỉ nằm trên lý thuyết.
Cấu hình Elasticsearch
Mở file /etc/elasticsearch/elasticsearch.yml. Với mô hình single-node (một máy chủ duy nhất), bạn cần chỉnh các tham số sau:
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
Việc đặt network.host: 0.0.0.0 giúp node lắng nghe mọi interface. Đừng quá lo lắng về bảo mật vì chúng ta sẽ dùng Firewalld để giới hạn IP truy cập sau.
Xử lý SELinux triệt để
CentOS Stream 9 bật SELinux ở chế độ Enforcing. Để tránh lỗi Elasticsearch không khởi động được do bị chặn quyền ghi log, hãy thực hiện gán nhãn context:
sudo semanage fcontext -a -t elasticsearch_log_t "/var/log/elasticsearch(/.*)?"
sudo restorecon -Rv /var/log/elasticsearch/
sudo semanage fcontext -a -t elasticsearch_data_t "/var/lib/elasticsearch(/.*)?"
sudo restorecon -Rv /var/lib/elasticsearch/
Mở port trên Firewalld
Chỉ mở đúng hai port cần thiết là 9200 (API) và 5601 (Web UI). Nếu có thể, hãy dùng --add-source để chỉ cho phép IP nội bộ truy cập:
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=5601/tcp
sudo firewall-cmd --reload
Kiểm tra và Kích hoạt dịch vụ
Khởi động dịch vụ và thiết lập tự động chạy cùng hệ thống:
sudo systemctl daemon-reload
sudo systemctl enable --now elasticsearch kibana
Để kiểm tra Elasticsearch đã “sống” chưa, hãy dùng lệnh curl (nhớ thay your_password):
curl -u elastic -k https://localhost:9200
Nếu thấy JSON phản hồi có dòng "tagline": "You Know, for Search", chúc mừng bạn đã thành công 90%.
Truy cập giao diện Kibana
Mở trình duyệt theo địa chỉ: http://<IP-Server>:5601. Kibana sẽ đòi Enrollment Token. Nếu bạn quên chưa lưu lúc cài đặt, hãy tạo mã mới bằng lệnh:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Tiếp theo, để lấy mã xác nhận (verification code) từ log Kibana, bạn chạy:
sudo journalctl -u kibana | grep "verification code"
Sau khi nhập mã, bạn đã có thể bắt đầu đẩy log từ Filebeat về để theo dõi. Việc triển khai ELK trên CentOS 9 không chỉ giúp quản lý log hiệu quả. Đây còn là cơ hội để bạn thực hành tư duy bảo mật hệ thống thực thụ thông qua SELinux. Chúc các bạn build hệ thống thành công và không còn phải thức đêm vì log.

