Who Watches the Watchmen? Keeping an Eye on Our Monitoring Systems
Bài tóm tắt Mercari 2022 3. Quy mô lớn Độ khó: Dễ
Mercari · 2022 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc
Bài của team Security Engineering về giám sát pipeline thu log bảo mật (SOAR) của chính họ; wiki chỉ giữ phần giám sát pipeline, bỏ qua nội dung bảo mật.
Bối cảnh
- Pipeline SOAR gồm collector và analyzer (Cloud Run, Cloud Functions viết Go), Pub/Sub, BigQuery. Sau vài lần "sao không thấy log mới trong BigQuery", họ cần giám sát chính hệ giám sát. Dùng công cụ có sẵn của GCP thay vì Datadog (mà kỹ sư khác dùng) cho đơn giản.
Thay đổi chính
- Lỗi bên trong service: trước đây
fmt.Printfra log mức mặc định. Lại thêm, để tiết kiệm chi phí log, họ đã đổi sink mặc định chỉ giữ log từ warning trở lên, nên những dòng "lỗi" này biến mất. Viết logger bọc zap (fork Zapdriver) gửi lỗi đúng định dạng vào Error Reporting (gom lỗi theo nội dung, trạng thái open/acknowledged/resolved, báo Slack khi lỗi mới hoặc lỗi đã đóng tái phát), tự lấy tên service từ biếnK_SERVICE. - Bẫy: một số lỗi mới không được báo. GCP Support chỉ ra Error Reporting cần một dòng log mức thấp hơn (
clouderrorreporting.googleapis.com/insights) làm trigger, mà sink đã lọc mất; lỗi tái phát thì trigger khác nên vẫn báo. Cắt log để tiết kiệm phải chừa log đó ra. - Giám sát luồng bằng module Terraform, mỗi bước một module có alert policy + widget dashboard, áp riêng cho từng service (hiện 130 policy), đã đưa vào template nên service mới có gần như tự động:
- Số event collector chuyển đi: báo khi không có event nào trong 1 giờ (chỉnh được cho nguồn thưa).
- Số lần chạy thành công của collector/analyzer, và tỉ lệ lần chạy lỗi vượt ngưỡng (mặc định 1%) thay vì số tuyệt đối, để bỏ qua chập chờn nhỏ.
- Tuổi message cũ nhất chưa ack và số message chưa ack của Pub/Sub.
- Job insert BigQuery lỗi (log-based metric; metric số dòng insert của BigQuery trễ 6 giờ nên không dùng được để phát hiện tức thời).
- Mất vài tuần tinh chỉnh để hết báo giả; nay có báo trong kênh là có chuyện thật. Error Reporting còn lộ ra lỗi chưa ai biết (ví dụ phải đóng client GCP kể cả trong Cloud Function, nếu không thì hết bộ nhớ).
Vì sao
- Pipeline dữ liệu hỏng thường hiện ra bằng việc thiếu dữ liệu, không bằng lỗi; phải alert trên sự vắng mặt và trên độ trễ hàng đợi (Observability và monitoring).
Bài học cho SWE
- Cắt log để tiết kiệm có thể tắt luôn cơ chế phát hiện lỗi phụ thuộc vào log đó; kiểm tra dịch vụ nào đang đọc log trước khi lọc.
- Alert theo tỉ lệ lỗi, không theo số tuyệt đối; alert khi không có event trong một khoảng thời gian.
- Đóng gói alert + dashboard thành module IaC và đưa vào template service.
Liên quan
#SOAR#Security monitoring pipeline#GCP Error Reporting#Cloud Monitoring#Terraform module#Log router sink#Log-based metric#Pub/Sub backlog#Absence alert
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (1)