加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用于记录cpu的shell脚本和linux进程的内存使用情况

发布时间:2020-12-15 21:47:07 所属栏目:安全 来源:网络整理
导读:我正在寻找一种方法来记录和图形显示 linux进程的CPU和RAM使用情况.因为我找不到一个简单的工具(我试过zabbix和munin但是安装失败了)我开始写一个shell脚本来这样做 脚本文件通过awk解析top命令的输出并登录到csv文件.它 通过ps命令计算出进程的pid 使用top
我正在寻找一种方法来记录和图形显示 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","$12}' >> $LOG_FILE
  sleep 3
done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读