运维监控shell脚本

记录下我使用chatGPT写shell脚本的经过,一共生成了三个版本,每个版本都比前一个更精确,主要控制点在于对想要产物的描述精确度,只有越准确的描述,AI才能更好地生产。

第一版

运维监控脚本,分成三部分,分别显示所有pid的相关cpu使用情况、内存使用情况、磁盘使用情况。

这一版只有基本功能,输出也不好看。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

# CPU usage
echo "CPU usage:"
ps aux | awk '{print $2, $3, $11}' | sort -k2rn | column -t

# Memory usage
echo "Memory usage:"
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | column -t

# Disk usage
echo "Disk usage:"
df -h | awk '{print $1, $5}' | column -t

image-20230214234908612

第二版

在此基础上,增加shell脚本输出美化,不显示cpu使用率为0,内存占用为0的进程。

这一次,让AI加一些美化,并且提出新的需求让其完成,可以看到,给出的结果工整了很多,而且完成了新提出的需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# Define colors
GREEN="\e[32m"
YELLOW="\e[33m"
BLUE="\e[34m"
RED="\e[31m"
RESET="\e[0m"

# CPU usage
echo -e "${GREEN}CPU usage:${RESET}"
ps aux | awk '{if($3!=0) print $2, $3, $11}' | sort -k2rn | awk '{printf "%-10s %-10s %s\n", $1, $2, $3}'

# Memory usage
echo -e "\n${YELLOW}Memory usage:${RESET}"
ps aux | awk '{if($4!=0) print $2, $4, $11}' | sort -k2rn | awk '{printf "%-10s %-10s %s\n", $1, $2, $3}'

# Disk usage
echo -e "\n${BLUE}Disk usage:${RESET}"
df -h | awk '{printf "%-10s %s\n", $1, $5}'

image-20230214234718760

第三版

输入pid,获取对应进程的cpu使用情况、内存使用情况、磁盘使用情况。

这一次与前面的功能又不一样,加入了用户输入的环节,值得一提的是,只要在同一个对话中,AI是可以判断出所使用的相关环境,例如这里AI能判断出我们需要的是shell脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash

# Get options and arguments
while getopts "p:" opt; do
case $opt in
p)
pid=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done

# Check for required arguments
if [[ -z $pid ]]; then
echo "Please provide a valid process ID using the -p option." >&2
exit 1
fi

# CPU usage
echo -e "\nCPU usage:"
ps -p $pid -o pid,%cpu,cmd | grep --color=always $pid | column -t

# Memory usage
echo -e "\nMemory usage:"
ps -p $pid -o pid,%mem,cmd | grep --color=always $pid | column -t

# Disk usage
echo -e "\nDisk usage:"
lsof -p $pid | awk '{if($4 == "REG" || $4 == "DIR") sum += $7}; END {print sum/1024 " KB"}' | grep --color=always ".*" | column -t

image-20230214235003972

总结

  1. 在对AI描述需求时,尽量准且,用书面语。
  2. 多用并且、同时等词语表示都需要的关系
  3. 在对前面生成不满意时,可以提出进一步需求,就像甲方迫害乙方那样,例如让输出更美观一些,