Tổng quan về Filebeat
Filebeat là một trình thu thập nhật ký (log shipper) cực kỳ nhẹ, thuộc hệ sinh thái Elastic Stack. So với Logstash, Filebeat có những ưu điểm vượt trội về mặt hiệu năng:
- Kiến trúc tinh gọn: Filebeat được viết bằng Go, không yêu cầu môi trường Java (JVM) để khởi chạy.
- Tiết kiệm tài nguyên: Trong khi Logstash thường tiêu tốn khoảng 500MB RAM để duy trì hoạt động, Filebeat chỉ cần khoảng 10MB đến 20MB, giúp giảm tải tối đa cho máy chủ nguồn.
- Độ tin cậy cao: Hỗ trợ cơ chế back-pressure để điều phối tốc độ gửi dữ liệu, tránh làm quá tải các hệ thống nhận tin phía sau.
Hướng dẫn cấu hình thu thập Log Nginx qua Filebeat
Để bắt đầu thu thập nhật ký từ Nginx và đẩy về Logstash xử lý, chúng ta cần thực hiện các bước thiết lập môi trường và cấu hình tệp tin filebeat.yml.
# Chuẩn bị môi trường
systemctl stop firewalld
setenforce 0
# Giải nén và di chuyển Filebeat vào thư mục quản lý
tar -zxvf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
cd /usr/local/filebeat
# Chỉnh sửa tệp cấu hình chính
vi filebeat.yml
Nội dung cấu hình mẫu cho việc thu thập log từ Nginx:
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access.log
- /usr/local/nginx/logs/error.log
tags: ["web_nginx"]
fields:
env_source: "192.168.230.21"
app_identifier: "nginx_server_01"
output.logstash:
hosts: ["192.168.230.30:5045"]
Phía Logstash, chúng ta tạo một tệp cấu hình (ví dụ: nginx_processing.conf) để nhận dữ liệu từ Filebeat:
input {
beats {
port => 5045
}
}
output {
if "web_nginx" in [tags] {
elasticsearch {
hosts => ["192.168.230.10:9200", "192.168.230.20:9200"]
index => "logs-%{[fields][app_identifier]}-%{+YYYY.MM.dd}"
}
}
}
Kích hoạt Filebeat chạy dưới nền hệ thống:
nohup ./filebeat -e -c filebeat.yml > filebeat_run.log 2>&1 &
Thu thập nhật ký đa dịch vụ (Nginx, Apache, MySQL)
Trong thực tế, một máy chủ có thể chạy nhiều dịch vụ khác nhau. Filebeat cho phép định nghĩa nhiều nguồn đầu vào với các tag định danh riêng biệt để Logstash có thể phân loại dễ dàng.
Cấu hình mở rộng cho filebeat.yml:
filebeat.inputs:
# Thu thập Nginx
- type: log
enabled: true
paths: ["/var/log/nginx/*.log"]
tags: ["srv_nginx"]
fields: { server_ip: "192.168.230.21" }
# Thu thập Apache HTTPD
- type: log
enabled: true
paths: ["/var/log/httpd/access_log", "/var/log/httpd/error_log"]
tags: ["srv_httpd"]
fields: { server_ip: "192.168.230.21" }
# Thu thập MySQL General Log
- type: log
enabled: true
paths: ["/usr/local/mysql/data/mysql_general.log"]
tags: ["srv_mysql"]
fields: { server_ip: "192.168.230.21" }
output.logstash:
hosts: ["192.168.230.30:5048"]
Cấu hình Logstash để phân phối log vào các Index khác nhau trong Elasticsearch:
input {
beats { port => 5048 }
}
output {
if "srv_nginx" in [tags] {
elasticsearch {
hosts => ["192.168.230.10:9200"]
index => "nginx-prod-%{+YYYY.MM.dd}"
}
}
else if "srv_httpd" in [tags] {
elasticsearch {
hosts => ["192.168.230.10:9200"]
index => "apache-prod-%{+YYYY.MM.dd}"
}
}
else if "srv_mysql" in [tags] {
elasticsearch {
hosts => ["192.168.230.10:9200"]
index => "mysql-audit-%{+YYYY.MM.dd}"
}
}
}
Thu thập trực tiếp bằng Logstash (Tùy chọn)
Dù Filebeat được khuyến nghị cho việc thu thập log tại nguồn, trong một số trường hợp đơn giản, bạn có thể sử dụng plugin file của Logstash để đọc trực tiếp tệp tin:
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
stat_interval => "1"
type => "apache_access"
}
}
output {
elasticsearch {
hosts => ["192.168.230.10:9200"]
index => "direct-apache-%{+YYYY.MM.dd}"
}
}
Lưu ý: Khi sử dụng Logstash trực tiếp để đọc file, hãy đảm bảo máy chủ có đủ tài nguyên RAM để tránh ảnh hưởng đến hiệu năng của các ứng dụng chính đang chạy trên cùng server.