2013-05-07 299 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

相关问题