Построение пользовательских данных журнала в 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-файл, который будет впоследствии загружен на какой-либо веб-сервер для визуализации.

25
задан wonea
06.04.2023 19:19 Количество просмотров материала 2446
Распечатать страницу

2 ответа

вероятно, есть несколько способов сделать это без установки программного обеспечения (с NFS, я предполагаю, что вы используете Linux box). Но, мое любимое решение включает в себя 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

0
отвечен D. Woods 2023-04-08 03:07

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

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

plot "<awk '{print , }' 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 довольно распространен.

4
отвечен Mani 2023-04-08 05:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх