皇上,还记得我吗?我就是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 概念朴实、使用方便、配置简练,没有如 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

分享到:更多 ()