Trong kiến trúc ELK Stack quy mô lớn, việc sử dụng một hệ thống message broker làm bộ đệm giữa Logstash Shipper và Logstash Indexer là cực kỳ quan trọng. Điều này giúp hệ thống tránh được tình trạng quá tải khi lượng log tăng đột biến. Redis là một trong những lựa chọn phổ biến nhất nhờ tốc độ cao và cấu hình đơn giản.
1. Triển khai và cấu hình Redis Server
Trước tiên, chúng ta cần chuẩn bị một instance Redis để làm hàng đợi (queue). Dưới đây là các bước cấu hình cơ bản để Redis sẵn sàng nhận dữ liệu từ Logstash.
# Chỉnh sửa file cấu hình redis.conf
bind 0.0.0.0
port 6379
daemonize yes
requirepass StrongAuthPass123
# Tắt tính năng snapshot nếu không cần thiết để tăng hiệu suất
save ""
Khởi chạy dịch vụ Redis và kiểm tra kết nối:
# Khởi động Redis
redis-server /etc/redis/redis.conf
# Kiểm tra trạng thái lắng nghe
netstat -tpln | grep 6379
# Truy cập thử nghiệm
redis-cli -a StrongAuthPass123
127.0.0.1:6379> ping
PONG
2. Cấu hình Logstash Shipper (Gửi log vào Redis)
Tại các máy chủ ứng dụng, chúng ta cấu hình Logstash để thu thập log hệ thống và đẩy trực tiếp vào Redis dưới dạng list.
input {
file {
path => "/var/log/syslog"
type => "system_logs"
start_position => "beginning"
}
}
output {
if [type] == "system_logs" {
redis {
host => "10.0.0.50"
port => "6379"
password => "StrongAuthPass123"
data_type => "list"
key => "log_queue_system"
db => 0
}
}
}
Kiểm tra cú pháp và khởi động lại dịch vụ Logstash:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/shipper.conf --config.test_and_exit
systemctl restart logstash
Để xác minh dữ liệu đã vào Redis hay chưa, bạn có thể sử dụng lệnh LLEN trong Redis CLI:
redis-cli -h 10.0.0.50 -a StrongAuthPass123
10.0.0.50:6379> SELECT 0
10.0.0.50:6379> KEYS *
1) "log_queue_system"
10.0.0.50:6379> LLEN log_queue_system
(integer) 150
3. Cấu hình Logstash Indexer (Lấy dữ liệu từ Redis sang Elasticsearch)
Tiếp theo, tại node trung tâm (Indexer), Logstash sẽ đóng vai trò tiêu thụ dữ liệu từ hàng đợi Redis và đẩy vào Elasticsearch để đánh chỉ mục.
input {
redis {
host => "10.0.0.50"
port => "6379"
password => "StrongAuthPass123"
data_type => "list"
key => "log_queue_system"
db => 0
threads => 4
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "app-system-logs-%{+YYYY.MM.dd}"
}
}
Sau khi khởi động cấu hình này, Logstash Indexer sẽ liên tục thực hiện lệnh BLPOP để lấy dữ liệu từ Redis. Bạn sẽ thấy giá trị LLEN log_queue_system giảm dần về 0, chứng tỏ dữ liệu đang được luân chuyển mượt mà sang Elasticsearch.
4. Kiểm tra trên giao diện quản lý
Cuối cùng, bạn truy cập vào Kibana hoặc sử dụng Elasticsearch Head plugin để kiểm tra sự xuất hiện của Index mới với định dạng app-system-logs-YYYY.MM.dd. Việc sử dụng Redis không chỉ giúp giảm tải cho Elasticsearch mà còn cho phép mở rộng (scale-out) số lượng Logstash Indexer một cách dễ dàng khi khối lượng log tăng cao.