Vấn đề: Nỗi ám ảnh SSH vào từng server tìm bug
Hạ tầng của bạn đang chạy 10 máy chủ: 3 web node Nginx, 2 cụm backend API, database PostgreSQL và 2 con gateway. 3 giờ chiều, user réo lỗi 502 liên tục khi thanh toán. Bạn phải bật cùng lúc chục tab terminal. Gõ tail -f /var/log/nginx/error.log trên từng máy để grep request ID. Quá trình này vừa rối mắt vừa dễ bỏ sót sự cố quan trọng.
Khi quy mô chạm mốc 30 hay 50 server, cách làm thủ công trên coi như phá sản. Không có log tập trung, thời gian trung bình để tìm ra gốc rễ sự cố (MTTR) có thể kéo dài từ vài phút lên hàng giờ. Ta cần đưa toàn bộ dữ liệu log về một nơi duy nhất. Tìm kiếm ngay lập tức chỉ với một câu truy vấn.
Kiến trúc vận hành của cụm Graylog
Graylog hoạt động như một trung tâm tiếp nhận dữ liệu. Hệ thống gom log từ mọi ngóc ngách, bóc tách trường thông tin và lưu vào kho dữ liệu có đánh index.
Cụm Graylog hoàn chỉnh gồm 3 thành phần:
- MongoDB: Lưu cấu hình hệ thống, thông tin user, alert stream và dashboard metadata. Thành phần này không lưu nội dung log.
- OpenSearch: Trái tim lưu trữ và xử lý truy vấn full-text search. Tốc độ lọc hàng triệu dòng log phụ thuộc trực tiếp vào dung lượng RAM cấp cho OpenSearch.
- Graylog Server: Bộ xử lý trung tâm. Service này hứng log từ client qua Syslog/GELF/Beats, phân tích cú pháp (parse log), đẩy dữ liệu sang OpenSearch và phục vụ giao diện Web UI.
Các bước triển khai Graylog trên CentOS Stream 9
Bước 1: Chuẩn bị môi trường và cài đặt Java OpenJDK
Graylog và OpenSearch đều chạy trên nền JVM. Với CentOS Stream 9, bạn dùng luôn OpenJDK 17 có sẵn trong repo:
sudo dnf update -y
sudo dnf install -y java-17-openjdk-headless pwgen wget curl lsof
Bước 2: Cài đặt MongoDB 6.0
Graylog 6.x yêu cầu MongoDB 6.0 trở lên. Thêm file cấu hình repo cho MongoDB:
cat <<EOF | sudo tee /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF
sudo dnf install -y mongodb-org
sudo systemctl daemon-reload
sudo systemctl enable --now mongod
Kiểm tra trạng thái MongoDB bằng lệnh systemctl status mongod để đảm bảo service ở trạng thái active (running).
Bước 3: Cài đặt và tinh chỉnh OpenSearch 2.x
Khai báo repository chính thức từ OpenSearch:
cat <<EOF | sudo tee /etc/yum.repos.d/opensearch.repo
[opensearch-2.x]
name=OpenSearch 2.x Repository
baseurl=https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/yum
gpgcheck=1
gpgkey=https://artifacts.opensearch.org/publickeys/opensearch.pgp
enabled=1
EOF
sudo dnf install -y opensearch
Mở file /etc/opensearch/opensearch.yml và cập nhật cấu hình cho mô hình single-node:
cluster.name: graylog-cluster
node.name: node-1
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 127.0.0.1
http.port: 9200
discovery.type: single-node
action.auto_create_index: false
plugins.security.disabled: true
Với server 8GB RAM, bạn nên chỉnh JVM heap size trong /etc/opensearch/jvm.options về mức -Xms4g và -Xmx4g (khoảng 50% RAM hệ thống). Khởi động service:
sudo systemctl daemon-reload
sudo systemctl enable --now opensearch
Bước 4: Cài đặt và cấu hình Graylog Server
Cài đặt repo và package Graylog 6.0:
sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-6.0-repository_latest.rpm
sudo dnf install -y graylog-server
Graylog cần 2 chuỗi bí mật để khởi chạy:
password_secret: Dùng để mã hóa session cookie người dùng.root_password_sha2: Mật khẩu hash SHA-256 của tài khoảnadmin.
Sinh nhanh 2 chuỗi này qua terminal:
# Tạo secret key ngẫu nhiên 96 ký tự
pwgen -N 1 -s 96
# Hash mật khẩu quản trị (thay MatKhauAdmin@2026 bằng pass của bạn)
echo -n "MatKhauAdmin@2026" | sha256sum | cut -d" " -f1
Mở file /etc/graylog/server/server.conf và dán các giá trị tương ứng:
password_secret = <chuỗi_pwgen_vừa_tạo>
root_password_sha2 = <chuỗi_sha256_vừa_tạo>
http_bind_address = 0.0.0.0:9000
Lưu file và kích hoạt Graylog:
sudo systemctl daemon-reload
sudo systemctl enable --now graylog-server
Bước 5: Cấu hình Firewall và kiểm tra Web UI
Mở port 9000 cho Web interface và port 1514 UDP để nhận log từ các máy trạm:
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --add-port=1514/udp --permanent
sudo firewall-cmd --reload
Mở trình duyệt, truy cập http://<IP_SERVER>:9000. Đăng nhập bằng user admin kèm mật khẩu plaintext bạn đã băm ở Bước 4.
Bước 6: Tạo Input và cấu hình client đẩy log
Cấu hình cổng nhận log trên giao diện Graylog:
- Truy cập System > Inputs.
- Chọn Syslog UDP trong menu và bấm Launch new input.
- Điền Title:
Linux Syslog Input, Port:1514, Bind address:0.0.0.0rồi bấm Save.
Chuyển sang các máy chủ client cần giám sát. Thêm cấu hình rsyslog để đẩy log về Graylog server:
echo "*.* @<IP_GRAYLOG_SERVER>:1514;RSYSLOG_SyslogProtocol23Format" | sudo tee /etc/rsyslog.d/50-graylog.conf
sudo systemctl restart rsyslog
Quay lại tab Search trên Graylog, bạn sẽ thấy các dòng log từ client bắt đầu đổ về theo thời gian thực.
Tổng kết
Hệ thống log tập trung giúp bạn thoát khỏi cảnh mò mẫm thủ công trên từng terminal. Với Graylog và OpenSearch, mọi log lỗi từ auth, kernel tới ứng dụng đều được gom gọn gàng, sẵn sàng cho việc phân tích sự cố và thiết lập cảnh báo tự động qua Telegram hay Slack.

