Thề thốt với Grafana là mình sẽ setup xong cái dashboard "vĩnh cửu" trong một chiều, nhưng thực tế thì... chỉ là một cơn ác mộng kéo dài 2 tuần.
Có những lúc mình ngồi chăm chú trước màn hình, mắt thì mờ đi vì quá nhiều đường curve chằng chịt trên Grafana, còn đầu thì đang cố gắng tìm logic trong những query PromQL vừa phức tạp vừa... khó hiểu. Prometheus thì mình vẫn thích vì nó nhẹ và "chịu khó" collect metric, nhưng cái khó nhất chính là khâu logging. Mình từng nghĩ cứ dump hết log vào Loki là xong, ai ngờ performance hệ thống vụt xuống thảm hại ngay lập tức.
Lúc đó team mình đang dùng một cái stack cũ, log thì nằm rải rác ở từng container, muốn tìm một cái lỗi "502 Bad Gateway" cụ thể thì phải chạy qua 3, 4 cái terminal khác nhau để grep. Mệt mỏi quá, mình quyết định chuyển sang model Observability đúng nghĩa. Sau này mình mới biết là mình đã "đốt tiền" cho việc setup một cái pipeline logging quá cầu kỳ. Đơn giản mà, không cần phải filter tất cả những log DEBUG đâu, chỉ cần tập trung vào ERROR và WARN thôi. Nhưng khi đó, cái ham muốn "nhìn thấy tất cả" (full visibility) đã khiến mình sai lầm.
Chuyện là, mình cố gắng để Loki scrape log của cả mấy service internal mà traffic không quá cao, kết quả là cái node database chứa log bị full disk trong vòng chưa đầy 3 ngày. Phải ngồi lại review lại cấu hình. Mình nhớ như in dòng command mình phải sửa trong file config của Promtail lúc đó:
static_configs:
- targets:
- localhost
labels:
job: my-app
__path__: /var/log/myapp/*.log
Thay vì scrape tất cả, mình đã thêm vào một cái filter đơn giản bằng regex để chỉ lấy những log có level cao hơn INFO. Less is more mà. Sau khi tối ưu xong, Grafana Dashboard của mình trông đẹp hơn nhiều, các panel hiển thị latency, error rate và throughput chạy mượt như lụa. Quan trọng nhất là khi có sự cố, mình chỉ cần nhìn vào một cái screen duy nhất là biết ngay là lỗi nằm ở đâu: có phải là database bị chậm không? Hay là có service nào bị OOM?
Tuy nhiên, có một điều gây tranh cãi mà mình vẫn thường nghĩ. Nhiều người bảo rằng việc setup đầy đủ Monitoring, Logging, Tracing là bắt buộc cho mọi dự án, dù là nhỏ. Nhưng theo kinh nghiệm của mình, với một dự án MVP nhỏ hoặc một tool nội bộ không critical, đôi khi chỉ cần một cái script simple chạy định kỳ gửi alert vào Slack cũng đủ rồi. Việc đầu tư quá nhiều vào infrastructure monitoring cho một cái service "tạm thời" đôi khi là một sự lãng phí thời gian không đáng có. Đành rằng nó rất cool và rất chuyên nghiệp khi thấy những dashboard màu sắc lung linh, nhưng mục tiêu cuối cùng vẫn là solve problem, không phải là build dashboard.
Tóm lại, Grafana và Prometheus là bộ đôi huyền thoại, nhưng hãy dùng chúng với cái đầu lạnh. Đừng để bị cuốn vào việc "làm đẹp" dashboard mà quên mất việc giải quyết vấn đề cốt lõi. Và hãy nhớ, log là công cụ để debug, không phải để khoe khoang số lượng data nhé!