每日监控日志生成功能实现
一、目的
为了实现全自动化数据采集到大数据平台上,需要生成每天的监控日志方便运维人员进行查看。
二、课题
? 每日监控日志文件生成
三、过程与方法
[任务一]
任务说明:编写shell脚本,实现每日自动生成监控日志
实现效果:
1)执行自动化采集数据的脚本,会生成以下数据【每次执行日期会进行更新】
2021-09-24 20:56:16 INFO >> json文件的日期由20200901替换成20200902成功!
2021-09-24 20:56:56 INFO >> 数据从mysql采集到hive成功!采集成功的数据有62条
日志文件内容截图
四、仪器设备和工具
设备仪器 | 机房 |
---|
操作系统 | Windows操作系统 | 工具 | 连接工具:sqlyog、navicat | 网络环境 | 能够联网 |
五、思考题
1)$?在linux中有什么作用,除了这个符号还有哪些特殊符号?
0
:
就
是
该
b
a
s
h
文
件
名
,
个
位
数
的
,
可
直
接
使
用
数
字
,
但
两
位
数
以
上
,
则
必
须
使
用
符
号
来
括
住
,
如
0:就是该bash文件名,个位数的,可直接使用数字,但两位数以上,则必须使用 {} 符号来括住,如
0:就是该bash文件名,个位数的,可直接使用数字,但两位数以上,则必须使用符号来括住,如{10}.
$?:是上一指令的返回值,成功是0,不成功是1。一般来说,UNIX(linux) 系统的进程以执行系统调用exit() 来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。一般指令程序倘若执行成功,其回传值为 0;失败为 1。
$*:所有脚本参数的内容:就是调用调用本bash shell的参数。
@
:
基
本
上
与
上
面
相
同
。
只
不
过
是
“
@:基本上与上面相同。只不过是“
@:基本上与上面相同。只不过是“*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。
$#:返回所有脚本参数的个数。
$$ :Shell本身的PID(ProcessID),即当前进程的PID。
$! :Shell最后运行的后台Process的PID
$- :使用Set命令设定的Flag一览
六、实现过程
开启hadoop1,hadoop2,hadoop3
连接hadoop1的数据库
导入三张表
开启集群
进入hive创建test表,创建四张表
create database test;
use test;
create table `order_status_log20200901`(`id` string,`order_id` string,`order_status` string,`operate_time` string) row format delimited fields terminated by ',';
create table `order_status_log20200902`(`id` string,`order_id` string,`order_status` string,`operate_time` string) row format delimited fields terminated by ',';
create table `order_status_log20200903`(`id` string,`order_id` string,`order_status` string,`operate_time` string) row format delimited fields terminated by ',';
create table `order_status_log20200904`(`id` string,`order_id` string,`order_status` string,`operate_time` string) row format delimited fields terminated by ',';
使用winscp将log.json文件上传到/root/datax/job目录下
log.json加权限
chmod +x log.json
接着修改log.json
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [
"id",
"order_id",
"order_status",
"operate_time"
],
"splitPk": "id",
"connection": [
{
"table": [
"order_status_log20200901"
],
"jdbcUrl": [
"jdbc:mysql://192.168.174.10:3306/test"
]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://192.168.174.11:8020",
"fileType": "text",
"path": "/user/hive/warehouse/test.db/order_status_log20200901",
"fileName": "order_status_log20200901",
"column": [
{
"name": "id",
"type": "STRING"
},
{
"name": "order_id",
"type": "STRING"
},
{
"name": "order_status",
"type": "STRING"
},
{
"name": "operate_time",
"type": "STRING"
}
],
"writeMode": "append",
"fieldDelimiter": ",",
"compress":"GZIP"
}
}
}
]
}
}
使用winscp将auto1.sh文件上传到/root/sh目录下
加权限
chmod +x auto2.sh
编写auto2.sh
#!/bin/bash
log_dir=/root/log
log_prefix=order_status
function write_log(){
log_format=`date '+%Y-%m-%d %H:%M:%S'`
echo "${log_format} $1 >> ${2}" >> ${log_dir}/${log_prefix}.`date '+%Y-%m-%d'`.log
[ $1 == "ERROR" ] && exit 1
}
date=`cat /root/sh/date`
afterday_timestamp=$[`date -d "${date}" +%s`+86400]
afterday=`date -d @${afterday_timestamp} +%Y%m%d`
sed -i "s/order_status_log${date}/order_status_log${afterday}/g" /root/datax/job/log.json
write_log INFO "log.json文件的日期由${date}成功替换成${afterday}!!!"
sed -i "s/${date}/${afterday}/g" /root/sh/date
python /root/datax/bin/datax.py /root/datax/job/log.json
if [ $? -eq 0 ];then
result=`hive -e "use test;select count(id) from order_status_log${afterday}"`
write_log INFO "数据从mysql中采集成功!!!采集的数据有${result}条"
else
write_log ERROR "数据采集失败!!!,请立即检查"
fi
在sh下创建date
touch date
在root目录下创建文件夹log存日志文件
mkdir /root/log
最后执行
sh auto2.sh
cat /root/log/order_status.2021-09-30.log
|