Skip to content

Instantly share code, notes, and snippets.

@okkez
Created March 20, 2018 03:28
filter_grep benchmark
require_relative "../lib/fluent/load"
require_relative "../lib/fluent/plugin/filter_grep"
require_relative "../lib/fluent/test"
require_relative "../lib/fluent/test/driver/filter"
require "benchmark"
def create_driver(conf = '')
Fluent::Test::Driver::Filter.new(Fluent::Plugin::GrepFilter).configure(conf)
end
@time = Fluent::EventTime.now
def filter(d, messages)
d.run do
messages.each do |message|
d.feed("filter.test", time, message)
end
end
d.filtered_records
end
Fluent::Test.setup
conf = %[
<and>
<regexp>
key level
pattern ^ERROR|WARN$
</regexp>
<regexp>
key method
pattern ^GET|POST$
</regexp>
</and>
<or>
<exclude>
key level
pattern ^WARN$
</exclude>
<exclude>
key method
pattern ^GET$
</exclude>
</or>
]
messages = [
{ "time" => "2013/01/13T07:02:11.124202", "level" => "INFO", "method" => "GET", "path" => "/ping" },
{ "time" => "2013/01/13T07:02:13.232645", "level" => "WARN", "method" => "POST", "path" => "/auth" },
{ "time" => "2013/01/13T07:02:21.542145", "level" => "WARN", "method" => "GET", "path" => "/favicon.ico" },
{ "time" => "2013/01/13T07:02:43.632145", "level" => "WARN", "method" => "POST", "path" => "/login" },
]
N = 100_000
Benchmark.bm do |x|
x.report do
d1 = create_driver(conf)
d1.run do
N.times do
messages.each do |message|
d1.feed("filter.test", @time, message)
end
end
end
end
end
@okkez
Copy link
Author

okkez commented Mar 20, 2018

          user     system      total        real
new   2.427028   0.000255   2.427283 (  2.435108)
old   2.497610   0.004182   2.501792 (  2.507315)

Run benchmark against old version and new version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment