In this question ai đó đã yêu cầu cách hiển thị mức sử dụng đĩa trong Linux. Tôi muốn thực hiện thêm một bước nữa trong cli-path ... làm thế nào về một kịch bản lệnh shell lấy đầu ra từ một cái gì đó giống như một câu trả lời hợp lý cho câu hỏi trước và tạo ra một biểu đồ/biểu đồ từ nó (output in a png tập tin hoặc một cái gì đó)? Đây có thể là một chút quá nhiều mã để yêu cầu trong một câu hỏi thường xuyên, nhưng tôi đoán là ai đó đã có một oneliner đặt xung quanh đâu đó ...Tạo biểu đồ/biểu đồ sử dụng đĩa với các công cụ chỉ CLI trong Linux
Trả lời
Tôi muốn giới thiệu munin. Nó được thiết kế cho chính xác loại điều này - sử dụng CPU đồ họa, sử dụng bộ nhớ, sử dụng đĩa và như vậy. giống như MRTG (nhưng MRTG chủ yếu nhắm vào việc lập biểu đồ lưu lượng của bộ định tuyến, vẽ đồ thị bất cứ thứ gì nhưng băng thông với nó rất dễ bị tấn công)
Soạn Munin là một trong những mục tiêu của dự án. Chúng có thể được viết bằng hầu hết mọi thứ (shell script, perl/python/ruby / etc, C, bất cứ thứ gì có thể được thực thi và tạo ra một đầu ra). Định dạng đầu ra plugin về cơ bản là disc1usage.value 1234
. Và gỡ lỗi các plugin rất dễ (so với MRTG)
Tôi đã thiết lập trên máy tính xách tay để theo dõi việc sử dụng đĩa, sử dụng băng thông (bằng cách kéo dữ liệu từ bảng điều khiển của ISP của tôi, biểu đồ của tôi " ", tải lên và sử dụng nhóm tin tức), tải trung bình và số lượng quy trình. Một khi tôi đã cài đặt nó (hiện tại hơi khó khăn trên OS X, nhưng nó tầm thường trên Linux/FreeBSD), tôi đã viết một plugin trong một vài phút, và nó đã làm việc, lần đầu tiên!
Tôi sẽ mô tả cách thiết lập, nhưng trang web munin sẽ làm điều đó tốt hơn nhiều so với tôi có thể!
Có một cài đặt ví dụ here
Một số lựa chọn thay thế là Nagios và xương rồng. Bạn cũng có thể viết một cái gì đó tương tự bằng cách sử dụng rrdtool. Munin, MRTG và Cacti về cơ bản là tất cả các hệ thống sử dụng đẹp hơn dựa trên công cụ vẽ đồ thị này.
Nếu bạn muốn một cái gì đó thực sự, thực sự đơn giản, bạn có thể làm ..
import os
import time
while True:
disc_usage = os.system("df -h/| awk '{print $3}'")
log = open("mylog.txt")
log.write(disc_usage + "\n")
log.close()
time.sleep(60*5)
Sau đó ..
f = open("mylog.txt")
lines = f.readlines()
# Convert each line to a float number
lines = [float(cur_line) for cur_line in lines]
# Get the biggest and smallest
biggest = max(lines)
smallest = min(lines)
for cur_line in lines:
base = (cur_line - smallest) + 1 # make lowest value 1
normalised = base/(biggest - smallest) # normalise value between 0 and 1
line_length = int(round(normalised * 28)) # make a graph between 0 and 28 characters wide
print "#" * line_length
Điều đó sẽ tạo biểu đồ ascii đơn giản của việc sử dụng đĩa. Tôi thực sự thực sự không khuyên bạn nên sử dụng một cái gì đó như thế này. Tại sao? Tệp nhật ký sẽ ngày càng lớn hơn và lớn hơn. Biểu đồ sẽ dần dần trở thành biểu đồ. RRDTool sử dụng một hệ thống cơ sở dữ liệu cán để lưu trữ dữ liệu của nó, vì vậy tệp sẽ không bao giờ lớn hơn khoảng 50-100KB và nó luôn liên tục vẽ đồ thị vì tệp có độ dài cố định.
Tóm lại. Nếu bạn muốn thứ gì đó dễ dàng vẽ đồ thị gần như bất cứ thứ gì, hãy sử dụng munin. Nếu bạn muốn một cái gì đó nhỏ hơn và khép kín, viết một cái gì đó với RRDTool.
Tôi đoán có một vài lựa chọn:
Đối với một giải pháp CLI tinh khiết, hãy sử dụng một cái gì đó như gnuplot. Xem here để sử dụng ví dụ. Tôi đã không được sử dụng gnuplot kể từ ngày sinh viên của tôi :-)
Không thực sự là một giải pháp CLI tinh khiết, nhưng tải về một cái gì đó giống như JFreeChart và viết một ứng dụng Java đơn giản mà đọc stdin và tạo biểu đồ của bạn.
Hy vọng điều này sẽ hữu ích.
Chúng tôi đã tự thực hiện công việc của mình tại nơi làm việc bằng cách sử dụng RRDtool (kết thúc lưu trữ dữ liệu cho các công cụ như MRTG). Chúng tôi chạy một kịch bản perl cứ 5 phút một lần cho mỗi phân vùng và đưa nó vào cơ sở dữ liệu RRD và sau đó sử dụng chức năng đồ thị của RRD để xây dựng biểu đồ. Phải mất một lúc để tìm ra cách thiết lập các tệp .rrd (ví dụ, tôi phải tìm hiểu RPN để thực hiện một số tính toán mà tôi muốn làm) nhưng nếu bạn có một số dữ liệu bạn muốn vẽ theo thời gian, Công cụ RRD là một cược tốt.
Nếu một số ký tự ASCII đủ "đồ họa" cho bạn, tôi có thể đề xuất ncdu. Nó là một công cụ tương tác CLI rất tốt đẹp, giúp tôi rất nhiều để bước xuống thư mục lớn mà không làm cd bigdir; du -hs hơn và hơn nữa.
+1 Tăng cường hoàn hảo cho việc thu thập từ xa! Yêu công cụ này, sử dụng siêu nhanh và xóa luồng công việc! – barrymac