用于记录cpu的shell脚本和linux进程的内存使用情况

时间:2013-05-07 09:35:35

标签: linux bash shell awk

我正在寻找一种方法来记录和图形显示linux进程的cpu和RAM使用情况。因为我找不到一个简单的工具(我试过zabbix和munin但是安装失败了)我开始写一个shell脚本来这样做

脚本文件通过awk解析top命令的输出并登录到csv文件。它

  1. 通过ps命令
  2. 计算出进程的pid
  3. 使用top和awk来记录cpu和内存使用情况。
  4. 以下是脚本的外观

    #!/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)
    2. 打印资源详细信息时打印当前时间戳(通过日期+“%T”)
    3. 打印进程名称以及资源使用情况。在上述情况下,Redis,Logstash,ElasticSearch或Kibana
    4. 将上述命令输出重定向到日志文件。我试过> $ LOG_FILE但它不起作用。
    5. 思想/输入?

      提前致谢。

1 个答案:

答案 0 :(得分:6)

要找出PID,您可以使用pgrep大大简化脚本:

REDIS_PID=$(pgrep -f redis)

LOGSTASH_PID=$(pgrep -f logstash)

ELASTICSEARCH_PID=$(pgrep -f elasticsearch)

KIBANA_PID=$(pgrep -f kibana)

编辑:抱歉不得不离开工作,无法提供完整的答案。

为了捕获top的输出,请使用以下脚本:

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