Создание пользовательских данных журнала в GNU/Linux
Я регистрирую некоторые данные относительно использования 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 ответа
Вероятно, есть несколько способов сделать это без установки программного обеспечения (я предполагаю, что с 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
Это действительно поздно, но, как я наткнулся на этот пост, я положу свои две копейки.
Без установки 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 довольно распространен.