我正在寻找一种方法来记录并以图形方式显示随着时间的推移 Linux 进程的 cpu 和 RAM 使用情况。由于我找不到一个简单的工具(我尝试了 zabbix 和 munin 但安装失败)我开始编写一个 shell 脚本来这样做
脚本文件通过 awk 解析 top 命令的输出,并记录到 csv 文件中。它
- 通过 ps 命令找出进程的 pid
- 使用 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}'
我如何能
- 打印多个进程的资源使用情况。在 awk 模式中指定多个变量不起作用。它打印第一个 pid 的使用情况(上面脚本中的 redis)
- 打印资源详细信息时打印当前时间戳(通过日期+“%T”)
- 打印进程名称以及资源使用情况。上述情况下的 Redis、Logstash、ElasticSearch 或 Kibana
- 将上述命令输出重定向到日志文件。我试过 > $LOG_FILE 但没有用。
想法/输入?
提前致谢。