Linux任务分析脚本
首先我们日常运维中,服务器会跑大量的任务。
(1)我们可以通prometheus和grafana 展示整个服务器的cpu 内存 和磁盘IO的趋势
(2)可以每台部署相应的脚本,可以定位到每个时间段执行的业务,所消耗的各项资源
统计前十的CUP消耗应用(降序 )
ps aux|head -1 && ps aux|grep -v PID|sort -rn -k +3|head
统计前十的内存消耗应用(降序 )
ps aux|head -1 && ps aux|grep -v PID|sort -rn -k +4|head
统计前十的磁盘IO消耗应用(降序 )
/usr/sbin/iotop -btoq --iter=1 |awk 'NR>3{print}'|sort -rn -k 11
切记需要安装iotop
统计网络状态标识(状态)
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
统计网络状态标识(IP)
netstat -n | awk '/^tcp/ {print $0}' | awk '{print $(NF-1),$NF}' | awk -F ':| ' '{print $1,$NF}' |awk 'BEGIN{print "IP\t\t状态\t次数统计"} {a[$1" "$2]++}END{for(i in a) print(i,a[i])}' |sort -nk 3
相关脚本
#!/bin/bash
#时间
time=$(date "+%Y-%m-%d %H:%M:%S")
day=$(date "+%Y-%m-%d")
#首生成日志目录
mkdir -p /system/log/{cpu,mem,io,net}
cpudir='/system/log/cpu'
memdir='/system/log/mem'
iodir='/system/log/io'
netdir='/system/log/net'
#统计前10的cpu
echo "=========================================${time}======================================================" >> ${cpudir}/${day}.log
ps aux|head -1 >> ${cpudir}/${day}.log
ps aux|grep -v PID|sort -rn -k +3|head >> ${cpudir}/${day}.log
#统计前10的内存
echo "=========================================${time}======================================================" >> ${memdir}/${day}.log
ps aux|head -1 >> ${memdir}/${day}.log
ps aux|grep -v PID|sort -rn -k +4|head >> ${memdir}/${day}.log
#统计前10的磁盘io
echo "=========================================${time}======================================================" >> ${iodir}/${day}.log
/usr/sbin/iotop -btoq --iter=1 |head -n 3 >> ${iodir}/${day}.log
/usr/sbin/iotop -btoq --iter=1 |awk 'NR>3{print}'|sort -rn -k 11 >> ${iodir}/${day}.log
#统计机器的网络状态(ip,状态)
echo "=========================================${time}======================================================" >> ${netdir}/${day}.log
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}' >> ${netdir}/${day}.log
echo -n " " >> ${netdir}/${day}.log
netstat -n | awk '/^tcp/ {print $0}' | awk '{print $(NF-1),$NF}' | awk -F ':| ' '{print $1,$NF}' |awk 'BEGIN{print "IP\t\t状态\t次数统计"} {a[$1" "$2]++}END{for(i in a) print(i,a[i])}' |sort -nk 3 >> ${netdir}/${day}.log
#删除老化的文件(保留7天)
find /system/log/ -type f -mtime +7 -exec rm -f {} \;
设置定时任务
#拷贝文件
ansible hadoop -i ./hadoopip -m copy -a "src=/system/check_system.sh dest=/system/check_system.sh " -f 20
#给权限
ansible hadoop -i ./hadoopip -m shell -a "chmod a+x /system/check_system.sh " -f 20
#安装依赖
ansible hadoop -i ./hadoopip -m shell -a "yum install -y iotop " -f 20
#设置定时任务
ansible hadoop -i ./hadoopip -m cron -a "minute=*/5 job='sh /system/check_system.sh' name=check_system disabled=no" -f 20
运行结果
日志格式
人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。