2

Я регистрирую некоторые данные относительно использования NFS клиентами по сети. Теперь я хочу нарисовать это на линейной диаграмме, и я ошеломлен возможностями, которые я там обнаружил. Кажется, никто не может быть легко понят для меня.

Вот упрощенный журнал:

1356112995  192.168.1.46    766
1356112995  192.168.1.12    14
1356112995  192.168.1.141   5
1356112995  192.168.1.11    38
1356114790  192.168.1.46    760
1356114790  192.168.1.12    10
1356114790  192.168.1.11    18
1356116586  192.168.1.46    758
1356116586  192.168.1.12    9
1356118387  192.168.1.46    783
1356120187  192.168.1.46    687
1356121987  192.168.1.46    699
1356123787  192.168.1.46    371
1356125587  192.168.1.46    717
1356127386  192.168.1.46    0

Первый столбец - это отметка времени, она должна быть на оси X. Второй столбец - это IP-адрес клиента. Третий столбец - количество операций, оно должно быть на оси Y. График должен быть линейным графиком.

Я хочу, чтобы это было автоматически, поэтому прокладка из командной строки - это то, что нужно. Хотя понятия не имею, как это сделать.

Он должен сгенерировать файл png, который впоследствии будет загружен на некоторый веб-сервер для визуализации.

2 ответа2

4

Это действительно поздно, но, как я наткнулся на этот пост, я положу свои две копейки.

Без установки R мы можем использовать call awk внутри gnuplot:

plot "<awk '{print $1, $3}' logfile" u 1:2

где вывод команды awk в двойных кавычках используется gnuplot для отображения ваших данных. Команда awk просто печатает первый и третий столбец.

Вы можете поместить указанную выше команду в файл gnuplot, например plot_log.gp, а затем вызвать ее в командной строке следующим образом:

gnuplot -e "logfile='your_actual_log_file.log'" plot_log.gp

это команда, которая легко помещается в задание cron или в какой-либо скрипт, который у вас есть. Обратите внимание на одинарные кавычки вокруг текста.

Я просто хотел продемонстрировать, что gnuplot действительно очень гибкий, так как он может принимать аргументы командной строки и назначать их в качестве переменных в скрипте. Никаких тяжелых зависимостей (глядя на тебя, R), поскольку awk довольно распространен.

0

Вероятно, есть несколько способов сделать это без установки программного обеспечения (я полагаю, что с NFS вы используете Linux). Но мое любимое решение включает в себя R, которая бесплатна и доступна для Linux/Windows/Mac и т.д. И предоставит вам множество возможностей для настройки вашего графика или манипулирования вашими данными.

Шаг 1
Сделайте скрипт с кодом, который будет выглядеть примерно так:

logfile <- read.table(file="client.log") #Adjust the logfile name as needed.
#This assumes tab separated columns. 
#If needed, column delimiters can be adjusted.
names(logfile) <- c("time.stamp","client","operations") 
#Rename the columns of the input data (if they are named at all)
require(lattice) #This package is needed for the xyplot() function below.  
#The main benefit of this function for your purposes is the ability to color 
#your plot circles by client name.
png(filename="logfile.png") #Designate the plot file type and save location
xyplot(operations~time.stamp,group=client,data=logfile,jitter.x=T,jitter.y=T)
#I've added jitter here which helps prevent plotted points from overlapping.
dev.off() #Close and save the plot

Я назвал свой скрипт log.to.png.R

Шаг 2
Из командной строки Unix или Mac вы можете вызвать скрипт следующим образом:
$R CMD BATCH log.to.png.R

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .