2013-05-07 24 views
5

LinuxプロセスのCPU使用量とRAM使用状況をログに記録し、グラフィック表示する方法を探しています。私はzabbixとmuninを試してみましたが、インストールに失敗しました。シェルスクリプトを作成し始めました。LinuxプロセスのCPU使用量とメモリ使用量を記録するためのシェルスクリプト

スクリプトファイルは、awkを通じてtopコマンドの出力を解析し、csvにログインしますファイル。またpsコマンドによるプロセスのpidのうち

  1. がトップ使用し、awkは、CPUとメモリの使用状況をログに記録します。ここで

スクリプトが

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

どのように

  1. は、複数のプロセスのリソース使用状況を表示しないように見える方法です。 awkパターンに複数の 変数を指定しても機能しません。これは、(上記のスクリプトでRedisの)
  2. プリント現在のタイムスタンプリソースの詳細を印刷する(日付+から「%T」)
  3. は、リソースの使用に伴うプロセス名を印刷 第一のPIDの使用を印刷します。 Redis、Logstash、ElasticSearchまたはKibanaの場合
  4. 上記のコマンド出力をログファイルにリダイレクトします。私は$ LOG_FILEを試しましたが、うまくいきませんでした。

思考/入力?

ありがとうございます。

REDIS_PID=$(pgrep -f redis) 

LOGSTASH_PID=$(pgrep -f logstash) 

ELASTICSEARCH_PID=$(pgrep -f elasticsearch) 

KIBANA_PID=$(pgrep -f kibana) 

はEDIT:申し訳ありませんが、いくつかの作業のために残していたとの完全な答えを提供することができなかったあなたが大幅にpgrepコマンドを使用してスクリプトを簡素化することができますPIDを把握する

答えて

5

。スクリプト次のトップの出力の使用をキャプチャするために

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

これは、質問への答えよりもサイドノートの詳細です。 –

+0

有用ですが、回答ではありません:) –

関連する問題