Existe um comando Unix / Linux para contar linhas por segundo de stdin?

17

Eu estou tentando contar o número de consultas SQL por segundo de um arquivo de log e quero fazer isso em tempo real enviando stdout do grep para algum comando. (Estou fazendo alguns testes de desempenho)

Eu mesmo poderia escrever, mas pensei com certeza que isso existiria.

Eu olhei para o wc mas não vi uma opção para permitir isso.

Eu também poderia usá-lo para contar solicitações por segundo, canalizando uma cauda do log de acesso.

    
por digidigo 30.01.2013 / 18:37

4 respostas

2
watch -n 3 "wc -l logfile"

página de manual

watch - executa um programa periodicamente, mostrando a saída em tela cheia Por padrão, o programa é executado a cada 2 segundos; use -n ou --interval para especificar um intervalo diferente.

    
por 07.03.2018 / 07:21
28

pv é o seu comando! P ipe V O iewer imprime estatísticas sobre os dados que passam por ele e pode ser executado em qualquer lugar do pipeline, pois canaliza o stdin diretamente para o stdout. Por exemplo:

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null

O comando pv imprime para stderr o número atual de linhas por segundo (o padrão é bytes por segundo), o que, para essa fonte de dados específica (arquivo de log padrão do Nginx), equivale a solicitações da Web recebidas por segundo. Eu só me preocupo com as contagens, então eu canso stdout em /dev/null . Existem também opções como:

  • -b (número total de linhas),
  • --average-rate (taxa média desde o início) e
  • --timer (rastreia quanto tempo o tubo está passando).

Se você não disser --line-mode , ele contará bytes, o que provavelmente não é o que você deseja para os registros do servidor, mas pode ser útil em outro lugar.

Nota final: ... | pv -lb > file.txt é muito parecido com ... | tee file.txt | awk '{printf "\r%lu", NR}' , o que também é útil para contar linhas, mas a pv é muito menor, embora a saída não seja tão interessante - pv atualiza a cada segundo por padrão, enquanto o comando awk é atualizado continuamente.

    
por 03.11.2014 / 09:06
13

Talvez você devesse tentar logtop ?

tail -f foobar.log |logtop
    
por 30.01.2013 / 18:52
1
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"
    
por 30.01.2013 / 19:08