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


概述

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

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

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



为何先讲Logstash

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

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

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


Logstash的插件管理

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

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

能够在网址 rubygems.org上搜索全部Logstash插件:ui

rubygems.org

关于插件的经常使用操做以下:搜索引擎

  • 安装插件

能够在线安装:spa

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插件的实例。



后记


注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 当心心 来订阅 ↓ ↓ ↓

CodeSheep · 程序羊
相关文章
相关标签/搜索