基于inotify机制的日志收集方法
2015-09-07 00:44
197 查看
基于inotify机制的日志收集方法
考虑使用tail file的方法来采集日志数据:每1秒钟去扫描一次被监控文件的尾部,根据上一次的读取位置和当前文件尾部的偏移量,把新写入的数据读出来,并记录当前读取位置。
这种方法有以下特点:
只需对原始日志持有读权限,安全性不错。
日志收集的时间粒度不够细,无法应对高并发的监控需求。考虑一下监控3000个日志文件的场景,我们需要每秒钟依次对3000个文件做询问,效率十分低下。
在某1秒时间间隔内,如果日志文件没有变化,系统对该文件做询问是对CPU时间的浪费。
监控目标必须是确定的,无法应对监控目录下文件与目录动态创建、删除、移动的数据采集场景。
分析下来,存在两个问题:一、不知道何时去采集数据:有些监控文件即使没有新数据写入,仍然去做定时询问,这非常低效,且浪费资源。二、无法与监控目录动态发生的变化做同步:实际场景下,目录发生的变动无法被跟踪,这容易造成监控对象丢失。
产生问题的主要原因在于系统无法感知监控对象的变化。有一个改进的方法:用通知机制替换轮询机制,任意时刻,只需要关心发生变化的文件与目录。
操作系统是否提供这样一个事件通知机制?
Linux在2.6.13内核版本中首次引入inotify,它提供一个机制来监视文件系统事件,添加inotify监视的目录或文件被创建、删除、移动、修改时,内核都会发出事件通知,这为高效、实时的日志收集带来可能。
基于inotify机制,我们开发了日志收集的程序logtail,它可以适应监控目录的动态变化,并进行高效、实时的日志采集。
考虑使用tail file的方法来采集日志数据:每1秒钟去扫描一次被监控文件的尾部,根据上一次的读取位置和当前文件尾部的偏移量,把新写入的数据读出来,并记录当前读取位置。
这种方法有以下特点:
只需对原始日志持有读权限,安全性不错。
日志收集的时间粒度不够细,无法应对高并发的监控需求。考虑一下监控3000个日志文件的场景,我们需要每秒钟依次对3000个文件做询问,效率十分低下。
在某1秒时间间隔内,如果日志文件没有变化,系统对该文件做询问是对CPU时间的浪费。
监控目标必须是确定的,无法应对监控目录下文件与目录动态创建、删除、移动的数据采集场景。
分析下来,存在两个问题:一、不知道何时去采集数据:有些监控文件即使没有新数据写入,仍然去做定时询问,这非常低效,且浪费资源。二、无法与监控目录动态发生的变化做同步:实际场景下,目录发生的变动无法被跟踪,这容易造成监控对象丢失。
产生问题的主要原因在于系统无法感知监控对象的变化。有一个改进的方法:用通知机制替换轮询机制,任意时刻,只需要关心发生变化的文件与目录。
操作系统是否提供这样一个事件通知机制?
Linux在2.6.13内核版本中首次引入inotify,它提供一个机制来监视文件系统事件,添加inotify监视的目录或文件被创建、删除、移动、修改时,内核都会发出事件通知,这为高效、实时的日志收集带来可能。
基于inotify机制,我们开发了日志收集的程序logtail,它可以适应监控目录的动态变化,并进行高效、实时的日志采集。
相关文章推荐
- 尝试使用python做一个网页爬虫
- Wine 编译安装「转载」
- eclipse 内存配置
- Android 短代码实现 最简易的画板
- Java and Nodejs on AES
- 第一次尝试使用python读写Excel文件
- 海量数据最小k个数
- 多线程之Linux编程(1)--常用函数
- 异步ztree展现struts2后台数据集
- 智能聊天机器人
- bottle接收post请求
- Get请求,Post请求乱码问题解决方案
- Something about how install Eclipse onto Ubuntu14.04
- 对tabcontrol控件增强,添加关闭按钮功能、呼吸灯标签闪烁功能、类QQ消息数量标签提示TIP
- iSensor App Kit 测试之 MT9V111 MT9M111 MT9D111
- typecho bootstrap 风格主题
- 20150905 Linux任务计划
- freemarker 笔记
- 20150917
- mysql错误代码1045