-
Notifications
You must be signed in to change notification settings - Fork 255
Readers
logkit目前提供十一种读取日志的方式,分别为File Reader、ElasticSearch Reader、MongoDB Reader、MySQL Reader、MicroSoft SQL Server Reader、PostgreSQL Reader、Kafka Reader、Redis Reader、Socket Reader、Http Reader、Script Reader
- File Reader: 读取文件中的日志数据,包括csv格式的文件,kafka-rest日志文件,nginx日志文件等,并支持以grok的方式解析日志。
- ElasticSearch Reader: 读取ElasticSearch中的数据。
- MongoDB Reader: 读取MongoDB中的数据。
- MySQL Reader: 读取MySQL中的数据。
- MicroSoft SQL Server Reader: 读取Microsoft SQL Server中的数据。
- PostgreSQL Reader: 从PostgreSQL中读取数据。
- Kafka Reader: 读取Kafka中的数据。
- Redis Reader: 读取Redis中的数据。
- Socket Reader: 读取Socket中的数据。
- Http Reader: 读取Http POST请求中的数据。
- Script Reader: 读取脚本执行结果中的数据。
- Snmp Reader: 读取 Snmp 服务中的数据。
目前,实现一个logkit的自定义reader只需要实现以下接口即可。
// Reader 是一个通用的行读取reader接口
type Reader interface {
Name() string
Source() string
ReadLine() (string, error)
SetMode(mode string, v interface{}) error
Close() error
SyncMeta()
}
-
Name()
方法是为了方便的获取Reader名称,做出区别。 -
Source()
方法返回读取的数据源说明,通常是一个自定义的标记,如读取文件的话就是文件路径,读取mysql的话可以是数据库地址、名称、表等。 -
ReadLine()
就是读取一行数据,这个“行”是一个宽泛的概念,并不一定以\n
分隔就是行,那么如何定义行呢?SetMode()
方法解决这个问题。 -
SetMode()
方法定义行首的正则表达式,也可以不做这个定义,默认以\n
分隔作为一行。 -
Close()
方法包括关闭文件句柄、服务连接等常规的结束操作。 -
SyncMeta()
同步读取的元信息,记录读取位置,以便重启等异常情况下可以继续读取,不会丢失数据也不会重复读取。
从数据来源上分类,数据读取大致可分为从文件读取、从数据存储服务端读取以及从消息队列中读取三类。
每一类Reader均在发送成功后通过SyncMeta()函数记录读取的位置,保证数据不会因为runner意外中断而丢失。
这一类最为常见,logkit支持的已经较为完善,可以参阅file reader了解相关内容,支持包括多文件编码格式支持、读取限速等多种功能。
这一类目前logkit支持从MongoDB、MySQL、MSSQL、PostgreSQL、Elasticsearch这五个数据源中读取。
-
在
SyncMeta()
的策略上,这一类从服务器中读取的数据可以采用时间戳策略,如MongoDB、MySQL中记录的数据,应该都包含一个时间戳(timestamp)的字段,每次读取数据均按这个时间戳字段排序,以此获得新增的数据或者数据更新(数据有更新也要更新这个时间戳字段)。 -
周期性运行,需要为用户设计类似定时器等策略,方便用户可以周期性运行,不断同步收集服务器中的数据。
-
考虑性能,在数据量大的情况下,要分批次获取数据,可以参阅不同数据源服务器提供的批量获取数据的方式,针对性的设计性能最优的数据拉取模式。
从消息队列中读取数据在设计上最为简单,因为消息队列服务器在提供服务的时候就会考虑到读取的各类问题,直接利用好消费队列的API即可。注意记录读取的Offset,防止数据丢失。
快速开始 | Pandora | Readers | Parsers | Senders | Download | 七牛智能日志管理平台 | logkit-pro专业版