Создавайте графики использования диска с помощью инструментов только для CLI в Linux
Вопрос
В этом вопросе кто-то спросил о способах отображения использования диска в Linux.Я бы хотел сделать еще один шаг по пути cli...как насчет сценария оболочки, который берет выходные данные из чего-то вроде разумного ответа на предыдущий вопрос и генерирует из него график / chart (вывод в png-файле или что-то в этом роде)?Возможно, это слишком большой код для запроса в обычном вопросе, но я предполагаю, что у кого-то уже где-то есть oneliner...
Решение
Я бы порекомендовал мунин.Он предназначен именно для таких вещей - составления графиков использования процессора, памяти, использования диска и тому подобного.что-то вроде MRTG (но MRTG в первую очередь нацелен на графическое отображение трафика маршрутизатора, графическое отображение чего угодно, кроме полосы пропускания, с его помощью очень халтурно)
Писать плагины Munin очень просто (это было одной из целей проекта).Они могут быть написаны практически на чем угодно (shell script, perl / python / ruby / etc, C, на всем, что может быть выполнено и выдавать выходные данные).Формат вывода плагина в основном disc1usage.value 1234
.И отладка плагинов очень проста (по сравнению с MRTG).
Я настроил его на своем ноутбуке для мониторинга использования диска, полосы пропускания (извлекая данные из панели управления моего интернет-провайдера, он отображает мои два загрузочных "бункера", использование загрузок и групп новостей), среднюю нагрузку и количество процессов.Как только я установил его (в настоящее время это немного сложно в OS X, но тривиально в Linux / FreeBSD), я написал плагин за несколько минут, и он заработал с первого раза!
Я бы описал, как это настроить, но сайт munin сделает это намного лучше, чем я мог бы!
Вот пример установки здесь
Некоторые альтернативы - нагио и кактусы.Вы также могли бы написать что-то подобное, используя rrdtool.Munin, MRTG и Cacti, по сути, являются гораздо более удобными в использовании системами, основанными на этом инструменте построения графиков.
Если вам нужно что-то действительно простое, вы могли бы это сделать..
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)
Затем..
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
Это создаст простой график использования диска в формате ascii.Я действительно, действительно не рекомендую вам использовать что-то подобное.Почему?Файл журнала будет становиться все больше, и больше, и больше.График будет становиться все медленнее по сравнению с графиком.RRDTool использует систему с постоянной базой данных для хранения своих данных, поэтому размер файла никогда не будет превышать примерно 50-100 КБ, и он стабильно быстро отображается на графике, поскольку файл имеет фиксированную длину.
Короче говоря.Если вы хотите, чтобы что-то легко отображало практически все, что угодно, используйте мунин.Если вам нужно что-то меньшее и самодостаточное, напишите что-нибудь с помощью RRDTool.
Другие советы
Если некоторые символы ASCII являются "графическими" достаточно для вас, я могу порекомендовать ncdu . Это очень хороший интерактивный инструмент CLI, который мне очень помогает выходить из больших каталогов без использования cd bigdir; du-hs снова и снова.
Мы работали, используя RRDtool (сервер для хранения данных для таких инструментов, как MRTG ). Мы запускаем perl-скрипт каждые 5 минут, который берет du на раздел и помещает его в базу данных RRD, а затем использует функцию graph RRD для построения графиков. Требуется некоторое время, чтобы выяснить, как настроить файлы .rrd (например, мне пришлось заново изучить RPN, чтобы выполнить некоторые из вычислений, которые я хотел сделать), но если у вас есть данные, которые вы хотите отобразить с течением времени, RRD-инструмент - хорошая ставка.
Я думаю, есть несколько вариантов:
<Ол>Для чистого решения CLI используйте что-то вроде gnuplot. См. здесь для примера использования. Я не использовал gnuplot со студенческих лет: -)
Не совсем чистое решение для CLI, но загрузите что-то вроде JFreeChart и напишите простое Java-приложение, которое читает stdin и создает диаграмму.
Надеюсь, это поможет.