一、前言

大家或多或少听说过飞机上的黑盒子。它的主要作用是记录飞机的各种状态,包括飞机的各种参数的设定和飞行的各种动态数据等。

对于Linux系统工程师来说,记录系统的各种参数以及运行状态同样重要。记录的数据,可用于日常的故障分析和实验测试。下面我们一起来写一个“黑盒子”小程序。

如何编写一个Linux监控“黑盒子”程序_linux系统

二、阶段一:安装工具并创建日志目录

第一阶段,我们在待监控的Linux系统上安装常见的监控工具。例如sysstat等。并指定日志存放目录。下面以Ubunut操作系统为例说明:

#日志存放目录
LOG_DIR="/var/log/blackbox"
[ -d ${LOG_DIR} ] || mkdir -p ${LOG_DIR}
#安装常见的监控工具
if [ $(which iostat free df mpstat ifconfig ps | wc -l) -ne 6 ]; then
[ -f /etc/apt/sources.list.ori ] || cp /etc/apt/sources.list /etc/apt/sources.list.ori
apt update
apt install sysstat -y
fi

参考链接:SYSSTAT官方网站(大家可以自行寻找)

如何编写一个Linux监控“黑盒子”程序_linux系统_02

三、阶段二:设置监控策略

第二阶段,我们设置监控频率。例如每10分钟记录一次系统的状态,包括磁盘状态、内存状态、磁盘使用率、CPU状态、进程和网络状态。下面以Ubunut操作系统为例说明:

domyjob(){
#监控日志打印间隔,单位秒
LOG_INTERVAL="600"
today=`date +%Y%m%d`
#磁盘
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_iostat_${today}.txt
iostat -x 3 3 >> ${LOG_DIR}/log_iostat_${today}.txt
sleep 3
#内存
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_free_${today}.txt
free -h >> ${LOG_DIR}/log_free_${today}.txt
sleep 3
#磁盘使用率
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_df_${today}.txt
df -h >> ${LOG_DIR}/log_df_${today}.txt
sleep 3
#CPU
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_cpu_${today}.txt
mpstat -P ALL 5 2 >> ${LOG_DIR}/log_cpu_${today}.txt
sleep 3
#进程
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_ps_${today}.txt
ps aux >> ${LOG_DIR}/log_ps_${today}.txt
sleep 3
#网络
becho "`date +%Y%m%d-%H:%M:%S`" >> ${LOG_DIR}/log_ifconfig_${today}.txt
ifconfig -a -v >> ${LOG_DIR}/log_ifconfig_${today}.txt
sleep 3
}
while [ 1 ]; do
domyjob
sleep ${LOG_INTERVAL}
done


四、阶段三:实施监控

我们把上述代码放进一个SHELL脚本中sys_status.sh,执行并看看效果。

如何编写一个Linux监控“黑盒子”程序_linux系统_03

#开启监控:
nohup bash sys_status.sh &
#关闭监控
ps -ef | grep -vw grep | grep sys_status.sh | awk '{print $2}' | xargs -I % kill %

如何编写一个Linux监控“黑盒子”程序_linux系统_04

经过上面几个简单的步骤,一个Linux监控“黑盒子”程序就编写完成了。如果大家有疑问或者新的想法,欢迎联系我沟通交流。