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. CSLight研究院之学习笔记结合NGUI(一)

    原地址:http://www.xuanyusong.com/archives/3088 这两天一直在研究CSLight,目前Unity热更新的方式有两种,一种是ulua这个网上的例子已经很多了.还有一 ...

  2. 快速编写HTML,CSS代码的有力工具Emmet插件

    Emmet 是一个编辑器插件,它以一种简写的语法规则可用于快速编写html或css文档内容,它支持多种编辑器. 从官网:http://emmet.io/ 可下载各个编辑器的插件.notepad++ 插 ...

  3. codeforces 439D Devu and Partitioning of the Array(有深度的模拟)

    题目 //参考了网上的代码 注意答案可能超过32位 //要达成目标,就是要所有数列a的都比数列b的要小或者等于 //然后,要使最小的要和最大的一样大,就要移动(大-小)步, //要使较小的要和较大的一 ...

  4. zoj 3529 A Game Between Alice and Bob 博弈论

    思路:每个数的SG值就是其质因子个数,在进行nim博弈 代码如下: #include<iostream> #include<cstdio> #include<cmath& ...

  5. MongoDB的安装,配置与开机自启动

    关于简介不多说百度去吧少年.. MongoDB详细安装: 1.进入官网,点击DOWNLOAD MONGODB,下载所需要的版本.. 我这里把下载的文件放在d\MongoDB文件夹下,点击下载的官方镜像 ...

  6. Eclipse导入工程中文乱码问题

    此文引用自eclipse导入工程中文乱码问题,作者elleniou. 关于Eclipse导入工程中文乱码问题实在是一个非常令人头疼的,深感一定要彻底解决才算放心,故摘抄上文如下: eclipse之所以 ...

  7. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]

    引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...

  8. MongoDB (三) MongoDB 安装

    MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版 ...

  9. Template

    创建win32应用程序空工程 //main.cpp//time: 01/08/2013 #include<d3d9.h>#include <d3dx9.h> #pragma c ...

  10. Linux服务器 scp 不需要密码配置与密钥转换(id_rsa->ppk)

    案例:▲服务器A对服务器B.C进行ssh连接,免输入密码    或▲服务器A向服务器B.C复制文件(源文件在服务器A上),免输入密码 主机A:192.168.0.221主机B:192.168.0.22 ...