Tôi đã cài đặt Graphite qua Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) với nginx và PostgresQuery. Khi tôi gửi dữ liệu theo cách thủ công, nó sẽ tạo ra số liệu nhưng tất cả các điểm dữ liệu của nó là "Không" (còn gọi là null). Điều này cũng xảy ra nếu tôi chạy example-client.py được vận chuyển bằng Graphite.
echo "jakub.test 42 $(date +%s)" | nc 0.0.0.0 2003 # Carbon listens at 2003
# A minute or so later:
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | head -n1
Sun May 4 12:19:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | tail -n1
Mon May 5 12:09:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | grep -v None | wc -l
0
Và:
$ python /opt/graphite/examples/example-client.py
# Wait until it sends two batches of data ...
$ whisper-fetch.py /opt/graphite/storage/whisper/system/loadavg_15min.wsp | grep -v None | wc -l
0
Theo ngrep, đây là dữ liệu đến cổng [từ lần thử sau] (dòng 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Đây là phần có liên quan của /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Bất cứ ý tưởng gì là sai? Số liệu và dữ liệu riêng của Carbon được hiển thị trong UI. Cảm ơn bạn!
Môi trường: Ubuntu 13.10 Saucy, than chì 0.9.12 (qua pip).
PS: Tôi đã viết về các nỗ lực khắc phục sự cố của mình ở đây - Graphite hiển thị số liệu nhưng không có dữ liệu - Xử lý sự cố
CẬP NHẬT :
- Điểm dữ liệu trong các tệp thì thầm chỉ được truy xuất sau mỗi 1m tối thiểu ngay cả khi chính sách lưu giữ chỉ định độ chính xác cao hơn như "1s" hoặc "10s".
- Giải pháp thay thế cho dữ liệu bị bỏ qua: Sử dụng lược đồ tổng hợp với
xFilesFactor = 0.1
(thay vì 0,5) hoặc đặt độ chính xác thấp nhất là 1m thay vì <số trong khoảng 1-49> s. - xem các bình luận bên dưới câu trả lời được chấp nhận hoặc câu trả lời của Graphite. Theo các tài liệu : "xFilesFactor
phải là số có dấu phẩy động trong khoảng từ 0 đến 1 và chỉ định phần nào của các vị trí của mức lưu giữ trước đó phải có các giá trị khác không để tổng hợp thành giá trị không null. Mặc định là 0,5. " Vì vậy, dường như không liên quan đến việc có độ chính xác xác định là 1 giây, dữ liệu được tổng hợp thành 1 phút và kết thúc là Không vì dưới 50% giá trị trong khoảng thời gian là không có gì.
GIẢI PHÁP
Vì vậy, @jlawrie dẫn tôi đến giải pháp. Hóa ra dữ liệu thực sự ở đó nhưng được tổng hợp thành không có gì, lý do là gấp đôi:
- Cả UI và whisper-fetch hiển thị dữ liệu được tổng hợp với độ chính xác cao nhất kéo dài toàn bộ thời gian truy vấn, mặc định là 24h. Tức là mọi thứ có độ giữ <1d sẽ không bao giờ hiển thị trong UI hoặc tìm nạp trừ khi bạn chọn khoảng thời gian ngắn hơn. Vì thời gian lưu của tôi trong 1 giây là 30 phút, tôi cần chọn khoảng thời gian <= 30 phút cuối để thực sự thấy dữ liệu thô với độ chính xác cao nhất được thu thập.
- Khi tổng hợp dữ liệu (từ 1 giây đến 1 phút trong trường hợp của tôi), theo mặc định, Graphite yêu cầu 50% (xFilesFactor = 0,5) của các điểm dữ liệu trong khoảng thời gian có giá trị. Nếu không, nó sẽ bỏ qua các giá trị hiện có và tổng hợp nó thành Không có. Vì vậy, trong trường hợp của tôi, tôi cần gửi dữ liệu ít nhất 30 lần trong vòng một phút (30 là 50% của 60 giây = 1 phút) để chúng hiển thị trong giá trị 1 phút tổng hợp. Nhưng ứng dụng của tôi chỉ gửi dữ liệu cứ sau 10 giây nên tôi chỉ có 6 trong số 60 giá trị có thể.
=> giải pháp là thay đổi độ chính xác đầu tiên từ 1 giây thành 10 giây và nhớ chọn khoảng thời gian ngắn hơn khi tôi muốn xem dữ liệu thô (hoặc mở rộng lưu giữ của nó thành 24h để hiển thị theo mặc định).