从一份定义文件详解ELK中Logstash插件结构

Profile


概述

当下分布式系统的 日志收集、日志分析、日志处理、可视化 的热门技术栈方案当然非 ELK(ElasticSearch、Logstash、Kibana)莫属,从 L → E → K 构成了一条数据的 Pipeline管道:

  • Logstash:与数据源对接,用于收集、过滤处理你的日志、事务或其他数据
  • ElasticSearch: 是一个开源的,分布式 RESTful 搜索引擎,在 ELK中可以初略理解为数据存储的地方
  • Kibana:将 Elasticsearch 的数据分析并渲染为可视化的报表,便于高效分析

而且在我的前文《利用 ELK搭建 Docker容器化应用日志中心》之中,曾利用 ELK 搭建了一条数据管道,用作 Docker容器化应用的日志中心。

注: 本文原载于 My Personal Blog:CodeSheep · 程序羊



为什么先讲Logstash

作为与数据源 “直接对接” 的 Logstash,位置处于 ELK 数据管道的 最前端,其主要作用是 收集、过滤分析、输出 各种结构化或者非结构化的原始数据(典型的如日志数据),原始数据从 “无序变有序” 的重担就落在了Logstash的肩上了,因此其作用举足轻重。

说到Logstash,不得不说其中的 插件机制,其几乎所有的功能都是靠插件来实现的,因此灵活易用:

  • 关于 数据收集,Logstash 提供了输入插件来支持各种不同的数据源
  • 关于 数据分析,Logstash 则提供了过滤器插件来支持对输入原始数据的花式处理
  • 关于 数据输出,Logstash 也提供了各种输出插件,从而支持将结果数据输出到各种地方,比如标准控制台,文件,各种数据库包括 ElasticSearch 等


Logstash的插件管理

Logstash 插件是使用 Ruby开发的,Logstash 从很早的1.5.0+版开始,其插件模块和核心模块便分开维护,其插件使用的是 RubyGems包管理器来管理维护。所以 Logstash插件本质上就是自包含的RubyGems。

RubyGems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统。 它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。

可以在网址 rubygems.org上搜索所有Logstash插件:

rubygems.org

关于插件的常用操作如下:

  • 安装插件

可以在线安装:

bin/plugin install [插件名称]

当然也可以将插件提前下载到本地,然后本地安装:

bin/plugin install path/logstash-xxx-x.x.x.gem
  • 卸载插件
bin/plugin uninstall [插件名称]
  • 更新插件
bin/plugin update [插件名称]

其会将插件更新到最新的版本



Logstash的插件定义语法结构

Logstash 插件的定义其实使用的就是一套其自定义的 DSL语法,我还是习惯用图来说明吧:

Logstash的插件结构

从图中可以看出主要包含以下几大部分内容:

1. 需要的依赖

该部分一般会用require语法引入如下依赖:

require "logstash/XXX/base"
require "logstash/namespace"
  • 前者引入 特定类型插件的依赖
  • 后者引入 模块命名空间

2. 类定义

需要用 class语法给每一个插件定义一个类,后面我会用实际代码说明

3. 配置插件名字

通过 config_name 语法来给插件取一个名字,这个名字将会用到 Logstash.conf 配置文件的插件配置之中

4. 配置选项设置

可以使用 config 语法来按需定义任意个配置项。可以设置配置选项的名字、数据类型、默认值以及是否为必选项:

举例:

config :percentage, :validate => :number, :default =>100
  • :percentage:定义配置项的名字
  • :validate:配置指定参数的数据类型,如此处为 number类型
  • :default:指定配置项的默认值
  • :required:用于指定配置项是否必选

5. 插件方法

每一种类型的插件都需要实现一些方法,如下表所示:

插件类型 插件方法
输入插件 register、 run
过滤器插件 register、 filter
输出插件 register、 receive
编解码插件 register、 encode、 decode

Logstash 插件所具备的业务处理功能就来源于上述插件方法业务逻辑实现!

好了,理论部分总结到这,下面结合一份Logstash插件定义的源码来例析一下!



一份Logstash插件定义文件例析

我们以 Logstash 插件的官网给出的一个 Logstash 过滤器插件 logstash-filter-example 的源码为例来进行分析,麻雀虽小,五脏俱全!代码解析已经标注于图中,不再赘述。

logstash-filter-example插件源码

当然此处的实例给出的是一个入门实例,毕竟不可能在一篇篇幅有限的文章里给出一个太过复杂的 Logstash的插件源码。对照该源码和上一节的内容,我想应该不难理解Logstash的插件源码结构了吧。

计划后续展示一个 根据具体数据需求 来自定义开发一个满足特定需求的 Logstash插件的实例。



后记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 这个周末我啥也没做,在家静静地看了S7全球赛半决赛。很难过,全华班RNG2:3不敌SKT,止步四强;WE1:3输给...
    三叶草青青阅读 484评论 41 8
  • 来到曲阜,强烈感受到历史文化的深厚,亲眼见到孔庙、孔府,被那一组组具有东方建筑特色、规模宏大、气势雄伟的古代建筑群...
    七月风阅读 487评论 0 7
  • 这篇文章没有专业的身体动力学理论,没有科学的健身知识,只是我个人两年来健身的总结与经验以及我的胡说八道。 本人健身...
    谭端午阅读 1,197评论 10 10
  • 张壁古堡,号称“中国星相第一村”,地面布局与天上的二十八星宿相对应,名气虽远不如与之毗邻的平遥古城、王家大...
    一路向阳2021阅读 496评论 1 0