Próbuję policzyć liczbę zapytań SQL na sekundę z pliku dziennika i chcę to zrobić w czasie rzeczywistym, przesyłając stdout z grep do jakiegoś polecenia. (Robię testy wydajności)
Mógłbym to napisać sam, ale na pewno myślałem, że tak będzie.
Spojrzałem na wc, ale nie widziałem opcji, aby na to pozwolić.
Mógłbym go również użyć do zliczania żądań na sekundę, wysyłając potok z dziennika dostępu.
linux
performance
digidigo
źródło
źródło
Odpowiedzi:
strona man
watch - okresowo uruchamiaj program, wyświetlając pełny ekran wyjściowy Domyślnie program jest uruchamiany co 2 sekundy; użyj -n lub --interval, aby określić inny interwał.
źródło
pv
to twoje polecenie! P ipe V iewer drukuje statystyki dotyczące przepływających przez nią danych i może działać w dowolnym miejscu w potoku, ponieważ przesyła stdin bezpośrednio do stdout. Na przykład:W
pv
komenda na stderr aktualną liczbę wierszy na sekundę (domyślnie jest to bajtów na sekundę), który dla tego konkretnego źródła danych (domyślnie w pliku dziennika nginx), przyrównuje do przychodzących żądań internetowych na sekundę. Dbam tylko o liczby, więc wkładam stdout do/dev/null
. Istnieją również opcje takie jak:-b
(całkowita liczba linii),--average-rate
(średnia stawka od początku), oraz--timer
(śledzi, jak długo trwa rura).Jeśli nie powiesz
--line-mode
, policzy bajty, co prawdopodobnie nie jest tym, czego potrzebujesz do dzienników serwera, ale może być przydatne w innym miejscu.Ostatnia uwaga:
... | pv -lb > file.txt
jest bardzo podobna... | tee file.txt | awk '{printf "\r%lu", NR}'
, co jest również przydatne do zliczania linii, alepv
połączenie jest znacznie krótsze, chociaż wyjście nie jest tak ekscytujące -pv
domyślnie aktualizuje się co sekundę, podczas gdy toawk
polecenie aktualizuje się ciągle.źródło
pv
jest stworzony ( sięgałbym poawk
ciebie, gdybym był tobą), ale oczywiście jest to możliwe. Załóżmy, żetwilight stream --timeout 5
jest to polecenie, które pobiera próbki ze spritzera na Twitterze przez 5 sekund, a następnie wychodzi:,RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)"
a następnieecho $RATE
produkuje coś w rodzaju „[40,8 / s]” (zwróć uwagę na dodatkową--force
flagę, ponieważpv
„s”stderr
nie jest już TTY).> /dev/null
pokazuje, że dane wyjściowe są teraz „dzielone na fragmenty” i nie są już przesyłane płynnie. Być możeunbuffer
potrzebne są niektóre programy produkcyjne, aby nie przełączały się na blokowanie buforowania danych wyjściowych po wykryciu, że są one przesyłane w potoku?Może powinieneś spróbować
logtop
?źródło
źródło
~/.my.cnf
działaniemysqladmin
bez pytania o hasło?