2013-05-07 11 views
5

Szukam sposobu na logowanie i graficzne wyświetlanie wykorzystania procesora i procesora w procesorze Linux w czasie. Ponieważ nie mogłem znaleźć prostego narzędzia (próbowałem zabbix i munin, ale instalacja się nie powiodła) zacząłem pisać skrypt powłoki, aby to zrobićSkrypt powłoki do rejestrowania wykorzystania procesora i procesora linuxowego

Plik skryptowy analizuje dane wyjściowe polecenia top przez awk i loguje do pliku csv plik. To

  1. domyśla się PID procesów poprzez komendę ps
  2. Używa top i awk zalogować procesora i pamięci.

Oto jak skrypt wygląda

#!/bin/sh 
#A script to log the cpu and memory usage of linux processes namely - redis, logstash, elasticsearch and kibana 

REDIS_PID=$(ps -ef | grep redis | grep -v grep | awk '{print $2}') 

LOGSTASH_PID=$(ps -ef | grep logstash | grep -v grep | awk '{print $2}') 

ELASTICSEARCH_PID=$(ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}') 

KIBANA_PID=$(ps -ef | grep kibana | grep -v grep | awk '{print $2}') 

LOG_FILE=/var/log/user/usage.log 
echo $LOG_FILE 
top -b | awk -v redis="$REDIS_PID" -v logstash="$LOGSTASH_PID" '/redis|logstash/ {print $1","$9","$10","$12}' 

Jak

  1. Drukuj wykorzystanie zasobów dla wielu procesów. Określenie wielu zmiennych we wzorze awk nie działa. Drukuje wykorzystanie dla pierwsze PID (Redis w powyższym skrypcie)
  2. Drukuj aktualny timestamp podczas drukowania szczegółów zasobu (poprzez dacie + „% T”)
  3. Drukuj nazwę procesu wraz z wykorzystania zasobów. Redis, Logstash, ElasticSearch lub Kibana w powyższym przypadku
  4. Przekieruj powyższe polecenia do pliku dziennika. Próbowałem> $ LOG_FILE, ale to nie zadziałało.

Myśli/nakłady?

Z góry dziękuję.

Odpowiedz

5

Aby dowiedzieć PID można uprościć skrypt znacznie użyciu pgrep:

REDIS_PID=$(pgrep -f redis) 

LOGSTASH_PID=$(pgrep -f logstash) 

ELASTICSEARCH_PID=$(pgrep -f elasticsearch) 

KIBANA_PID=$(pgrep -f kibana) 

EDIT: Niestety musiał opuścić na jakiś pracy i nie może zapewnić pełną odpowiedź.

W celu uchwycenia wykorzystanie wyjścia blatu poniższy skrypt:

while :; do 
    top -n 1 -b | awk -v redis="$REDIS_PID" -v logstash="$LOGSTASH_PID" 
     '$1 == redis || $1 == logstash {print $1","$9","$10","$12}' >> $LOG_FILE 
    sleep 3 
done 
+0

To jest bardziej marginesie niż odpowiedź na pytanie. –

+0

pomocna, ale nie odpowiedź :) –

Powiązane problemy