1. 需求说明
用Shell脚本和Flume采集Nginx日志信息,按日期分割上传到HDFS上,供后续清洗,分析使用。
2. 实现过程
2.1 Shell方式
分析:实现采集日志,需要在特定时间,如0点执行脚本将Nginx日志分离,重新生成新的日志,将过去的日志修改名字后上传到HDFS上。
#! /bin/bash
# Nginx 目录
NGINX_HOME=/usr/local/nginx
# 获取昨天的时间
YESTERDAY=`date -d"1 day ago" +"%Y%m%d"`
# Hadoop 目录
HADOOP_HOME=/opt/modules/cdh5.14.2/hadoop-2.6.0-cdh5.14.2
# 重命名
/bin/mv ${NGINX_HOME}/logs/access.log ${NGINX_HOME}/logs/access_${YESTERDAY}.log
# 回滚日志
${NGINX_HOME}/sbin/nginx -s reload
# 声明环境变量 执行用户
export HADOOP_USER_NAME=fanl
# 上传日志
${HADOOP_HOME}/bin/hdfs dfs -put ${NGINX_HOME}/logs/access_${YESTERDAY}.log /user/fanl/nginx
这里需要写个定时任务调度,使用crontab,这里就不再写了。直接执行验证。
2.2 Flume方式
通过一个Flume监控Nginx日志将信息发送到一个特定的端口,增加一个聚合Flume收