2011-08-17 13 views
21

Chúng tôi có số liệu mà chúng tôi tăng mỗi lần người dùng thực hiện một hành động nhất định trên trang web của chúng tôi, nhưng đồ thị không ' t dường như là chính xác.Chỉ số theo dõi sử dụng StatsD (qua etsy) và Graphite, biểu đồ graphite dường như không vẽ đồ thị tất cả dữ liệu

Vì vậy, hãy thoát khỏi linh cảm này, chúng tôi đã đầu tư bản cập nhật.log carbon và phát hiện rằng hành động đã xảy ra hơn 4 nghìn lần hôm nay (sử dụng grep và wc), nhưng theo kết quả tích phân của biểu đồ, nó chỉ trả về 220.

Nguyên nhân có thể là gì? Dữ liệu đang được báo cáo đến statsd bằng cách sử dụng thư viện số liệu thống kê php, và gọi statsd::increment('metric'); và như đã nêu ở trên, nhật ký xác nhận rằng hơn 4.000 bản cập nhật cho khóa này đã xảy ra hôm nay.

Chúng tôi đang sử dụng:

graphite 0.9.6 với statsD (Etsy)

Trả lời

17

Sau khi đăng nhận xét của tôi ở trên, tôi thấy Graphite 0.9.9 có tệp cấu hình (mới?), Lưu trữ-tập hợp.conf, trong đó người ta có thể kiểm soát phương pháp tổng hợp trên mỗi mẫu. Các tùy chọn có sẵn là trung bình, tổng, phút, tối đa và cuối cùng.

http://readthedocs.org/docs/graphite/en/latest/config-carbon.html#storage-aggregation-conf

+0

Tôi ước chúng ta có thể đánh dấu 2 câu trả lời là chính xác \: –

+0

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. –

60

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 đề.

  1. 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:

  2. 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.

+0

Cám ơn chia sẻ này - Tôi cũng đã nhìn thấy oddness sau 6 giờ và bài viết của bạn giải thích chính xác lý do tại sao (Tôi đã sử dụng 6 giờ 10 chính xác thứ hai). Germaine cho bất cứ ai áp dụng các biến đổi tích phân để xem tổng số. –

+5

Re # 2, carbon theo mặc định, nhưng nó có thể cấu hình thông qua [storage-aggregation.conf]. (Http://graphite.readthedocs.org/en/latest/config-carbon.html#storage-aggregation-conf-regconf)) –

+0

Tại thời điểm bài đăng này (trước 9.9) cấu hình đó không tồn tại. tuy nhiên, @JeffArgast đã đăng câu trả lời liên quan đến tệp cấu hình đó, vì vậy tôi đã đánh dấu phản hồi của anh ấy là câu trả lời đúng cho câu hỏi này và để lại câu trả lời cho các bản cài đặt cũ hơn của tôi. Cảm ơn bạn đã chỉ ra thông qua các nhận xét, trong trường hợp ai đó bỏ qua phản hồi của anh ấy. –

Các vấn đề liên quan