nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。
第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主进程发送USR1信号。
nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。
重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。
工作进程立刻打开新的日志文件并关闭重名名的日志文件。
然后你就可以处理旧的日志文件了。
nginx日志按日期自动切割脚本如下
#nginx日志切割脚本
#!/bin/bash #设置日志文件存放目录 logs_path="/usr/local/nginx/logs/" #设置pid文件 pid_path="/usr/local/nginx/nginx.pid" #重命名日志文件 mv ${logs_path}access.log ${logs_path}access_$(date-d"yesterday"+"%Y%m%d").log
#向nginx主进程发信号重新打开日志 kill -USR1 `cat ${pid_path}`
#以上是对日志的处理,可是重新命名后原来的那个access.log已经不存在了,使用tail -f 时候flumeng无法再继续收集新产生的日志了,这个时候我们把flume收集日志的命令改为tail -F 收集日志即可。

详细见 http://liyonghui160com.iteye.com/blog/2098777

保存以上脚本nginx_log.sh,设置定时执行。

设置上面的shell脚本文件加入到定时任务中去。crontab是linux下面一个定时任务进程。开机此进程会启动,它每隔一定时间会去自己的列表中看是否有需要执行的任务。

crontab  -e

0 0 * * * /data/wwwlogs/nginx_log_division.sh

会打开一个文件,加入上面的代码

格式为 "分 时 日 月 星期几  要执行的shell文件路径"。用*可以理解成“每”,每分钟,每个小时,每个月等等。

我设置是在凌晨0点0分运行nginx_log_division.sh脚本放到flume中bin文件夹下,脚本的内容就是重新生成一个新的日志文件。

nginx_log_division.sh代码:

  1. #!/bin/bash
  2. #设置日志文件存放目录
  3. logs_path="/usr/local/nginx/nginxlog/"
  4. #设置pid文件
  5. pid_path="/usr/local/nginx/nginx-1.7.3/logs/nginx.pid"
  6. #日志文件
  7. filepath=${logs_path}"access.log"
  8. # Source function library.
  9. #重命名日志文件
  10. mv ${logs_path}access.log ${logs_path}access_$(date -d '-1 day' '+%Y-%m-%d').log
  11. #向nginx主进程发信号重新打开日志
  12. kill -USR1 `cat ${pid_path}`

flumeng配置:

  1. # A single-node Flume configuration
  2. # Name the components on this agent
  3. agent1.sources = source1
  4. agent1.sinks = sink1
  5. agent1.channels = channel1
  6. # Describe/configure source1
  7. agent1.sources.source1.type = exec
  8. agent1.sources.source1.command = tail -n +0 -F /logs/access.log
  9. agent1.sources.source1.channels = channel1
  10. # Describe sink1
  11. agent1.sinks.sink1.type = file_roll
  12. agent1.sinks.sink1.sink.directory=/var/log/data
  13. # Use a channel which buffers events in memory
  14. agent1.channels.channel1.type = file
  15. agent1.channels.channel1.checkpointDir=/var/checkpoint
  16. agent1.channels.channel1.dataDirs=/var/tmp
  17. agent1.channels.channel1.capacity = 1000
  18. agent1.channels.channel1.transactionCapactiy = 100
  19. # Bind the source and sink to the channel
  20. agent1.sources.source1.channels = channel1
  21. agent1.sinks.sink1.channel = channel1

nginx日志切割并使用flume-ng收集日志的更多相关文章

  1. windows下面Nginx日志切割

    Nginx本身并不支持日志切割,那么就会造成日志非常的大,为了解决这个问题我们用到了windows的计划任务和dos命令.具体思路: 1.写一个dos文件,通过windows的计划任务定时执行(每天执 ...

  2. Nginx 热部署和日志切割,你学会了吗?

    上篇文章,我们已经安装好 Nginx,并且配置好 Nginx 文件后,这个时候我就需要操作 Nginx 的命令行了,这篇文章主要讲解 Nginx 命令行相关知识,并通过日常遇到的热部署.切割日志文件场 ...

  3. Flume NG部署

    本次配置单节点的Flume NG 1.下载flume安装包 下载地址:(http://flume.apache.org/download.html) apache-flume-1.6.0-bin.ta ...

  4. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  5. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)(转)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  6. Linux日志切割logrotate服务配置

    一.logrotate介绍 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.一般centos系统已经自带安装好 ...

  7. 日常运维中的相关日志切割处理方法总结 [Logrotate、python、shell脚本实现 ]

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  8. Linux 日志切割方法总结--Logrotate

    一.Logrotate 使用方法 对于Linux系统安全来说,日志文件是极其重要的工具.logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到&qu ...

  9. 配置好Nginx后,通过flume收集日志到hdfs(记得生成本地log时,不要生成一个文件,)

    生成本地log最好生成多个文件放在一个文件夹里,特别多的时候一个小时一个文件 配置好Nginx后,通过flume收集日志到hdfs 可参考flume的文件 用flume的案例二 执行的注意点 avro ...

随机推荐

  1. Sqli-labs less 50

    Less-50 从本关开始我们开始进行order by stacked injection! 执行sql语句我们这里使用的是mysqli_multi_query()函数,而之前我们使用的是mysqli ...

  2. Access数据库和SQL Server数据库在实际应用中的区别

    1.在Access数据库中简历查询语句的步骤 --> 打开你的MDB --> 在数据库窗口中,点击“查询”,或在“视图”菜单中选择“数据库对象”-> “查询” --> 点击数据 ...

  3. APM 终端用户体验监控分析(上)

    一.前言 理解用户体验是从终端用户角度了解应用交付质量的关键,这是考量业务健康运转的潜在因素.捕获此类数据的方法各种各样,具体的实现途径由应用.基础设施架构以及管理者和管理过程决定. 二.终端用户监控 ...

  4. 7 天玩转 ASP.NET MVC — 第 7 天

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...

  5. JQuery的ajax方法

    1.使用方式: 由于是全局方法,所以调用简单:$.ajax(); 2.可输入参数: 最好是写成一个json形式,个人不建议用链式,那样看上去不太好. 参数名称 类型 描述 dataType strin ...

  6. hadoop配置错误

    经过上一周的郁闷期(拖延症引发的郁闷),今天终于开始步入正轨了.今天主要是解决hadoop配置的错误以及网络时断时续的问题. 首先说明一下之前按照这篇文章的方法配置完全没有问题,但是等我配置好了发现h ...

  7. LCA(最近公共祖先)离线算法Tarjan+并查集

    本文来自:http://www.cnblogs.com/Findxiaoxun/p/3428516.html 写得很好,一看就懂了. 在这里就复制了一份. LCA问题: 给出一棵有根树T,对于任意两个 ...

  8. ExtJs之Ext.util.Format

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  9. BZOJ 1877: [SDOI2009]晨跑 费用流

    1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...

  10. C#程序重启自己

    Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location); Application.Exit();