皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

高性能日志采集工具 logpipe 更新至 1.0.9 版本

1.0.9           2018-11-15      calvin
* 插件logpipe-output-ingeek的服务端主机配置数量扩大到32个

1.0.8           2018-11-08      calvin
* 清理了不少遗留代码
* 其它几个遗漏未改select的地方也改用poll了
* 新增分解日志行发送插件代码模板logpipe-output-linemode-template.c

1.0.7           2018-10-10      calvin
* 解决了logpipe-output-ingeek.so使用select描述字大于1024而导致的异常,改用poll
* 按读文件内容块轮训上游服务端改成按日志行块

1.0.6           2018-09-10      calvin
* 插件logpipe-input-file.so和logpipe-output-ingeek.so新增NOTICE等级日志
* 插件logpipe-output-ingeek.so新增参数iov_send_timeout,iov_connect_interval
* 新增公函writev3,首先用于插件logpipe-output-ingeek.so

1.0.5           2018-09-07      calvin
* 优化logpipe-output-ingeek分割行和合并通讯发送性能
* 新增测试程序press_LOGC

1.0.4           2018-09-06      calvin
* 优化logpipe-output-ingeek

1.0.3           2018-09-06      calvin
* 调整了logpipe-input-file一些return值,不轻易返回-1导致退出
* logpipe-input-file配置参数files和exclude_files增加到8个
* 调整了所有插件的版本全局变量
* 精简了logpipe-output-ingeek日志

1.0.2           2018-09-05      calvin
* 调整了文件改名事件的错误处理

1.0.1           2018-08-23      calvin
* 修正了日志等级常量字符串集合缺漏
* 没有配置输出插件时不应该报错

1.0.0           2018-07-28      calvin
* 发布v1.0.0版本

0.22.6          2018-07-23      calvin
* 解决了移出文件没有释放的问题

0.22.5          2018-07-21      calvin
* 插件logpipe-input-file.so重构成IN_ONESHOT模式

0.22.4          2018-07-20      calvin
* 清除无用代码

0.22.3          2018-06-30      calvin
* 同步更新iLOG3.LOGC

0.22.2          2018-06-27      calvin
* 插件logpipe-input-file.so新增逻辑,变化文件在1、2、4…秒后检测大小,一共尝试6次

0.22.1          2018-06-26      calvin
* 新增脚本shbin/logpipe.sh和shbin/logpipe_pack_bin.sh

0.22.0          2018-06-20      calvin
* 新增目录test以及两个测试程序
* 文件偏移量、块长度等从32位升级到64位,能处理更大大小的文件了 ***不向下兼容,如内部通讯协议等***

0.21.11         2018-06-19      calvin
* 插件logpipe-input-file.so
新增参数min_usleep_interval
删除事件改为立即处理
其它一些优化调整
* 修正公函size_atol和usleep_atol

0.21.10         2018-06-17      calvin
* 新增API size_atoi用于插件参数大小单位转换
* 新增API usleep_atoi用于插件参数微秒单位转换
* 插件logpipe-input-file.so
新增参数max_usleep_interval用于沉睡间隔,降低CPU耗用
增加捕获子目录下的文件删除事件,防止文件IN_DELETE_SELF漏事件
inotify事件队列溢出时检查所有文件偏移量处理合并为一轮一次

0.21.9          2018-06-10      calvin
* 修正了小日志文件没有及时采集的问题
* 根据修改过的需求改造logpipe-output-ingeek.so

0.20.8          2018-06-09      calvin
* 优化了logpipe-input-file.so性能

0.20.7          2018-06-08      calvin
* 优化了logpipe-input-file.so性能

0.20.6          2018-06-05      calvin
* 优化了logpipe-input-file.so和logpipe-output-file.so性能

0.20.5          2018-06-03      calvin
* 修正了logpipe-output-file.so大小转档问题

0.20.4          2018-05-31      calvin
* 增加logpipe-output-ingeek.so发送TCP性能日志
* 调整了部分日志等级
* 增大了自身日志缓冲区大小

0.20.3          2018-05-30      calvin
* 修正了logpipe-output-ingeek.c和logpipe-output-tcp.c刚连接完未数据收发时停止logpipe,因为p_forward_session指针未赋值引发的coredump

0.20.2          2018-05-28      calvin
* 修正了src-plugins/logpipe-output-ingeek.c和src-plugins/logpipe-output-ek.c解析缓存区与logpipe输入缓冲区大小相似造成的大量折行问题

0.20.1          2018-05-18      calvin
* 钩子函数原型变动funcReadInputPlugin和funcWriteOutputPlugin
* 插件logpipe-output-ingeek调整通讯协议

0.20.0          2018-05-10      calvin
* 钩子函数原型变动funcReadInputPlugin和funcWriteOutputPlugin
* 输入插件logpipe-input-file内部文件偏移量递增改成小步累加
* 新增输出插件logpipe-output-ingeek

0.19.0          2018-05-03      calvin
* 插件logpipe-input-file补充参数files2,file3,exclude_files2,exclude_files3

0.18.0          2018-04-19      calvin
* 新增空闲事件函数用于无输入事件时定期调用,如logpipe-output-kafka定期检查异步响应

0.17.0          2018-04-19      calvin
* 新增插件logpipe-output-kafka

—————————————————————–

1. 概述

在集群化环境里,日志采集是重要基础设施。

开源主流解决方案是基于flume-ng,但在实际使用中发现flume-ng存在诸多问题,比如flume-ng的spoolDir采集器只能对文件名转档后的大小不能变化的最终日志文件进行采集,不能满足采集时效性要求,如果要采集正在被不断追加的日志文件,只能用exec采集器搭配tail -F命令,但tail -F命令又不能通配目标目录中将来新增的未知文件名。其它解决方案如logstash由于是JAVA开发,内存占用和性能都不能达到最优。

作为一个日志采集的本地代理,内存占用应该小而受控,性能应该高效,耗费CPU低对应用影响尽可能小,要能异步实时追踪日志文件增长,某些应用会在目标目录下产生多个日志文件甚至现在不能确定将来的日志文件名,架构上要支持多输入多输出流式日志采集传输,为了达成以上需求,我研究了所需技术,评估实现难度并不高,就自研了logpipe。

logpipe是一个分布式、高可用的用于采集、传输、对接落地的日志工具,采用了插件风格的框架结构设计,支持多输入多输出按需配置组件用于流式日志收集架构,无第三方依赖。

logpipe的一种用法是能异步实时监控集群里的所有日志目录,一旦有文件新增或追加写,立即采集并传输到大存储上以相同日志文件名合并落地,或者写入HDFS。异步意味着不影响应用输出日志的性能,实时意味着一有日志立即采集,很多日志采集工具如flume-ng、logstash介绍文档通篇不提采集方式是否实时还是周期性的,这很关键。

高性能日志采集工具 logpipe 更新至 1.0.9 版本

logpipe概念朴实、使用方便、配置简练,没有如sink等一大堆新名词。

logpipe由若干个input、事件总线和若干个output组成。启动logpipe管理进程(monitor),派生一个工作进程(worker),监控工作进程崩溃则重启工作进程。工作进程装载配置加载若干个input插件和若干个output插件,进入事件循环,任一input插件产生消息后输出给所有output插件。

logpipe自带了5个插件(今后将开发更多插件),分别是:
* logpipe-input-file 用inotify异步实时监控日志目录,一旦有文件新建或文件增长事件发生(注意:不是周期性轮询文件修改时间和大小),立即捕获文件名和读取文件追加数据。该插件拥有文件大小转档功能,用以替代应用日志库对应功能,提高应用日志库写日志性能。该插件支持数据压缩。
* logpipe-output-file 一旦输入插件有消息产生后用相同的文件名落地文件数据。该插件支持数据解压。
* logpipe-input-tcp 创建TCP服务侦听端,接收客户端连接,一旦客户端连接上有新消息到来,立即读取。
* logpipe-output-tcp 创建TCP客户端,连接服务端,一旦输入插件有消息产生后输出到该连接。
* logpipe-input-exec 执行长命令并捕获输出
* logpipe-output-hdfs 一旦输入插件有消息产生后用相同的文件名落地到HDFS中。该插件支持数据解压。

使用者可根据自身需求,按照插件开发规范,开发定制插件,如IBMMQ输入插件、HDFS输出插件等。

logpipe配置采用JSON格式,层次分明,编写简洁,如示例:

{
	"log" : 
	{
		"log_file" : "/tmp/logpipe_case1_collector.log" ,
		"log_level" : "INFO"
	} ,
	
	"inputs" : 
	[
		{ "plugin":"so/logpipe-input-file.so" , "path":"/home/calvin/log" , "compress_algorithm":"deflate" }
	] ,
	
	"outputs" : 
	[
		{ "plugin":"so/logpipe-output-tcp.so" , "ip":"127.0.0.1" , "port":10101 }
	]
}

转自 https://www.oschina.net/news/101910/logpipe-1-0-9-released