Hướng dẫn cài đặt và cấu hình Graylog trên CentOS Stream 9: Xây dựng hệ thống quản lý log tập trung

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

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ản admin.

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:

  1. Truy cập System > Inputs.
  2. Chọn Syslog UDP trong menu và bấm Launch new input.
  3. Điền Title: Linux Syslog Input, Port: 1514, Bind address: 0.0.0.0 rồ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.

Share: