Quick start: Dựng Fluent Bit đẩy log sau 5 phút
Bỏ qua mớ lý thuyết dài dòng. Chúng ta bắt tay vào thực hành ngay để có một log collector chạy mượt trên máy.
1. Cài đặt Fluent Bit trên Ubuntu / Debian
Mở terminal và chạy script chính thức từ Fluent Bit để thêm kho lưu trữ cùng bản cài mới nhất:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
sudo systemctl daemon-reload
sudo systemctl enable fluent-bit
Với RHEL, Rocky Linux hoặc AlmaLinux, bạn chạy lệnh tương đương:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
sudo systemctl enable --now fluent-bit
2. Tạo file cấu hình tối thiểu đẩy metrics ra console
File cấu hình mặc định nằm ở /etc/fluent-bit/fluent-bit.conf. Tạo file cấu hình mẫu dưới đây để test nhanh pipeline:
sudo tee /etc/fluent-bit/fluent-bit.conf << 'EOF'
[SERVICE]
Flush 1
Log_Level info
Daemon off
[INPUT]
Name cpu
Tag my_cpu
Interval_Sec 2
[OUTPUT]
Name stdout
Match *
EOF
3. Chạy thử nghiệm trực tiếp
Gọi thẳng binary để quan sát dữ liệu in ra terminal:
/opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
Dòng JSON chứa thông số CPU nhảy đều đặn mỗi 2 giây? Chúc mừng bạn, pipeline đã thông suốt.
Kiến trúc Fluent Bit: Nhẹ đến mức nào?
Nhiều bạn thắc mắc: “Sao không dùng Logstash hay Fluentd cho phổ biến?”. Điểm mấu chốt nằm ở chi phí tài nguyên. Logstash ngốn từ 500MB đến 1GB RAM vì chạy trên JVM. Fluentd viết bằng Ruby cũng chiếm tầm 50-100MB. Trong khi đó, Fluent Bit viết bằng C thuần. Nó chỉ ăn vỏn vẹn 15-30MB RAM và dưới 1% CPU khi xử lý hàng nghìn log/giây. Với VPS 1 vCPU – 1GB RAM hay cụm Kubernetes nghìn node, đây là khác biệt sống còn.
Pipeline xử lý log gồm 5 bước tuần tự:
- INPUT: Đọc dữ liệu từ log file (
tail), syslog, systemd journal hoặc metrics. - PARSER: Chuyển raw text (Nginx, Apache) thành JSON có cấu trúc.
- FILTER: Thêm bớt trường, bóc tách IP, lọc bỏ dòng thừa hoặc gắn nhãn máy chủ.
- BUFFER: Giữ tạm log trên RAM hoặc ghi xuống đĩa (filesystem buffer) phòng khi đích đến bị sập.
- OUTPUT: Gửi log tới đích như Grafana Loki, Elasticsearch, OpenSearch hoặc Kafka.
Dữ liệu đi đúng đích nhờ cặp Tag và Match. Ở block INPUT, bạn gắn Tag web.nginx.access. Đến block OUTPUT, bạn chỉ định Match web.nginx.*. Fluent Bit sẽ tự động khớp tiền tố để điều hướng.
Cấu hình thực chiến: Đẩy song song về Loki và Elasticsearch
Mô hình phổ biến ở nhiều team là chia nhánh log. Loki dùng xem live tail và truy vấn nhanh trên Grafana dashboard. Elasticsearch giữ log để team Security hoặc Data đào sâu tìm kiếm full-text.
Thu thập Nginx access log và Syslog hệ thống
Đây là file /etc/fluent-bit/fluent-bit.conf chuẩn production cho cụm máy chủ Linux:
[SERVICE]
Flush 1
Log_Level info
Parsers_File parsers.conf
Storage.path /var/log/fluent-bit/buffer
Storage.sync normal
Storage.checksum off
Storage.backlog.mem_limit 10M
# 1. INPUT: Đọc log Nginx
[INPUT]
Name tail
Tag web.nginx.access
Path /var/log/nginx/access.log
Parser nginx
DB /var/log/fluent-bit/nginx.db
Mem_Buf_Limit 15MB
Storage.type filesystem
# 2. INPUT: Đọc Systemd Journal (Syslog)
[INPUT]
Name systemd
Tag host.systemd
Read_From_Tail On
Storage.type filesystem
# 3. FILTER: Gắn metadata máy chủ
[FILTER]
Name record_modifier
Match *
Record env production
Record cluster vps-sg-01
# 4. OUTPUT 1: Đẩy log về Grafana Loki
[OUTPUT]
Name loki
Match web.nginx.*
Host loki-server.internal
Port 3100
Labels job=fluent-bit, app=nginx, env=$env
Auto_Kubernetes_Labels off
# 5. OUTPUT 2: Đẩy log về Elasticsearch
[OUTPUT]
Name es
Match host.*
Host es-cluster.internal
Port 9200
Index linux-systemd-logs
Type _doc
HTTP_User elastic
HTTP_Passwd SecretPassword123
TLS On
TLS.verify Off
Retry_Limit 5
3 tham số không thể bỏ qua:
DB /var/log/fluent-bit/nginx.db: Fluent Bit lưu lại offset dòng log đã đọc vào file SQLite tí hon. Khi restart service hay reboot OS, tiến trình đọc tiếp vị trí cũ mà không sợ mất hoặc nhân đôi log.Storage.type filesystem: Kích hoạt đệm trên ổ cứng. Nếu Elasticsearch mất kết nối 15 phút, log sẽ nằm an toàn trên đĩa thay vì phình to làm tràn RAM.Retry_Limit 5: Khống chế số lần gửi lại khi network lỗi, tránh treo cứng worker thread.
Kinh nghiệm tối ưu từ môi trường Production
Hệ thống monitoring vận hành trơn tru hay không nằm ở khâu tinh chỉnh. Ban đầu, hễ backend Loki bảo trì 5 phút là hàng loạt server nhảy cảnh báo OOM vì buffer RAM cạn kiệt. Dưới đây là 3 bài học thực tế bạn nên áp dụng ngay:
1. Bắt buộc bật Disk Buffer thay vì chỉ dựa vào RAM
Mặc định Fluent Bit chỉ lưu tạm log trên RAM. Khi đích đến nghẽn mạng hoặc trả về HTTP 429/503, RAM chạm trần Mem_Buf_Limit. Hệ thống buộc phải drop log hoặc kích hoạt OOM Killer hạ gục luôn web server. Hãy luôn cấu hình Storage.type filesystem ở mọi block INPUT quan trọng.
2. Lọc bỏ log rác trước khi truyền qua mạng
Đừng gửi tất cả mọi thứ. Health check từ AWS ALB hay K8s liveness probe gõ /healthz mỗi 2 giây sẽ ngốn sạch quota lưu trữ. Dùng filter grep để gạt phăng chúng ngay tại nguồn:
[FILTER]
Name grep
Match web.nginx.access
Exclude log ^.*"GET /healthz.*200.*$
Chỉ một rule đơn giản này có thể cắt giảm 40-60% dung lượng log vô nghĩa cần đẩy lên cluster mỗi ngày.
3. Kiểm tra cú pháp bằng dry-run trước khi reload
Đừng vội chạy systemctl restart fluent-bit ngay khi vừa sửa config. Hãy kiểm tra cú pháp trước bằng cờ -d (dry-run):
/opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf --dry-run
Khi thấy terminal báo configuration syntax ok, bạn mới yên tâm reload service:
sudo systemctl restart fluent-bit
sudo journalctl -u fluent-bit -f
Nắm vững pipeline và cơ chế disk buffer, bạn sẽ có một log shipper cực kỳ ổn định, bền bỉ và không lo tốn tài nguyên.

