《数据采样+自动入库实验报告》

一、实验目的

1、学习通过shell脚本定期采集 cpu、mem、disk 信息 ,并记录数据到.txt文件中;
2、学习定时导入上一小时产生的数据记录文件到数据库

二、实验环境

阿里云服务器

三、实验要求

1、创建的shell脚本可以采集数据包括 cpu 、mem 、 disk 使用率
2、采样文件每小时生成一个,采集的数据都放在这个文件下
3、数据记录文件的文件名可随当前时间动态生成,命名规则为YYYY_MM_DD_HH.txt,以时间格式命名
4、数据采样的脚本每分钟定时执行
5、编写自动入库的脚本,并设定每小时定时执行,用来向数据库导入上一个小时的采样记录

四、实验步骤
一、数据采集

假设当前执行时间为2020-07-04 21:00:01
:数据采集文件格式:YYYY_MM_DD_HH.txt(从当前时间来看为2020_07_04_21.txt)
1、编写采集数据包括cpu ,mem , disk 使用率的脚本
2、数据的文件可随当前时间动态生成,命名规则为2020_07_04_21.txt,以时间格式命名
3、echo >> 命令,将采集到的cpu、mem、disk数据添加到数据记录2020_07_04_21.txt文件末尾

数据采样脚本如下
#!/bin/bash
now=`date -u -d"+8 hour" +'%Y-%m-%d %H:%M:%S'`
#cpu使用阈值
cpu_warn='75'
#mem空闲阈值
mem_warn='100'
#disk使用阈值
disk_warn='90'
#---cpu
TIME_INTERVAL=5
item_cpu () {
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d "."`
cpu_use=`expr 100 - $cpu_idle`
if [[ $cpu_use -gt $cpu_warn ]]
    then
        echo "cpu warning!!!"
    else
        echo "cpu ok!!!"
fi
}
# --mem
item_mem () {
mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'`
if [ $mem_free -lt $mem_warn  ]
    then
        echo "mem warning!!!"
    else
        echo "mem ok!!!"
fi
}
#---disk
item_disk () {
disk_use=`df -P | grep /dev | grep -v -E '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"`
if [ $disk_use -gt $disk_warn ]
    then
 echo "disk warning!!!"
    else
        echo "disk ok!!!"
fi
}
item_cpu
item_mem
item_disk
echo "$now,$cpu_use,$mem_free,$disk_use">> /root/script/$(date +%Y_%m_%d_%H).txt
配置定时任务

4、crontab命令定时每分钟执行一次该脚本

* * * * * /root/script/cpu_mem_disk.sh  
二、导入数据到库

同样假设当前执行时间为2020-07-04 21:00:01
:被导入库的文件格式为YYYY_MM_DD_HH.txt(从当前时间看为2020_07_04_20.txt)
1、原有采样脚本代码都不进行修改 ,一个小时采样60 次,一个小时生成一个新文件,
2、增加自动入库的脚本,做成脚本配置成定时执行,入库脚本一个小时执行一次, 将上一个小时的采样记录导入数据库中
3、计算出当前的文件名 $file_name = 2020_07_04_20.txt ,也就是上一个小时的采样文件
4、记录日志,记录当前加载的数据文件名(2020_07_04_20.txt)
5、通过load data语句将/root/script/2020_07_04_20.txt文件导入数据表
6、echo load_data.sh execute load data successful!

创建数据表脚本如下

表结构说明:数据表分为4列:第一列记录导入数据时间,第二列记录cpu的使用率,第三列记录mem的使用率,第四列记录disk的使用率;

MariaDB [cpu_mem_disk]> create table disk ( 
		     ->mdate datetime, 
       		 ->cpu tinyint not null,
       		 ->mem int not null, 
             ->disk tinyint not null
             ->)CHARSET=utf8;
自动入库脚本如下
#!/bin/bash
. /etc/profile
. ~/.bash_profile
file_one=$(date -d '-1 hour' +%Y_%m_%d_%H)
echo $file_one.txt
mysql -h 127.0.0.1 -P3306 -uroot -pljh cpu_mem_disk -e "LOAD DATA LOCAL INFILE '/root/script/$file_one.txt' INTO TABLE mem FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (mdate,cpu,mem,disk)";
currTime=$(date +"%Y-%m-%d %H:%M:%S")
echo $currTime
echo load_data.sh execute load data  successful!
配置定时任务
0 */1 * * * /root/test/load_data.sh >> /root/test/log_load_data  # log_load_data作为日志文件用来记录每小时运行的输出结果
五、结果验证
数据采集实验结果

1、通过ll命令验证查看script目录下是否产生了格式为YYYY_MM_DD_HH.txt的文件
2、如图可见,输入ll命令后可以看到目录中18点产生了一个文件2020_06_02_18.txt,19点也产生了一个文件2020_06_02_19.txt,以此看出,每小时确实可以产生一个数据记录文件,
在这里插入图片描述
3、如图可见,用cat命令随意查看某个文件,比如2020_06_02_20.txt
4、这时就可以看到60条记录,产生记录时间间隔为一分钟
在这里插入图片描述
5、结论
说明了伪码步骤正确,脚本正确,代码运行正常

自动入库实验结果

1、新建一个脚本文件load_data.sh,在文件中编写代码,保存并退出编辑页面,通过./执行脚本
在这里插入图片描述
2、执行脚本之后就出现了三行信息,可以从信息中看到第一行:当前执行脚本文件时间为2020.6.29 21:33:13,第二行:当前导入的文件名为2020_06_29_20.txt,第三行:说明脚本导入数据成功!
3、打开日志文件查看每小时脚本的运行记录,可以看到脚本每小时运行一次
在这里插入图片描述
4、然后点开数据库查看是否导入成功,通过select * from 命令查看数据表,可以看到数据表中每小时都有导入60条记录数据
在这里插入图片描述
5、再通过select cound(*) from命令查看一共有多少条记录,可以看到有7020条记录,就是有117个小时的记录
在这里插入图片描述
6、这个时候可以结合记录脚本执行结果的日志文件查看推算一下自动入库的脚本是否运算成功。由于测试所以数据表中仍含6.29号21点的两次数据导入文件也就是2个小时的记录,从日志文件可以看出正式的导入是2020_06_29_22.txt开始,然后从第5步知晓了一共有117个小时的记录,所以就是2+3+24+24+24+24+16(最后一个导入文件)=117
在这里插入图片描述
在这里插入图片描述

7、假如要查看某一时间段的数据是否导入正常,可以通过select * from mem where mdate between ‘开始时间’ and ‘结束时间’;的命令查看2020-07-03 15:58:00到2020-07-03 17:00:01的数据导入情况,可以看到一共导入了63条记录
在这里插入图片描述
8、结论
自动入库的伪码正确,脚本代码正确,执行无误

六、实验总结
学习的知识点

1、询问问题的时候要将问题用1、2、3、4序号列出来,并且将你写出来的问题读几遍,看看是否自己可以看得懂,以便对方明白问题所在,
2、领导给出相应的解决办法时不要忙着去做,先编写出问题对应的解决伪码,领导可以通过你的伪码看出你是否真的看懂了这个办法,没问题之后再根据伪码去编写脚本程序去修改问题,这样问题会轻松解决
3、切记脚本要严格按照伪码执行,脚本和伪码不能出现偏差。
4、收到领导的任务时要先将任务以自己的理解复述一遍,写出自己理解的伪码,这样领导可以一眼看出问题所在,明白你是否真的理解了任务,确保尽快完成任务。

不足的地方

1、遇到自己解决不了的问题时,就需要请教别人,但是往往问题描述不够清楚,让领导无法理解自己的问题,无法做出正确的解答,无法实现高效沟通,沟通能力还需要进一步加强;
2、领导讲的事情或东西,尤其微信聊天记录一定要仔细阅读;
3、编写脚本的时候没有严格按照自己写出来的伪码执行,这个问题一定要改正;
4、学习还是不太主动,需要继续努力!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值