【问题标题】:Shell script for logging cpu and memory usage of a linux process用于记录 linux 进程的 cpu 和内存使用情况的 shell 脚本
【发布时间】:2013-05-01 05:06:24
【问题描述】:

我正在寻找一种方法来记录并以图形方式显示 Linux 进程随时间的 CPU 和 RAM 使用情况。由于我找不到一个简单的工具(我尝试了 zabbix 和 munin,但安装失败)我开始编写一个 shell 脚本来这样做

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

  1. 通过ps命令找出进程的pid
  2. 使用 top 和 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)
  2. 打印资源详细信息时打印当前时间戳(通过日期+“%T”)
  3. 打印进程名称以及资源使用情况。上述案例中的 Redis、Logstash、ElasticSearch 或 Kibana
  4. 将上述命令输出重定向到日志文件。我试过 > $LOG_FILE 但没有用。

想法/输入?

提前致谢。

【问题讨论】:

    标签: linux bash shell awk


    【解决方案1】:

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

    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
    

    【讨论】:

    • 这更像是一个旁注,而不是问题的答案。
    • 有帮助但不是答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2010-12-01
    相关资源
    最近更新 更多