Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
Andrewei edited this pageFeb 5, 2018 ·11 revisions

logkit目前提供十一种读取日志的方式,分别为File ReaderElasticSearch ReaderMongoDB ReaderMySQL ReaderMicroSoft SQL Server ReaderPostgreSQL ReaderKafka ReaderRedis ReaderSocket ReaderHttp ReaderScript Reader

如何添加更多Reader(自定义Reader)?

目前,实现一个logkit的自定义reader只需要实现以下接口即可。

// Reader 是一个通用的行读取reader接口type Reader interface {Name() stringSource() stringReadLine() (string, error)SetMode(mode string, v interface{}) errorClose() errorSyncMeta()}
  • 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,防止数据丢失。

Clone this wiki locally

[8]ページ先頭

©2009-2025 Movatter.jp