5

我正在寻找一种方法来记录并以图形方式显示随着时间的推移 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 但没有用。

想法/输入?

提前致谢。

4

1 回答 1

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
于 2013-05-07T09:42:41.837 回答