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

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