Sau khi một số nghiên cứu thông qua các tài liệu, và một số cuộc nói chuyện với người khác, tôi đã tìm thấy các vấn đề - và giải pháp.
Cách định dạng tệp tin thì thầm được thiết kế, bạn mong đợi bạn (hoặc ứng dụng của bạn) xuất bản các bản cập nhật không nhanh hơn khoảng thời gian tối thiểu trong tệp storage-schemas.conf
của bạn. Tệp này được sử dụng để định cấu hình mức độ lưu giữ dữ liệu bạn có ở các độ phân giải khoảng thời gian khác nhau.
My storage-schemas.conf
tệp được đặt với thời gian lưu giữ tối thiểu là 1 phút. Daemon StatsD mặc định (từ etsy) được thiết kế để cập nhật thành carbon (graphite daemon) cứ 10 giây một lần. Lý do này là một vấn đề là: trong một khoảng thời gian 60 giây StatsD báo cáo 6 lần, mỗi lần ghi đè lên lần cuối cùng (trong khoảng 60 giây đó, bởi vì bạn đang cập nhật nhanh hơn một lần mỗi phút). Điều này tạo ra kết quả thực sự kỳ lạ trên biểu đồ của bạn vì 10 giây cuối cùng trong một phút có thể hoàn toàn chết và báo cáo 0 cho hoạt động trong khoảng thời gian đó, kết quả là hoàn toàn nuking tất cả dữ liệu bạn đã viết cho phút đó. Để sửa lỗi này, tôi phải định cấu hình lại tệp storage-schemas.conf
để lưu trữ dữ liệu ở độ phân giải tối đa 10 giây, vì vậy mọi cập nhật từ StatsD sẽ được lưu trong cơ sở dữ liệu thì thầm mà không bị ghi đè.
Etsy công bố cấu hình storage-schemas.conf
rằng họ đang sử dụng để cài đặt của họ về carbon, trông như thế này:
[stats]
priority = 110
pattern = ^stats\..*
retentions = 10:2160,60:10080,600:262974
này có thời gian lưu 10 giây tối thiểu, và các cửa hàng 6 giờ giá trị của chúng. Tuy nhiên, do vấn đề tiếp theo của tôi, tôi đã mở rộng đáng kể thời gian lưu giữ.
Khi tôi để dữ liệu này được thu thập trong một vài ngày, tôi nhận thấy rằng dữ liệu vẫn bị tắt (và đang được báo cáo). Điều này là do 2 vấn đề.
Số liệu thống kêD (phiên bản cũ) chỉ báo cáo số sự kiện trung bình mỗi giây cho mỗi 10 kỳ báo cáo thứ hai. Điều này có nghĩa, nếu bạn tăng một khóa 100 lần trong 1 giây và 0 lần trong 9 giây tiếp theo, vào cuối số liệu thống kê thứ hai thứ 10 sẽ báo cáo 10 thành graphite, thay vì 100. (100/10 = 10). Điều này không thể báo cáo tổng số sự kiện trong khoảng thời gian 10 giây (hiển nhiên).
Phiên bản mới hơn của số liệu thống kê khắc phục sự cố này khi họ giới thiệu nhóm stats_counts
, ghi tổng số sự kiện trên mỗi số liệu cho mỗi khoảng thời gian 10 giây (vì vậy thay vì báo cáo 10 trong ví dụ trước, báo cáo 100).
Sau khi tôi nâng cấp StatsD, tôi nhận thấy rằng 6 giờ cuối cùng của dữ liệu nhìn tuyệt vời, nhưng khi tôi nhìn xa hơn 6 giờ qua - những thứ có vẻ kỳ lạ, và lý do tiếp theo là lý do tại sao:
Như cửa hàng graphite dữ liệu, nó di chuyển dữ liệu từ độ chính xác cao để giữ độ chính xác thấp hơn. Điều này có nghĩa là, bằng cách sử dụng ví dụ etsy storage-schemas.conf
, sau 6 giờ chính xác 10 giây, dữ liệu được chuyển đến độ chính xác 60 giây (1 phút). Để di chuyển 6 điểm dữ liệu từ độ chính xác 10s đến 60s, graphite làm trung bình 6 điểm dữ liệu. Vì vậy, nó sẽ lấy tổng giá trị của 6 điểm dữ liệu cũ nhất và chia nó thành 6. Điều này cho phép số sự kiện trung bình trên 10 giây trong khoảng thời gian 60 giây đó (chứ không phải tổng số sự kiện, đó là những gì chúng tôi quan tâm về cụ thể).
Đây chỉ là cách graphite được thiết kế, và đối với một số trường hợp nó có thể hữu ích, nhưng trong trường hợp của chúng tôi, nó không phải là những gì chúng tôi muốn. Để "khắc phục" sự cố này, tôi đã tăng thời gian lưu giữ chính xác 10 giây lên 60 ngày. Ngoài 60 ngày, tôi lưu trữ các giới hạn tối thiểu và 10 phút, nhưng về cơ bản chúng không có lý do, vì dữ liệu đó không hữu ích cho chúng tôi.
Tôi hy vọng điều này sẽ giúp ai đó, tôi biết nó khó chịu cho tôi một vài ngày - và tôi biết có không phải là một cộng đồng rất lớn của người dân đang sử dụng ngăn xếp phần mềm này cho mục đích này, vì vậy phải mất một một chút nghiên cứu để thực sự tìm ra những gì đang diễn ra và làm thế nào để có được kết quả mà tôi muốn.
Nguồn
2011-08-18 12:36:34
Tôi ước chúng ta có thể đánh dấu 2 câu trả lời là chính xác \: –
Và tài liệu statsd (ít nhất là ngày hôm nay) cũng mô tả vấn đề này và làm thế nào để giải quyết nó tại https://github.com/etsy/statsd/blob/master/docs/graphite.md. –