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. 远程数据源Combobox

    Ext.define('bookInfo', {          extend: 'Ext.data.Model',//新类继承自model          fields: [{ name: 'b ...

  2. Altium Designer Summer 09创建半圆焊盘方法

    关于异形焊盘的创建,可参看下面的半圆PAD的制作:1.新建一个PCB文件,然后在里面画一个半圆的Arc,即Place放置(P)>Arc,并且要将其开口处 封闭,即可用Place   放置(P)& ...

  3. HDU2829 Lawrence(斜率优化dp)

    学了模板题之后上网搜下斜率优化dp的题目,然后就看到这道题,知道是斜率dp之后有思路就可以自己做不出来,要是不事先知道的话那就说不定了. 题意:给你n个数,一开始n个数相邻的数之间是被东西连着的,对于 ...

  4. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

  5. NtpClient

    http://www.baidu.com/link?url=IWGCXsX4Mns_ZjEF6HYEK156xCsndi9Bu1w3x_YiaJfdsr8vf0Q5worm43W3OiEmSHpzTp ...

  6. (4)opencv在android平台上实现 物体跟踪

    最近项目时间很紧,抓紧时间集中精力去研究android平台的opencv里的物体跟踪技术 其他几篇文章有时间再去完善吧 从网上找到了一些实例代码,我想采取的学习方法是研究实例代码和看教程相结合,教程是 ...

  7. mysql之触发器

    触发器     MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,怎么办呢?例如:每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正 ...

  8. C#反射技术的相关使用方法

    1.获取同一程序集的类型实例 无参数构造函数 Type t=Type.GetType("AppCode.Employee"); object emp=t.Assembly.Crea ...

  9. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

  10. mybatis 打印日志log4j.properties

    log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log ...