Estoy tratando de contar el número de consultas SQL por segundo desde un archivo de registro y quiero hacerlo en tiempo real canalizando stdout desde grep a algún comando. (Estoy haciendo algunas pruebas de rendimiento)
Podría escribirlo yo mismo, pero pensé con seguridad que esto existiría.
Miré wc pero no vi una opción para permitir esto.
También podría usarlo para contar las solicitudes por segundo al extraer una cola del registro de acceso.
linux
performance
digidigo
fuente
fuente
Respuestas:
página man
watch: ejecuta un programa periódicamente, mostrando la salida a pantalla completa Por defecto, el programa se ejecuta cada 2 segundos; use -n o --interval para especificar un intervalo diferente.
fuente
pv
es tu comando! P ipe V iewer imprime estadísticas sobre los datos que pasan a través de él y puede ejecutarse en cualquier lugar de su canalización, ya que canaliza stdin directamente hacia stdout. Por ejemplo:El
pv
comando imprime para stderr el número actual de líneas por segundo (el valor predeterminado es bytes por segundo), lo que, para esta fuente de datos en particular (el archivo de registro predeterminado de Nginx), equivale a las solicitudes web entrantes por segundo. Solo me importan los recuentos, así que me conecto con stdout/dev/null
. También hay opciones como:-b
(número total de líneas),--average-rate
(tasa promedio desde el inicio), y--timer
(rastrea cuánto tiempo ha estado funcionando la tubería).Si no lo dice
--line-mode
, contará bytes, lo que probablemente no sea lo que desea para los registros del servidor, pero podría ser útil en otros lugares.Nota final:
... | pv -lb > file.txt
es muy similar... | tee file.txt | awk '{printf "\r%lu", NR}'
, lo que también es útil para contar líneas, pero lapv
llamada es mucho más corta, aunque el resultado no es tan emocionante: laspv
actualizaciones se realizan cada segundo por defecto, mientras que eseawk
comando se actualiza continuamente.fuente
pv
es para lo que está diseñado (lo alcanzaríaawk
si fuera tú), pero por supuesto que es posible. Supongamos quetwilight stream --timeout 5
es un comando que muestreará desde el spritzer de Twitter durante 5 segundos y luego se cerrará:,RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"
luegoecho $RATE
produce algo como "[40.8 / s]" (tenga en cuenta la--force
bandera adicional , ya quepv
sstderr
ya no es un TTY).> /dev/null
programas de que la salida ahora está "bloqueada en bloques" y ya no se transmite sin problemas. ¿Quizásunbuffer
sea necesario en algunos programas productores para que no cambien a bloquear el búfer de salida cuando detectan que están siendo canalizados?Tal vez deberías intentarlo
logtop
?fuente
fuente
~/.my.cnf
para ejecutarsemysqladmin
sin solicitar contraseña?