2013-05-07 296 views
5

我正在尋找一種記錄和圖形化顯示linux進程的cpu和RAM使用情況的方法。因爲我找不到一個簡單的工具(我試過zabbix和munin但安裝失敗),我開始編寫一個shell腳本來執行此操作用於記錄linux進程的cpu和內存使用情況的shell腳本

腳本文件通過awk解析top命令的輸出並將其記錄到csv中文件。它

  1. 圖中的處理過程的PID通過ps命令
  2. 用途頂部和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模式中指定多個 變量不起作用。它輸出 使用第一PID(在上面的腳本redis的)印刷與資源使用沿着資源的詳細信息(通過日期+「%T」)
  2. 打印進程名稱時
  3. 打印當前時間戳。 Redis,Logstash,ElasticSearch或Kibana在上述情況下
  4. 將上述命令輸出重定向到日誌文件。我試過> $ LOG_FILE,但沒有奏效。

想法/輸入?

在此先感謝。

回答

5

要弄清楚的PID可以大大簡化你的腳本中使用p纖ep:

REDIS_PID=$(pgrep -f redis) 

LOGSTASH_PID=$(pgrep -f logstash) 

ELASTICSEARCH_PID=$(pgrep -f elasticsearch) 

KIBANA_PID=$(pgrep -f kibana) 

編輯:對不起不得不離開一些工作,不能提供完整的答案。

爲了捕捉頂部的輸出使用下面的腳本:

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

這是不是一個問題的答案多一個側面說明的。 – 2013-05-07 10:04:08

+0

有幫助,但不是答案:) – 2013-05-07 11:31:00

相關問題