我正在寻找一种方法来记录和图形显示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但它没有用.
思考/投入?
提前致谢.
要找出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