首先我们日常运维中,服务器会跑大量的任务。
(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 -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
连接状态_学习笔记-TCP连接状态解析_六十度灰的博客-CSDN博客前面两篇详细的给大家介绍过了TCP的三次握手和四次挥手流程(详见学习笔记-TCP三次握手, 学习笔记-TCP四次挥手 ),本文主要是介绍在TCP连接过程中的各种状态变化。状态介绍CLOSED:表示初始状态。LISTEN:表示服务器端的某个SOCKET处于,可以接受连接了。SYN_RCVD:这个状态表示接受到了SYN,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的会话过程中的一个...https://blog.csdn.net/weixin_31304599/article/details/112671431?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=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
#统计机器的网络状态
echo "=========================================${time}======================================================" >> ${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
?运行结果
日志格式?
|