Usando LogParser para gerar gráfico de tempo de resposta médio

4

Como posso obter este gráfico:

(de Acelerando o StackExchange )

Mostra a porcentagem de solicitações da Web que durou mais de N segundos. Eu tenho logs do IIS e LogParser instalados, mas não sei como proceder.

    
por Pavel Chuchuva 15.04.2010 / 23:04

2 respostas

4

É assim que você pode fazer isso com o LogParser e o Excel:

Step 1 Crie a seguinte consulta e salve-a como "Time taken graph.sql":

SELECT QUANTIZE(time-taken, 100) AS t, COUNT(*) as count
INTO 'Time-taken-graph.csv'
FROM u_ex*.log GROUP BY t

Etapa 2 Execute a consulta e exporte os resultados para o arquivo CSV:

LogParser.exe file:"Time taken graph.sql"

Etapa 3 Abra o arquivo CSV no Excel. Vou usar o Excel 2010 como exemplo.
Digamos que seus dados estejam no intervalo A1: B401:

Coloque"Tempo" na célula D1. Coloque "Porcentagem" na célula E1. Preencha o tempo na coluna D com séries começando de 0 a 5 com o passo 0.1:

Passo4ColoqueaseguintefórmulanacélulaE2(vocêprecisarásubstituir401peloseuvalor):

=SUMIF($A$2:$A$401,">="&D2*1000,$B$2:$B$401)/SUM($B$2:$B$401)

CopieafórmulaparatodasascélulasnacolunaEquetenhamvalordetempocorrespondente.DefinaoestilocomoPorcentagempressionandoCtrl+Shift+%

Etapa 5 Por fim, crie um gráfico de linhas com base nos dados nas colunas D e C:

    
por 22.04.2010 / 09:25
1

Eu escrevi um programa python para gerar esse gráfico usando os logs gerados pelo nosso balanceador de carga e flot para desenhar o gráfico gráfico real.

Eu passei por algumas iterações antes de decidir por esse gráfico:

  • Comecei com um gráfico de dispersão (tempo de resposta versus hora do dia) que é informativo por si só, bom para ter uma boa noção da forma e da variação de seu tráfego, mesmo que não seja particularmente bom para comunicação .

  • Então eu tentei um histograma, que não foi particularmente útil por causa da alta variação.

  • Finalmente acabei com isso, que é baseado em um histograma, mas é cumulativo e invertido.

Eu colocaria o código, mas é tão específico para o que eu estava fazendo que não vai ajudar ninguém. Então aqui está uma aproximação da função principal:

def point(times, cutoff):
    """
        times: sorted list of response times
        0 <= cutoff < 1
    """

    size = int(len(times) * cutoff)
    return (times[cutoff], 1 - cutoff)

Você plotará as coordenadas (x, y) como intervalos de corte acima de [0,1[ usando sua biblioteca de plotagem favorita.

    
por 16.04.2010 / 16:19