gpt4 book ai didi

linux - 用于记录 Linux 进程的 CPU 和内存使用情况的 Shell 脚本

转载 作者:IT王子 更新时间:2023-10-29 01:19:35 25 4
gpt4 key购买 nike

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

想法/意见?

提前致谢。

最佳答案

要找出 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

关于linux - 用于记录 Linux 进程的 CPU 和内存使用情况的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com