我正在寻找一种记录和图形化显示Linux进程的CPU和RAM使用情况的方法。由于我找不到一个简单的工具来实现这个目标(我尝试过Zabbix和Munin,但安装失败了),所以我开始编写一个Shell脚本来完成这个任务。
该脚本文件通过awk解析top命令的输出,并将其记录到CSV文件中。它:
该脚本文件通过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)的使用情况。
- 在打印资源详细信息时打印当前时间戳(通过date +"%T"实现)
- 在资源使用情况旁边打印进程名称。在上面的示例中为Redis、Logstash、ElasticSearch或Kibana。
- 将上述命令输出重定向到日志文件。我尝试了> $LOG_FILE,但它没有起作用。
有什么想法/输入吗?
提前致谢。