数据收集属于轻量级的 agent 办事,一捌揭捉?择的说话为 C/C++ 或者近年来特别火热的 Go,而 Go 说话已经成为这类数据收集对象编写的大年夜众选择,如 Logstash 新开辟的 beats 对象、Telegraf、cAdvisor 等等,均应用 Go 说话开辟。
社区已经有很多文┞仿描述应用 Go 说话的好处,在此就不再赘述。总体而言用 Go 说话开辟门槛较低,机能优良,支撑跨多种操作体系平台,安排也极为简便。
分模块设计
如不雅寻求最高的靠得住性,就应用磁盘队列,数据会暂存到本地磁盘中,发送后主动删除,即使忽然宕机也不怕损掉数据。
数据攫取模块(Reader)
设备文件中默认开启了 3000 端口,初次应用可以经由过程浏览器打开 logkit 设备页面,设备 runner 并调试攫取、解析和发送方法,浏览器拜访的地址是 http://127.0.0.1:3000 。
- logkit -f logkit.conf
顾名思义,数据攫取模块负责大年夜不合数据源中攫取数据,设计 Reader 模块的时刻,须要支撑插件式数据源接入,且将接口设计得足够简单,便利大年夜家一同供献更多的攫取数据源驱动。
自定义数据源,最根本的只须要实现如下两个办法即可。
大年夜数据来源上分类,数据攫取大年夜致可分为大年夜文件攫取、大年夜数据存储办事端攫取以及大年夜消息队列中攫取三类。
每一类 Reader 均在发送成功后经由过程 SyncMeta() 函数记录攫取的地位,包管数据不会因为 runner 不测中断而损掉。
大年夜文件攫取数据 最为常见,针对文件的不合 rotate 方法,有不合的攫取模式,重要分为三类:
- file 模式:应用 file 模式的经典日记存储方法类似于 nginx 的日记 rotate 方法,日记名称是固定的,如access.log,rotate 时直接 move 成新的文件如access.log.1,新的数据仍然写入到access.log。即我们永远只针对access.log章一?固定名称的文件进行收集。而检测文件是否 rotate 的标记是文件的 inode 号,在 windows 下则是 fd 的属性编号。当文件 rotate 后,则大年夜文件头开端攫取。
- dir 模式:应用 dir 模式的经典日记存储方法为全部文件夹下存储单个办事的营业日记,文件夹下的日记平日有同一前缀,后缀为时光戳,根据日记的大年夜小 rotate 到新的文件。如设备的文件夹为 logdir,下面的文件为 logdir/a.log.20170621, logdir/a.log.20170622, logdir/a.log.20170623, …。每次瓜分后新定名文件并以时光戳为后缀,并且该文件夹下只有章一?办事。dir 模式起首会对文件夹下文件整体排序,依次攫取各个文件,读完最后一个文件后会查找时光 (文件 ctime) 更新文件并从新排序,依次轮回。dir 模式应当将多个文件数据串联起来,即数据攫取过程中 a.log.20170621 中最后一行的下一行就是 a.log.20170622 的第一行。该模式下天然还包含诸如文件前缀匹配、特定后缀忽视等功能。
- tailx 模式:以通配的路径模式攫取,攫取所有被通配符匹配上的日记文件,对于单个日记文件应用 file 模式赓续追踪日记更新,例如匹配路径的模式串为 /home/*/path/*/logdir/*.log*, 此时会展开并匹配所有相符该表达式的文件,并持续攫取所有稀有据追加的文件。每隔一准时光,从新获取一遍模式串,添加新增的文件。
大年夜数据存储办事中攫取数据,可以采取时光戳策略,在诸如 MongoDB、MySQL 中记录的数据,包含一个时光戳字段,每次攫取数据均按这个时光戳字段排序,以此获得新增的数据或者数据更新。另一方面,须要为用户设计类似准时器等策略,便应用户多次运行,赓续同步收集办事器中的数据。
大年夜消息队列中攫取数据,这个最为简单,直接大年夜消息队列中花费数据即可。留意记录攫取的 Offset,防止数据损掉。
解析模块 (Parser)
解析模块负责将数据源中攫取的数据解析到对应的字段及类型,今朝常见的解析器包含:
- csv parser: 按照分隔符解析查对应字段和类型,分隔符可以自定义,如常见的制表符 (\t)、空格 ( )、逗号 (,) 等等。
- json parser: 解析 json 格局的数据,json 是一种自带字段名称及类型的序列化协定,解析 json 格局仅需反序列化即可。
- 基于正则表达式 (grok) parser: Logstash grok 解析异常强大年夜,然则它并不指定类型,而 Telegraf 做了一个加强版的 grok 解析器,除了根本的┞俘则表达式和字段名称,还能标记数据类型,根本上能标记数据类型的 grok 解析器已经是一个完全的数据解析器了,可以解析几乎所稀有据。当然,类型解析是相对复杂的功能,可能涉及到具体营业,如时光类械寥。
- raw parser: 将攫取到的一行数据作为一个字段返回,简单实用。
- nginx/apache parser: 攫取 nginx/apache 等常见设备文件,主动生成解析的┞俘则表达式,解析 nginx/apache 日记。
除了以上几种内置的解析器,同 Reader 一样,你也须要实现自定义解析器的插件功能,而 Parser 极为简单,只须要实现最根本的 Parse 办法即可。
- Parse(lines []string) (datas []sender.Data, err error)
每一种 Parser 都是插件式构造,可以复竽暌姑并随便率性选择。在不推敲解析机能的情况下,上述几种解析器根本可以知足所稀有据解析的需求,将一行行数据解析为带有 Schema(具备字段名称及类型)的数据。然则当你欲望对某个字段做操作时,纯粹的解析器可能不敷用。于是作为弥补,数据收集对象还须要供给 Transformer/Filter 的功能。
Transformer
Transformer 是 Parser 的弥补,针对字段进行数据变更。
又比如说,你的字段中有个”IP”,你欲望将这个 IP 解析成运营商、城市等信息,那么你就可以添加一个 Transformer 做这个 IP 信息的转换。
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!【编辑推荐】微软联袂FB推出开源项目 打造共享神经收集模型微软Skype开启第二轮Cortana整合,可参加对话傍边作为助手微软>>>详细阅读
本文标题:数据收集工具的设计与最佳实践
地址:http://www.17bianji.com/lsqh/38064.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示