2009-03-03 25 views
7

Tôi quan tâm đến việc biết liệu có bất kỳ giải pháp thay thế nào cho rrdtool cho dữ liệu chuỗi thời gian ghi nhật ký hay không. Tôi đang xem xét thứ gì đó có thể mở rộng cho một số lượng lớn các thiết bị để theo dõi.công cụ rrd thay thế cho khối lượng cao

Từ những gì tôi đọc về chủ đề này, rrdtool là I/O bị ràng buộc khi bạn nhấn nó với số lượng lớn dữ liệu. Kể từ khi tôi hình dung điều này để quy mô đến một số lượng rất lớn các thiết bị để theo dõi, tôi tò mò nếu có bất kỳ thay thế mà sẽ không bị nghẹt thở trên I/O. Dựa trên SQL thích hợp, nhưng không nhất thiết.

Cảm ơn

+0

Nếu đó là I/O bị ràng buộc, sẽ không có được tốt? Điều đó có nghĩa là bạn có thể sử dụng giải pháp phần cứng, chẳng hạn như RAID, ổ đĩa thể rắn và nhiều máy để theo dõi dữ liệu không liên quan? – JasonSmith

+0

quan điểm của tôi cũng ... câu hỏi là chỉ cần làm thế nào là HW được sử dụng ... việc sử dụng rrdcached là khá tối ưu ... một cơ sở dữ liệu (vào cuối ngày) cũng phải viết công cụ vào đĩa, nhưng vì nó là mục đích chung hơn nhiều, tôi nghi ngờ nó sẽ có thể làm điều đó hiệu quả như rrdtool ... –

Trả lời

4

Nếu hiệu suất I/O là lo lắng chính thì bạn muốn xem xét một cái gì đó như rrdcached có sẵn trong phiên bản hiện tại (1.4) của RRDTools.

Chi phí I/O không phải là chức năng của dữ liệu được ghi, sau mỗi giá trị 8 byte cho mỗi nguồn dữ liệu. Băng thông I/O xuất phát từ thực tế, toàn bộ ngành (thường là 4k) cần được đọc trước khi được viết ra. Đột nhiên để viết 8 byte bạn đã đọc/ghi 8k byte.

Các rrdcached coalesces tất cả những viết với nhau vì vậy khi một RRD được cập nhật tỷ lệ dữ liệu hữu ích (giá trị DS thực tế) để lãng phí dữ liệu (byte phụ tùng trong ngành) được giảm.

Tất cả RRDTools sẽ tự động làm việc với rrdcached khi chúng phát hiện nó đang chạy (thông qua một biến môi trường). Điều này cho phép chúng kích hoạt flushes khi cần thiết, ví dụ khi tạo một đồ thị từ dữ liệu.

Trong khi chuyển sang một giải pháp dựa trên SQL có thể giúp xem xét thêm I/O sẽ được yêu cầu để hỗ trợ SQL. Xem xét bạn không có xu hướng sử dụng dữ liệu RRD trong kiểu truy cập ngẫu nhiên đó, một cơ sở dữ liệu là một chút của một sledgehammer cho vấn đề. Trong khi gắn bó với RRDTool sẽ tiếp tục truy cập vào tất cả các hệ thống sinh thái của các công cụ có thể hiểu và có thể làm việc với các tệp, điều này rất hữu ích đặc biệt nếu bạn đã quen thuộc với nó.

2

Một người bạn của tôi đã làm một số công việc trong một thời gian cách đây trên một backend SQL để lưu trữ dữ liệu vòng robin: http://rrs.decibel.org

Tuy nhiên, tôi nghi ngờ rằng kể từ khi bạn đang hỏi về "thiết bị theo dõi" , bạn có thể đang tìm kiếm một giải pháp hoàn chỉnh hơn.

+0

Tôi thấy rằng trong nghiên cứu của tôi. Tôi không nhìn để được duy trì, vì vậy tôi có một chút miễn cưỡng khi xem xét nó. – SorinV

+0

Tôi cũng thấy rằng, có vẻ như bản cập nhật cuối cùng là 2005. Không có nghĩa là nó sẽ không hoạt động ngay bây giờ, tôi chỉ không dành thời gian để giải nén tarball. : - / –

5

Có một số cơ sở dữ liệu chuỗi thời gian có tính sẵn sàng cao và/hoặc khả năng mở rộng làm mục tiêu.

Có lẽ có một cái nhìn tại

  • rrdcached, một lớp bộ nhớ đệm trên đầu trang của RRD
  • whisper, cơ sở dữ liệu đằng sau graphite
  • opentsdb là một phân phối, mở rộng cơ sở dữ liệu chuỗi thời gian (TSDB) bằng văn bản trên đầu trang của HBase
  • reconnoiter mặc dù trọng tâm của nó là nhiều hơn về theo dõi
1

Nếu hoạt động I/O trên giây là nút cổ chai chính của bạn và bạn đang sử dụng Linux, có một hack dễ dàng chỉ làm mất chi phí bộ nhớ của bạn. Sử dụng một tmpfs gắn kết để giai đoạn RRD của bạn viết.

Tất cả các hoạt động i/o sẽ được thực hiện trong bộ nhớ và sẽ không gây ra bất kỳ tắc nghẽn nào được tìm thấy trong việc thực hiện đĩa (điều này thậm chí nhanh hơn sử dụng đĩa trạng thái rắn).Sau đó bạn có thể sử dụng lệnh cron và rsync để sao chép chỉ RRD đã thay đổi vào đĩa một lần sau vài phút.


Tạo các thư mục

bash-4.2# mkdir /mnt/rrd-reads 
bash-4.2# mkdir /mnt/rrd-writes 

Tạo một hệ thống tập tin RAM 500MB-tối đa với các tùy chọn thích hợp

bash-4.2# mount -t tmpfs -o size=500m,mode=0750,uid=collectd,gid=collectd none /mnt/rrd-writes 
bash-4.2# echo "none /mnt/rrd-writes tmpfs size=500m,mode=0750,uid=collectd,gid=collectd 1 2" >> /etc/fstab 

Sao chép các tập tin RRD cũ vào điểm mới gắn

bash-4.2# cp -a /var/lib/collectd/rrd/* /mnt/rrd-writes 

Cấu hình ứng dụng RRD-viết của bạn ghi vào mới gắn kết điểm

bash-4.2# sed -i -e 's/DataDir "\/var\/lib\/collectd\/rrd"/DataDir "\/mnt\/rrd-writes"/' /etc/collectd/collectd.conf 

Thiết lập một công việc định kỳ để đồng bộ hóa chỉ RRDs thay đổi vào đĩa một lần mỗi 2 phút

bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync 

Đừng quên sao chép tệp RRD đã lưu của bạn es vào điểm gắn kết trước bạn bắt đầu ứng dụng rrd-writing của bạn! Bạn có thể cần phải chỉnh sửa tập lệnh init cho dịch vụ đó để đảm bảo các tệp ở đó trước khi bắt đầu. Nếu nó bắt đầu mà không có các tập tin tại chỗ, những cái trần mới sẽ được tạo ra và bạn sẽ rất bối rối khi thư mục đọc được ghi đè bằng các RRD trống.

Nếu lúc nào đó bạn cần phải thay đổi kích thước tmpfs gắn kết, bạn có thể làm điều đó một cách nhanh chóng:

bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes 
Các vấn đề liên quan