Realtime Fastly logs with Grafana Loki for under $1 a day
Bài tóm tắt Loveholidays 2021 2. Tăng trưởng Độ khó: Dễ
Loveholidays · 2021 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Medium custom domain chặn crawler và không có bản Wayback dùng được; đọc qua trình duyệt, ghi chú bằng lời của wiki.
Bối cảnh
- Fastly là CDN đứng trước Loveholidays, phục vụ hàng triệu request mỗi ngày; có trang được trả hoàn toàn từ CDN. Mỗi tương tác của người dùng tạo nhiều request ở CDN hơn ở hạ tầng của họ, nên log CDN lớn: hơn 30 GB/ngày (2021).
- Họ đã đổ log Fastly vào BigQuery vài năm (hàng chục TB): tốt cho câu hỏi hồi cứu và so sánh dài hạn (bao nhiêu người gặp lỗi, đến từ đâu, so tháng này với năm ngoái). Nhưng khi đang sự cố hay vừa deploy, BigQuery bất tiện: phải viết SQL rồi chạy lại liên tục, không có biểu đồ, khó chia sẻ, và tốn tiền.
Thay đổi chính
- Không dùng ELK: cụm ELK (24 GB RAM) không chịu nổi lưu lượng CDN, nhất là lúc bị DDoS; nạp log CDN vào có thể làm sập cụm và mất luôn log của các ứng dụng khác. Theo họ, ELK tốn CPU/RAM, co giãn kém, và họ không muốn trả gấp đôi.
- Không dùng SaaS: đắt và thêm một công cụ vào stack monitoring vốn đã dài.
- Dùng Loki (đã dùng cho log Kubernetes): viết bằng Go, ít bộ nhớ, không giữ index trong bộ nhớ, lưu trên GCS, khớp với Grafana và Prometheus sẵn có, giảm số công cụ.
- Đường đi: Fastly stream log qua HTTPS → DNS record riêng → Ingress của GKE (BackendConfig + Cloud Armor chỉ cho dải IP của Fastly) → Fluent Bit (plugin nhận HTTP, gắn label
job="fastly-cdn") → Loki. Promtail không chạy được với luồng này nên đổi sang Fluent Bit. Fastly yêu cầu xác minh sở hữu domain nên kèm một nginx nhỏ trên cùng Ingress. Cấu hình phía Fastly bằng Terraform; định dạng log lấy từ cùng một file JSON với luồng BigQuery để hai bên nhất quán.
Kết quả (theo Loveholidays)
- Vài MB RAM và vài mili-CPU cho hàng GB log mỗi giờ, xem ngay trong Grafana, nhúng được vào dashboard và alert. Thời gian giữ "vô hạn" so với 3 tuần trên Elasticsearch. Chi phí chỉ là compute, load balancer, GCS: dưới 1 USD/ngày.
- BigQuery vẫn giữ cho phân tích dài hạn; Loki cho thời gian thực.
Vì sao
- Hai loại câu hỏi khác nhau (hồi cứu dài hạn và chẩn đoán lúc này) cần hai kho khác nhau (Observability và monitoring). Kho không index nội dung, lưu trên object storage, làm cho log khối lượng lớn rẻ đi một bậc (Chi phí hạ tầng và build vs buy).
Bài học cho SWE
- Đừng nạp nguồn log khổng lồ, có đột biến (CDN) vào cụm log dùng chung với ứng dụng khác; nó có thể kéo sập log của mọi người.
- Giữ một định dạng log chung cho các đích khác nhau.
- Chọn công cụ đã có trong stack trước khi thêm công cụ mới.
Liên quan
- Loveholidays 2021 · Grab 2019 (ELK cỡ PB) · Netflix 2018 (lọc log trên luồng)
- Observability và monitoring · Chi phí hạ tầng và build vs buy
Được nhắc tới trong
Công ty (1)