手把手教你編寫Logstash外掛程式

2022-02-04 14:59:33 字數 3306 閱讀 1604

使用過logstash的朋友都知道,它強大的外掛程式生態幾乎覆蓋了所有的開源框架。從基本的http、tcp、udp、file,到強大的kafa、redis、ganglia,還有豐富的解析工具,比如date、json、grok、kv等等,有了它再也不用擔心資料不好蒐集了!

不過需求是無限的,如果這些框架都不滿足怎麼辦呢?

沒關係,十分佩服logstash的作者,他以外掛程式的方式組織每個部分,使得logstash本身具有超強的擴充套件性。

有過使用經驗的都知道logstash主要由輸入、過濾器、輸出三部分組成。

每一部分的外掛程式都符合統一的標準,因此擴充套件起來也十分容易。

由於需求大多都是集中在過濾部分,因此這裡就簡單的介紹下過濾器的自定義寫法。

官網上面的過程太過繁瑣,比如:

但是如果自己用的話,上面做了很多的無用功。我這裡提供乙個極簡的樣例工程,外掛程式的目錄大致如下:

$ tree logstash-filter-example

├──lib

│ └── logstash

│ └── filters

│ └── mypluginname.rb

├── logstash-filter-example.gemspec

其實只需要這兩個檔案即可!

先看看logstash-filter-example.gemspec都做了什麼吧!

gem::specification.new do|s|

s.name ='logstash-filter-example'

s.version ='1.0.0'

s.licenses =['apache license (2.0)']

s.summary =" "

s.description =" "

s.authors =["xingoo"]

s.email ='[email protected]'

s.homepage =""

s.require_paths =["lib"]# files

s.metadata =# gem dependencies

s.add_runtime_dependency 'logstash-core','>= 2.0.0','< 3.0.0'

s.add_development_dependency 'logstash-devutils'

end

上面的資訊,只要改改版本和名字,其他的資訊基本不需要動。

關鍵的資訊還有:

然後再看看logstash-filter-example.rb

這個檔案就需要詳細說說了,基本的框架如下,

# encoding: utf-8

require "logstash/filters/base"

require "logstash/namespace"

class logstash::filters::example < logstash::filters::base

config_name "example"

config :name,:validate =>:string,:default =>"xingoo!"

public

def register

endpublic

def filter(event)

event["name"] = @name

filter_matched(event)

end

end

挨行看看!

首先第一行的# encoding: utf-8,不要以為是注釋就沒什麼作用。它定義了外掛程式的編碼方式。

下面兩行:

require "logstash/filters/base"

require "logstash/namespace"

引入了外掛程式必備的包。

class logstash::filters::example < logstash::filters::base

config_name "example"

外掛程式繼承自base基類,並配置外掛程式的使用名稱。

下面的一行對引數做了配置,引數有很多的配置屬性,完整的如下:

config :variable_name,:validate =>:variable_type,:default =>"default value",:required => boolean,:deprecated => boolean
其中

下面的兩個方法是外掛程式的核心了!

register方法相當於初始化的構造方法,可以在裡面進行外掛程式的初始化工作。

filter中則是過濾器的核心**。

其中event是從input外掛程式中傳入的事件物件,它是logstash::event的物件,在logstashj-core包中,有興趣的可以了解一下!

然後在這個方法中可以使用幾個預設的方法;

在上面的例子中,定義了乙個name引數,在register中使用@name例項變數,把引數賦值給event物件。

這個外掛程式的目的就是給每條事件都加上乙個name屬性。

至此乙個外掛程式就算編寫完成了!

第一步,首先把這個外掛程式資料夾拷貝到下面的目錄中

logstash-2.1.0\vendor\bundle\jruby\1.9\gems
第二步,修改logstash根目錄下的gemfile,新增如下的內容:

gem "logstash-filter-example", :path => "vendor/bundle/jruby/1.9/gems/logstash-filter-example-1.0.0"
第三步,編寫配置檔案,test.conf

input

}filter

}output

}

第四步,輸入logstash -f test.conf時,輸入任意字元,回車~~~大功告成!

是不是,沒有想象中的那麼難?要想要熟練的編寫更複雜的外掛程式,還需要多看官方外掛程式的原始碼!

1 how to write a logstash filter plugin

手把手教你OA選型

oa選型永遠是oa行業的重要焦點,在選型問題上困擾了很多客戶,雲全oa從這幾個方面教你如何選型。了解研發技術 技術是硬道理。只有過關的技術才會研發出過硬的產品。如果技術不過關,後期將會帶來一系列的問題。同時需要考慮技術的先進性。在現如今社會發展日新月異,今天還遙遙領先的管理模式也許明天就會被淘汰。所...

手把手教你玩轉git

使用以上來寫git命令。mkdir xx 建立乙個空目錄 xx指目錄名 pwd 顯示當前目錄的路徑。git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。git add xx 把xx檔案新增到暫存區去。git commit m xx 提交檔案 m 後面的是注釋。git sta...

npm發布 手把手教你

註冊完畢,回到我們的電腦。windows直接cmd到命令列 輸入以下命令,會提示輸入使用者名稱 密碼 郵箱,這些都是註冊時填寫過的。發布之前首先準備 手動建立乙個命名為lib的資料夾,手動建立index.js package.sjon和typing.d.ts文件,建立完成之後就開始下一步,向裡面新增...