【问题标题】:Performance monitoring script in linuxlinux中的性能监控脚本
【发布时间】:2019-04-24 11:02:40
【问题描述】:

我正在尝试创建一个脚本,让我可以监控 CPU 利用率、内存利用率、I/O 利用率和网络利用率。目前,我有一个脚本应该在 linux 上运行必要的命令。希望最后,我能够每 15 分钟左右运行一次,然后使用特定信息来分析数据。下面是脚本:

#!/bin/sh
########################################################
OUTPUT="ServerPerf`date '+%d%m%y'`.out"
(
echo "=================================================="
echo " Script Starting Time : `date` "
echo "================================================="
echo " Disk I/O Status "
echo "================================================="
echo
iostat
echo
echo "================================================="

echo "##################################################"
echo " NETWORK TCP PARAMETERS STATUS "
echo "##################################################"
echo
echo
netstat -sp tcp
echo
echo " Processes List "
echo
ps -elf
echo
echo " END "
echo
echo "##################################################"
echo "##################################################"
echo " NETWORK CONNECTION PARAMETER "
echo "##################################################"
echo
echo
netstat -an
echo
echo
echo "##################################################"
echo " NETWORK TRAFFIC STATUS ON INTERFACES "
echo "##################################################"
echo
echo
netstat -i
echo
echo
echo "##################################################"
echo " SERVER MEMORY/CPU Utilization Report "
echo "##################################################"
echo
top -d1 -n 5
echo "=================================================="
echo " VMSTAT INFO "
echo "=================================================="
echo
vmstat 5 5
echo
echo "=================================================="
echo " Script Ending Time : `date` "
echo
echo "=================================================="
) >> $OUTPUT

现在,我想从这些创建的文件中获取有用的数据。数据可以分为几类:

  1. 平均负载
  2. CPU 空闲百分比
  3. 内核利用率
  4. 内存利用率
  5. 交换活动

我正在尝试使用这些命令来生成这 5 个文件,但似乎遇到了困难。

grep "load avg" /home/test/logs/ServerPerf180610.out | awk '{ print $6 }' | awk -F, '{ print $1 }' > load_avg.txt
grep "CPU states" /home/test/logs/ServerPerf180610.out | awk '{ print $3 }' | awk -F% '{ print $1 }' > cpu_idle.txt
grep "CPU states" /home/test/logs/ServerPerf180610.out | awk '{ print $7 }' | awk -F% '{ print $1 }' > cpu_kernel.txt
grep "Memory" /home/test/logs/ServerPerf180610.out | awk '{ print $5 }' | awk -FG '{ print $1 }' > memory_util.txt
grep "Memory" /home/test/logs/ServerPerf180610.out | awk '{ print $11 }' | awk -FG '{ print $1 }' > swap_util.txt

当这些命令运行时,输出文件只是空的。有谁知道为什么我无法生成这些文件?

非常感谢您的帮助。

谢谢你, 亚伦

UDPATE:这是输出文件的副本: http://www.queencitytech.com/ServerPerfRepo180610.out

【问题讨论】:

  • 我无法确定,因为我有不同的版本。但是您是否尝试过仅删除 awk 部分以进行故障排除?也就是说,使用“grep... > load_avg.txt”而不是中间的两个awk命令?
  • 此脚本中使用了 top 命令。我试过删除 awk 但也不想输出任何东西
  • /home/test/logs/ServerPerf... 文件中有什么内容吗?
  • 我无法解决手头的问题,但是您知道 Cacti 吗? cacti.net(可能不是您需要的,但已删除名称。)
  • 命令完成了吗? top 命令本身至少需要 5 秒。

标签: linux performance scripting


【解决方案1】:

也许这是一个错字,但是您正在搜索的文件和您正在创建的文件是不同的。

也就是说,OUTPUT=... 行表示 DAY-MONTH-YEAR,但 grep 行表示 MONTH-DAY-YEAR

编辑:好的,您发布了输出文件。那里有各种特殊字符,来自top 命令。您可以将批处理 (top -d1 -n1 -b) arg 添加到 top 以隐藏它吗?

另一个编辑:您的 grep 命令似乎是特定于大小写的。这是故意的吗?结果与您的几个 grep 过滤器不匹配。尝试在命令中添加忽略大小写 (grep -i)。此外,您正在搜索“load avg”,但输出显示“load average”,因此您永远不会找到它。

【讨论】:

  • 实际上,我很抱歉这是我的错字。当我运行命令时,它与文件相同。
  • 这是有道理的。当我添加忽略大小写和正确的“平均负载”搜索时,我在文件中得到的所有内容都是“天”,下面有 4 个零?
  • 您是否也将批处理选项添加到顶部?我认为 top 正在生成屏幕控制代码来突出显示、闪烁、主页等,这可能会弄乱你的输出。
  • 另外,没有“内存”数据。有一些称为 Memory 的部分,但如果只返回那些行,则不会得到任何数据。此外,没有称为“CPU 状态”的行。你从哪里弄来的过滤器?它们只是不存在于数据中。
  • 我不太确定批处理选项。我实际上在博客上找到了这个,并且一直在努力让它工作一段时间。这是页面(第 2 部分)kumudunix.blogspot.com/2010/01/… 它最初是为 Solaris 编写的,我修改了一些命令,以便它们可以在 linux 上运行。我想可能是通过更改它们我破坏了脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2023-01-10
  • 2012-08-20
  • 2020-04-16
  • 2021-06-13
  • 2019-12-16
相关资源
最近更新 更多