2013-05-07 14 views
5

Sto cercando un modo per registrare e visualizzare graficamente l'utilizzo della CPU e della RAM dei processi di Linux nel tempo. Poiché non sono riuscito a trovare uno strumento semplice (ho provato zabbix e munin ma l'installazione non è riuscita) ho iniziato a scrivere uno script di shell per farloScript di shell per la registrazione di cpu e l'utilizzo della memoria di un processo linux

Il file di script analizza l'output del comando top tramite awk e registra in un csv file. Si

  1. figure il PID dei processi attraverso comando ps
  2. Usi superiore e awk per accedere CPU e della memoria.

Ecco come lo script sembra

#!/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}' 

Come faccio

  1. Stampa l'utilizzo delle risorse per più processi. La specifica di più variabili nel modello awk non funziona. Esso stampa l'utilizzo per i primi PID (Redis Nello script precedente)
  2. Stampa timestamp corrente durante la stampa i dettagli delle risorse (attraverso date + "% T")
  3. Stampa il nome del processo con l'utilizzo delle risorse. Redis, Logstash, ElasticSearch o Kibana nel caso precedente
  4. Reindirizzare i comandi sopra riportati in un file di registro. Ho provato> $ LOG_FILE ma non ha funzionato.

Pensieri/Input?

Grazie in anticipo.

risposta

5

Per capire PID è possibile semplificare notevolmente lo script utilizzando pgrep:

REDIS_PID=$(pgrep -f redis) 

LOGSTASH_PID=$(pgrep -f logstash) 

ELASTICSEARCH_PID=$(pgrep -f elasticsearch) 

KIBANA_PID=$(pgrep -f kibana) 

EDIT: dispiace dovuto lasciare per un po 'di lavoro e non poteva fornire la risposta completa.

Al fine di catturare l'uso dell'output di top seguente script:

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

Questo è più di un lato nota che una risposta alla domanda. –

+0

utile ma non una risposta :) –

Problemi correlati