博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Shell写一个日志收集脚本
阅读量:6427 次
发布时间:2019-06-23

本文共 2427 字,大约阅读时间需要 8 分钟。

有时候想了想Flume框架的原理,其实也是对文件或者文件夹进行监控,那我自己也可以写一个脚本来简单的实现监控我们想监控的文件,然后对其进行上传。

1. 引入环境变量

#!/bin/bash#set java envexport JAVA_HOME=/home/fantj/jdk/export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH#set hadoop envexport HADOOP_HOME=/home/fantj/hadoop/export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

2. 声明路径变量

#日志文件存放的目录log_src_dir=/home/fantj/log/#待上传文件存放的目录log_toupload_dir=/home/fantj/toupload/#日志文件上传到hdfs的根路径hdfs_root_dir=/data/log/

3. 扫描文件

ls $log_src_dir | while read fileNamedo        if [[ "$fileName" == access.log ]]; then                date=`date +%Y_%m_%d_%H_%M_%S`                #将文件移动到待上传目录并重命名                #打印信息                echo "moving $log_src_dir$fileName to $log_toupload_dir"fantj_log_$fileName"$date"                mv $log_src_dir$fileName $log_toupload_dir"fantj_log_$fileName"$date                #将待上传的文件path写入一个列表文件willDoing                echo $log_toupload_dir"fantj_log_$fileName"$date >> $log_toupload_dir"willDoing."$date        fidone

把已经扫描到的日志文件重命名,然后mv到待上传目录,然后打印日志,并对mv成功的日志文件加上willDoing做未完成上传标记。

4. 开始上传

#找到列表文件willDoingls $log_toupload_dir | grep will |grep -v "_COPY_" | grep -v "_DONE_" | while read linedo        #打印信息        echo "toupload is in file:"$line        #将待上传文件列表willDoing改名为willDoing_COPY_        mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"        #读列表文件willDoing_COPY_的内容(一个一个的待上传文件名)  ,此处的line 就是列表中的一个待上传文件的path        cat $log_toupload_dir$line"_COPY_" |while read line        do                #打印信息                echo "puting...$line to hdfs path.....$hdfs_root_dir"                hadoop fs -put $line $hdfs_root_dir        done        mv $log_toupload_dir$line"_COPY_"  $log_toupload_dir$line"_DONE_"done

5. 测试

我在/home/fantj/log目录下放一个access.log文件,然后执行脚本。

[root@s166 fantj]# ./upload2hdfs.shenvs: hadoop_home: /home/fantj/hadoop/log_src_dir:/home/fantj/log/moving /home/fantj/log/access.log to /home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03toupload is in file:willDoing.2018_07_29_12_49_03puting.../home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03 to hdfs path...../data/log/
[root@s166 fantj]# hadoop fs -ls -R /data/drwxr-xr-x   - root supergroup          0 2018-07-29 00:49 /data/log-rw-r--r--   3 root supergroup      14340 2018-07-29 00:49 /data/log/fantj_log_access.log2018_07_29_12_49_03-rw-r--r--   3 root supergroup      14340 2018-07-28 13:53

转载地址:http://jpfga.baihongyu.com/

你可能感兴趣的文章
作用域
查看>>
Spring Boot:Consider defining a bean of type '*.*.*' in your configuration解决方案
查看>>
Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
查看>>
NavigationBar的简单设置
查看>>
JS数组
查看>>
Array 的五种迭代方法 -----every() /filter() /forEach() /map() /some()
查看>>
Spring MVC------->version4.3.6-------->知识点------>DispatchServlet和它对应的WebApplicationContext...
查看>>
字符串反转
查看>>
android笔试题二
查看>>
【Java基础】System的arraycopy方法拷贝数组
查看>>
数据库克隆
查看>>
探秘Tomcat——从一个简陋的Web服务器开始
查看>>
告别set和get,两大利器轻松搞定model转换
查看>>
Liquibase
查看>>
Python:实现文件归档
查看>>
#region和#endregion
查看>>
Eclipse内存不够解决办法
查看>>
bzoj 4443: [Scoi2015]小凸玩矩阵
查看>>
关于tbody js取法兼容。
查看>>
清华机试 :整数拆分 题目1084
查看>>