Estou tentando contar o número de consultas SQL por segundo de um arquivo de log e quero fazer isso em tempo real, canalizando 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.
linux
performance
digidigo
fonte
fonte
Respostas:
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.
fonte
pv
é seu comando! P ipê V iewer imprime estatísticas sobre os dados que passa através dele, e pode ser executado em qualquer lugar no seu pipeline, uma vez que tubos stdin diretamente sobre a stdout. Por exemplo:O
pv
comando imprime para stderr o número atual de linhas por segundo (o padrão é bytes por segundo), 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 entro em pânico/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 cano está funcionando).Caso contrário
--line-mode
, ele contará bytes, o que provavelmente não é o que você deseja para os logs do servidor, mas pode ser útil em outros lugares.Nota final:
... | pv -lb > file.txt
é muito parecida... | tee file.txt | awk '{printf "\r%lu", NR}'
, o que também é útil para contar linhas, mas apv
chamada é muito mais curta, embora a saída não seja tão interessante -pv
atualiza a cada segundo por padrão, enquanto esseawk
comando é atualizado continuamente.fonte
pv
é para isso que eu construía (eu procurariaawk
se fosse você), mas é claro que é possível. Suponha quetwilight stream --timeout 5
é um comando que vai provar do spritzer Twitter por 5 segundos e em seguida, saia:RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"
, em seguida,echo $RATE
produz algo como "[40,8 / s]" (note o adicional de--force
bandeira, uma vez quepv
'sstderr
não é mais um TTY).> /dev/null
mostras de que a saída está agora "em bloco" e não transmite mais sem problemas. Talvezunbuffer
seja necessário em alguns programas de produção para que eles não mudem para bloquear o buffer de saída quando detectam que estão sendo canalizados?Talvez você devesse tentar
logtop
?fonte
fonte
~/.my.cnf
para executarmysqladmin
sem solicitar a senha?