Plotar dados de log personalizados no GNU / Linux

2

Estou registrando alguns dados relativos ao uso do NFS pelos clientes em uma rede. Agora quero plotá-lo em um diagrama de linhas e fico impressionado com as possibilidades que estou descobrindo. Ninguém parece ser fácil de entender para mim.

Aqui está um log simplificado:

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

A primeira coluna é um timestamp, deve estar no eixo X. A segunda coluna é o IP do cliente. Terceira coluna é o número de operações, deve estar no eixo Y. O gráfico deve ser um gráfico de linhas.

Eu quero que isso seja automático, então traçar a partir da linha de comando é o caminho a percorrer. Não tenho ideia de como fazer isso, no entanto.

Ele deve gerar um arquivo png que será posteriormente enviado para algum servidor da Web para visualização.

    
por Jorge Suárez de Lis 23.12.2012 / 02:06

2 respostas

0

Provavelmente, existem algumas maneiras de fazer isso sem instalar o software (com o NFS, suponho que você esteja usando uma caixa do Linux). Mas, minha solução favorita envolve R , que é gratuito e está disponível para Linux / Windows / Mac, etc. e apresentará a você uma miríade de oportunidades para personalizar seu enredo ou manipular seus dados.

Etapa 1 - Crie um script com código semelhante a este:

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

Eu chamei meu script log.to.png.R

Etapa 2 - A partir de uma linha de comando Unix ou Mac, você pode chamar o script desta maneira:
$R CMD BATCH log.to.png.R

    
por 23.12.2012 / 03:51
4

Isso é muito tarde, mas como aconteceu neste post, colocarei meus dois centavos.

Sem instalar o R, podemos usar o call awk dentro do gnuplot:

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

onde a saída do comando awk nas aspas duplas é usada pelo gnuplot para plotar seus dados. O comando awk simplesmente exibe a primeira e a terceira coluna.

Você pode colocar o comando acima em um arquivo do gnuplot, como plot_log.gp e, em seguida, chamá-lo na linha de comando como

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

que é um comando que é facilmente colocado em um cron job ou algum script que você possui. Observe as aspas simples ao redor do texto.

Eu só queria demonstrar que o gnuplot é realmente flexível, já que ele pode pegar argumentos de linha de comando e atribuí-los como variáveis dentro de um script. Não há dependências pesadas (olhando para você, R) como o awk é bastante difundido.

    
por 22.04.2013 / 11:04

Tags