logstash-perftool 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.rspec +3 -0
- data/CONTRIBUTORS +11 -0
- data/Gemfile +3 -0
- data/LICENSE +13 -0
- data/README.md +119 -0
- data/Rakefile +10 -0
- data/bin/lsperfm +9 -0
- data/bin/lsperfm-deps +32 -0
- data/examples/config/complex_syslog.conf +46 -0
- data/examples/config/json_inout_codec.conf +11 -0
- data/examples/config/json_inout_filter.conf +11 -0
- data/examples/config/simple.conf +11 -0
- data/examples/config/simple_grok.conf +13 -0
- data/examples/config/simple_json_out.conf +11 -0
- data/examples/input/apache_log.txt +30 -0
- data/examples/input/json_medium.txt +10 -0
- data/examples/input/simple_10.txt +10 -0
- data/examples/input/syslog_acl_10.txt +10 -0
- data/examples/suite/basic_performance_long.rb +18 -0
- data/examples/suite/basic_performance_quick.rb +18 -0
- data/lib/lsperfm.rb +22 -0
- data/lib/lsperfm/core.rb +81 -0
- data/lib/lsperfm/core/reporter.rb +21 -0
- data/lib/lsperfm/core/run.rb +139 -0
- data/lib/lsperfm/core/stats.rb +64 -0
- data/lib/lsperfm/defaults/config/complex_syslog.conf +46 -0
- data/lib/lsperfm/defaults/config/json_inout_codec.conf +11 -0
- data/lib/lsperfm/defaults/config/json_inout_filter.conf +11 -0
- data/lib/lsperfm/defaults/config/simple.conf +11 -0
- data/lib/lsperfm/defaults/config/simple_grok.conf +13 -0
- data/lib/lsperfm/defaults/config/simple_json_out.conf +11 -0
- data/lib/lsperfm/defaults/input/apache_log.txt +30 -0
- data/lib/lsperfm/defaults/input/json_medium.txt +10 -0
- data/lib/lsperfm/defaults/input/simple_10.txt +10 -0
- data/lib/lsperfm/defaults/input/syslog_acl_10.txt +10 -0
- data/lib/lsperfm/defaults/suite.rb +12 -0
- data/lib/lsperfm/defaults/suite/long.rb +18 -0
- data/lib/lsperfm/defaults/suite/quick.rb +18 -0
- data/lib/lsperfm/version.rb +5 -0
- data/logstash-perftool.gemspec +24 -0
- data/scripts/loader.rb +114 -0
- data/scripts/setup.sh +63 -0
- data/spec/fixtures/basic_suite.rb +4 -0
- data/spec/fixtures/config.yml +4 -0
- data/spec/fixtures/simple.conf +11 -0
- data/spec/fixtures/simple_10.txt +10 -0
- data/spec/fixtures/wrong_config.yml +4 -0
- data/spec/lib/runner_spec.rb +35 -0
- data/spec/lib/suite_spec.rb +51 -0
- data/spec/spec_helper.rb +9 -0
- data/suite.rb +46 -0
- metadata +154 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
83.149.9.216 - - [17/Sep/2014:07:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
2
|
+
83.149.9.216 - - [17/Sep/2014:07:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
3
|
+
83.149.9.216 - - [17/Sep/2014:07:13:44 +0000] "GET /presentations/logstash-monitorama-2013/plugin/highlight/highlight.js HTTP/1.1" 200 26185 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
4
|
+
83.149.9.216 - - [17/Sep/2014:07:13:44 +0000] "GET /presentations/logstash-monitorama-2013/plugin/zoom-js/zoom.js HTTP/1.1" 200 7697 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
5
|
+
83.149.9.216 - - [17/Sep/2014:07:13:45 +0000] "GET /presentations/logstash-monitorama-2013/plugin/notes/notes.js HTTP/1.1" 200 2892 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
6
|
+
83.149.9.216 - - [17/Sep/2014:07:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/sad-medic.png HTTP/1.1" 200 430406 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
7
|
+
83.149.9.216 - - [17/Sep/2014:07:13:45 +0000] "GET /presentations/logstash-monitorama-2013/css/fonts/Roboto-Bold.ttf HTTP/1.1" 200 38720 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
8
|
+
83.149.9.216 - - [17/Sep/2014:07:13:45 +0000] "GET /presentations/logstash-monitorama-2013/css/fonts/Roboto-Regular.ttf HTTP/1.1" 200 41820 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
9
|
+
83.149.9.216 - - [17/Sep/2014:07:13:45 +0000] "GET /presentations/logstash-monitorama-2013/images/frontend-response-codes.png HTTP/1.1" 200 52878 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
10
|
+
83.149.9.216 - - [17/Sep/2014:07:13:43 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1" 200 321631 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
11
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/Dreamhost_logo.svg HTTP/1.1" 200 2126 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
12
|
+
83.149.9.216 - - [17/Sep/2014:07:13:43 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard2.png HTTP/1.1" 200 394967 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
13
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/apache-icon.gif HTTP/1.1" 200 8095 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
14
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/nagios-sms5.png HTTP/1.1" 200 78075 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
15
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/redis.png HTTP/1.1" 200 25230 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
16
|
+
83.149.9.216 - - [17/Sep/2014:07:13:47 +0000] "GET /presentations/logstash-monitorama-2013/images/elasticsearch.png HTTP/1.1" 200 8026 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
17
|
+
83.149.9.216 - - [17/Sep/2014:07:13:47 +0000] "GET /presentations/logstash-monitorama-2013/images/logstashbook.png HTTP/1.1" 200 54662 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
18
|
+
83.149.9.216 - - [17/Sep/2014:07:13:47 +0000] "GET /presentations/logstash-monitorama-2013/images/github-contributions.png HTTP/1.1" 200 34245 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
19
|
+
83.149.9.216 - - [17/Sep/2014:07:13:47 +0000] "GET /presentations/logstash-monitorama-2013/css/print/paper.css HTTP/1.1" 200 4254 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
20
|
+
83.149.9.216 - - [17/Sep/2014:07:13:47 +0000] "GET /presentations/logstash-monitorama-2013/images/1983_delorean_dmc-12-pic-38289.jpeg HTTP/1.1" 200 220562 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
21
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/simple-inputs-filters-outputs.jpg HTTP/1.1" 200 1168622 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
22
|
+
83.149.9.216 - - [17/Sep/2014:07:13:46 +0000] "GET /presentations/logstash-monitorama-2013/images/tiered-outputs-to-inputs.jpg HTTP/1.1" 200 1079983 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
23
|
+
83.149.9.216 - - [17/Sep/2014:07:13:53 +0000] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
|
24
|
+
24.236.252.67 - - [17/Sep/2014:07:14:10 +0000] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0"
|
25
|
+
93.114.45.13 - - [17/Sep/2014:07:14:32 +0000] "GET /articles/dynamic-dns-with-dhcp/ HTTP/1.1" 200 18848 "http://www.google.ro/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.semicomplete.com%2Farticles%2Fdynamic-dns-with-dhcp%2F&ei=W88AU4n9HOq60QXbv4GwBg&usg=AFQjCNEF1X4Rs52UYQyLiySTQxa97ozM4g&bvm=bv.61535280,d.d2k" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
26
|
+
93.114.45.13 - - [17/Sep/2014:07:14:32 +0000] "GET /reset.css HTTP/1.1" 200 1015 "http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
27
|
+
93.114.45.13 - - [17/Sep/2014:07:14:33 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
28
|
+
93.114.45.13 - - [17/Sep/2014:07:14:33 +0000] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
29
|
+
93.114.45.13 - - [17/Sep/2014:07:14:33 +0000] "GET /images/jordan-80.png HTTP/1.1" 200 6146 "http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
30
|
+
93.114.45.13 - - [17/Sep/2014:07:14:33 +0000] "GET /images/web/2009/banner.png HTTP/1.1" 200 52315 "http://www.semicomplete.com/style2.css" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
2
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
3
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
4
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
5
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
6
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
7
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
8
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
9
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
10
|
+
{"_scroll_id":"xxx", "took":5, "timed_out":false, "_shards":{"total":15,"successful":15,"failed":0}, "hits":{"total":1000050, "max_score":1.0, "hits":[{"_index":"logstash2", "_type":"logs", "_id":"AmaqL7VuSWKF-F6N_Gz72g", "_score":1.0, "_source" : {"message":"foobar", "@version":"1", "@timestamp":"2014-05-19T21:08:39.000Z", "host":"colin-mbp13r"} } ] } }
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<164>Oct 26 15:19:25 1.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.3/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
2
|
+
<164>Oct 6 15:20:25 2.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.4/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
3
|
+
<164>Oct 1 15:21:25 3.2.3.4 %ASA-4-106023: Allow tcp src DRAC:10.1.2.5/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
4
|
+
<164>Oct 30 15:22:25 4.2.3.4 %ASA-4-106023: Allow tcp src DRAC:10.1.2.6/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
5
|
+
<164>Oct 26 15:19:25 1.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.3/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
6
|
+
<164>Oct 6 15:20:25 2.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.4/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
7
|
+
<164>Oct 1 15:21:25 3.2.3.4 %ASA-4-106023: Allow tcp src DRAC:10.1.2.5/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
8
|
+
<164>Oct 30 15:22:25 4.2.3.4 %ASA-4-106023: Allow tcp src DRAC:10.1.2.6/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
9
|
+
<164>Oct 26 15:19:25 1.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.3/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
10
|
+
<164>Oct 6 15:20:25 2.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.4/43434 dst outside:192.168.0.1/53 by access-group "acl_drac" [0x0, 0x0]
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module LogStash::PerformanceMeter
|
2
|
+
|
3
|
+
base_dir = File.dirname(__FILE__)
|
4
|
+
|
5
|
+
DEFAULT_SUITE = [ { :name => "simple line in/out", :config => "#{base_dir}/config/simple.conf", :input => "#{base_dir}/input/simple_10.txt", :time => 120 },
|
6
|
+
{ :name => "simple line in/json out", :config => "#{base_dir}/config/simple_json_out.conf", :input => "#{base_dir}/input/simple_10.txt", :time => 120 },
|
7
|
+
{ :name => "json codec in/out", :config => "#{base_dir}/config/json_inout_codec.conf", :input => "#{base_dir}/input/json_medium.txt", :time => 120 },
|
8
|
+
{ :name => "line in/json filter/json out", :config => "#{base_dir}/config/json_inout_filter.conf", :input => "#{base_dir}/input/json_medium.txt", :time => 120 },
|
9
|
+
{ :name => "apache in/json out", :config => "#{base_dir}/config/simple.conf", :input => "#{base_dir}/input/apache_log.txt", :time => 120 },
|
10
|
+
{ :name => "apache in/grok codec/json out", :config => "#{base_dir}/config/simple_grok.conf", :input => "#{base_dir}/input/apache_log.txt", :time => 120 },
|
11
|
+
{ :name => "syslog in/json out", :config => "#{base_dir}/config/complex_syslog.conf", :input => "#{base_dir}/input/syslog_acl_10.txt", :time => 120} ]
|
12
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# format description:
|
2
|
+
# each test can be executed by either target duration using :time => N secs
|
3
|
+
# or by number of events with :events => N
|
4
|
+
#
|
5
|
+
#[
|
6
|
+
# {:name => "simple json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :time => 30},
|
7
|
+
# {:name => "simple json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :events => 50000},
|
8
|
+
#]
|
9
|
+
#
|
10
|
+
[
|
11
|
+
{:name => "simple line in/out", :config => "config/simple.conf", :input => "input/simple_10.txt", :time => 120},
|
12
|
+
{:name => "simple line in/json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :time => 120},
|
13
|
+
{:name => "json codec in/out", :config => "config/json_inout_codec.conf", :input => "input/json_medium.txt", :time => 120},
|
14
|
+
{:name => "line in/json filter/json out", :config => "config/json_inout_filter.conf", :input => "input/json_medium.txt", :time => 120},
|
15
|
+
{:name => "apache in/json out", :config => "config/simple.conf", :input => "input/apache_log.txt", :time => 120},
|
16
|
+
{:name => "apache in/grok codec/json out", :config => "config/simple_grok.conf", :input => "input/apache_log.txt", :time => 120},
|
17
|
+
{:name => "syslog in/json out", :config => "config/complex_syslog.conf", :input => "input/syslog_acl_10.txt", :time => 120},
|
18
|
+
]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# format description:
|
2
|
+
# each test can be executed by either target duration using :time => N secs
|
3
|
+
# or by number of events with :events => N
|
4
|
+
#
|
5
|
+
#[
|
6
|
+
# {:name => "simple json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :time => 30},
|
7
|
+
# {:name => "simple json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :events => 50000},
|
8
|
+
#]
|
9
|
+
#
|
10
|
+
[
|
11
|
+
{:name => "simple line in/out", :config => "config/simple.conf", :input => "input/simple_10.txt", :time => 30},
|
12
|
+
{:name => "simple line in/json out", :config => "config/simple_json_out.conf", :input => "input/simple_10.txt", :time => 30},
|
13
|
+
{:name => "json codec in/out", :config => "config/json_inout_codec.conf", :input => "input/json_medium.txt", :time => 30},
|
14
|
+
{:name => "line in/json filter/json out", :config => "config/json_inout_filter.conf", :input => "input/json_medium.txt", :time => 30},
|
15
|
+
{:name => "apache in/json out", :config => "config/simple.conf", :input => "input/apache_log.txt", :time => 30},
|
16
|
+
{:name => "apache in/grok codec/json out", :config => "config/simple_grok.conf", :input => "input/apache_log.txt", :time => 30},
|
17
|
+
{:name => "syslog in/json out", :config => "config/complex_syslog.conf", :input => "input/syslog_acl_10.txt", :time => 30},
|
18
|
+
]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/lsperfm/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Pere Urbon-Bayes"]
|
6
|
+
gem.email = ["pere.urbon@elastic.co"]
|
7
|
+
gem.description = %q{A performance testing tool for Logstash}
|
8
|
+
gem.summary = %q{With this gem you can run core performance test for your logstash-core pipeline}
|
9
|
+
gem.homepage = "http://logstash.net/"
|
10
|
+
gem.license = "Apache License (2.0)"
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "logstash-perftool"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = LogStash::PerformanceMeter::VERSION
|
17
|
+
|
18
|
+
gem.executables = ["lsperfm", "lsperfm-deps"]
|
19
|
+
|
20
|
+
gem.add_development_dependency "bundler", "~> 1.7"
|
21
|
+
gem.add_development_dependency "rake", "~> 10.0"
|
22
|
+
gem.add_development_dependency "rspec", '~> 3.3', '>= 3.3.0' #(MIT license)
|
23
|
+
|
24
|
+
end
|
data/scripts/loader.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'elasticsearch'
|
4
|
+
require 'csv'
|
5
|
+
|
6
|
+
class Loader
|
7
|
+
|
8
|
+
def initialize(dir = "", debug = false)
|
9
|
+
@dir = dir
|
10
|
+
@debug = debug
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
Dir.entries(@dir).each do |file|
|
15
|
+
absolute_path = File.join(@dir, file)
|
16
|
+
next if File.directory?(absolute_path)
|
17
|
+
load_file!(client, absolute_path)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_index
|
22
|
+
build_index client, index_config
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def client
|
28
|
+
@client ||= Elasticsearch::Client.new log: @debug
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_file!(client, file)
|
32
|
+
props = scrap_props(file)
|
33
|
+
puts "file: #{file} props: #{props}" if @debug
|
34
|
+
CSV.foreach(file, :headers => true) do |row|
|
35
|
+
puts "#{row.class}, #{row.count}, #{row.headers}" if @debug
|
36
|
+
row.headers.each do |header|
|
37
|
+
next if row.headers.first == header
|
38
|
+
content = build_body(row, header, props)
|
39
|
+
id = "#{props[:time]}#{props[:class]}#{content["type"]}#{content["kpi"]}".hash
|
40
|
+
client.index(index: 'logstash-benchmark', type: 'bench', id: id, body: content) rescue puts "failure with #{row}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
puts if @debug
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_body(row, header, props)
|
47
|
+
type = row[0]
|
48
|
+
kpi = header
|
49
|
+
{
|
50
|
+
"class" => props[:class],
|
51
|
+
"type" => type,
|
52
|
+
"ts" => timestamp(props[:time]),
|
53
|
+
"kpi" => kpi,
|
54
|
+
"times" => row[header].to_i,
|
55
|
+
"_source" => "script"
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def timestamp(time)
|
60
|
+
Time.at(time.to_i).strftime("%Y-%m-%dT%H:%M:%S.%3N%z")
|
61
|
+
end
|
62
|
+
|
63
|
+
def scrap_props(file)
|
64
|
+
match = /-(\d*.\d*)_(\d*).csv/.match(file)
|
65
|
+
{:class => match[1], :time => match[2] }
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_index(client, params)
|
69
|
+
client.indices.create index: 'logstash-benchmark', body: params
|
70
|
+
end
|
71
|
+
|
72
|
+
def index_config
|
73
|
+
{:settings => index_settings, :mappings => index_mappings }
|
74
|
+
end
|
75
|
+
|
76
|
+
def index_settings
|
77
|
+
{ analysis: {analyzer: {
|
78
|
+
label: {
|
79
|
+
stopwords: '_none_',
|
80
|
+
type: 'standard'
|
81
|
+
}
|
82
|
+
}}}
|
83
|
+
end
|
84
|
+
|
85
|
+
def index_mappings
|
86
|
+
props = { "name" => { "type" => "string" },
|
87
|
+
"class" => { "type" => "string" },
|
88
|
+
"type" => { "type" => "string", "index" => "not_analyzed" },
|
89
|
+
"kpi" => { "type" => "string", "index" => "not_analyzed" },
|
90
|
+
"ts" => { "type" => "date", "format" => "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "index" => "analyzed" },
|
91
|
+
"times" => { "type" => "integer" } }
|
92
|
+
{ 'bench' => { '_source' => { 'enabled' => true }, 'properties' => props } }
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
@debug = !!ENV['DEBUG']
|
98
|
+
|
99
|
+
## main function
|
100
|
+
if __FILE__ == $0
|
101
|
+
mode = ARGV[0]
|
102
|
+
if "i" == mode
|
103
|
+
puts "Loading the index definition"
|
104
|
+
Loader.new.create_index
|
105
|
+
puts "done"
|
106
|
+
elsif "m" == mode
|
107
|
+
puts "Loading data form the directory"
|
108
|
+
loader = Loader.new(ARGV[1], @debug)
|
109
|
+
loader.run
|
110
|
+
puts "done"
|
111
|
+
else
|
112
|
+
raise Exception.new("IllegalArgument: USAGE: loader [m|i] [path]")
|
113
|
+
end
|
114
|
+
end
|
data/scripts/setup.sh
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
|
4
|
+
|
5
|
+
TODAY=`date +%s`
|
6
|
+
|
7
|
+
VERSIONS=( 1.4.2 1.5.0 1.5.1 1.5.2 )
|
8
|
+
DEST_DIR="workspace"
|
9
|
+
|
10
|
+
mkdir -p $DEST_DIR
|
11
|
+
|
12
|
+
## Download released versions.
|
13
|
+
|
14
|
+
for VERSION in "${VERSIONS[@]}"
|
15
|
+
do
|
16
|
+
|
17
|
+
FILENAME="logstash-$VERSION.tar.gz"
|
18
|
+
SOURCE_FILE="$DEST_DIR/$FILENAME"
|
19
|
+
DOWNLOAD_URL="https://download.elasticsearch.org/logstash/logstash/$FILENAME"
|
20
|
+
|
21
|
+
if [ ! -f $SOURCE_FILE ]; then
|
22
|
+
echo "Downloading $DOWNLOAD_URL"
|
23
|
+
wget $DOWNLOAD_URL -O $SOURCE_FILE
|
24
|
+
tar -xvzf $SOURCE_FILE -C $DEST_DIR
|
25
|
+
fi
|
26
|
+
done
|
27
|
+
|
28
|
+
|
29
|
+
## Bootstrapping the environment
|
30
|
+
rvm use --create jruby-1.7.20@logstash-perfm
|
31
|
+
gem install logstash-perftool
|
32
|
+
|
33
|
+
cd $DEST_DIR
|
34
|
+
## Run the report for each download package
|
35
|
+
for VERSION in "${VERSIONS[@]}"
|
36
|
+
do
|
37
|
+
cd "logstash-$VERSION"
|
38
|
+
rvm use jruby-1.7.20@logstash-perfm
|
39
|
+
lsperfm > "../logstash-$VERSION-$TODAY.log"
|
40
|
+
cd ..
|
41
|
+
done
|
42
|
+
|
43
|
+
## Setup the current codebase
|
44
|
+
rm -rf "logstash"
|
45
|
+
git clone git@github.com:elastic/logstash.git
|
46
|
+
echo "jruby-1.7.20" > "logstash/.ruby-version"
|
47
|
+
echo "logstash-perfm" > "logstash/.ruby-gemset"
|
48
|
+
|
49
|
+
cd logstash
|
50
|
+
|
51
|
+
## Running the benchmarks for each logstash repository branch
|
52
|
+
## of interest.
|
53
|
+
BRANCHES=( master 1.5 )
|
54
|
+
for BRANCH in "${BRANCHES[@]}"
|
55
|
+
do
|
56
|
+
git checkout Gemfile
|
57
|
+
git checkout Gemfile.jruby-1.9.lock
|
58
|
+
git checkout $BRANCH
|
59
|
+
rm -rf vendor
|
60
|
+
rake bootstrap
|
61
|
+
lsperfm-deps
|
62
|
+
lsperfm > "../logstash-branch-$BRANCH-$TODAY.log"
|
63
|
+
done
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LogStash::PerformanceMeter::Runner do
|
4
|
+
|
5
|
+
let(:config) { 'spec/fixtures/simple.conf' }
|
6
|
+
let(:lines) { load_fixture('simple_10.txt').split("\n") }
|
7
|
+
|
8
|
+
let(:events) { 30 }
|
9
|
+
let(:time) { 10 }
|
10
|
+
|
11
|
+
subject (:runner) { LogStash::PerformanceMeter::Runner.new(config) }
|
12
|
+
|
13
|
+
let(:command) { [File.join(Dir.pwd, LogStash::PerformanceMeter::Runner::LOGSTASH_BIN), "-f", "spec/fixtures/simple.conf"]}
|
14
|
+
|
15
|
+
it "invokes the logstash command" do
|
16
|
+
Open3.should_receive(:popen3).with(*command).and_return(true)
|
17
|
+
runner.run(events, 0, lines)
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#execution with number of events" do
|
21
|
+
|
22
|
+
let(:io) { double("io", :puts => true, :flush => true) }
|
23
|
+
subject(:feed) { runner.feed_input_with(events, 0, lines, io) }
|
24
|
+
|
25
|
+
it "feeds in terms of events" do
|
26
|
+
expect(runner).to receive(:feed_input_events).with(io, events, lines, LogStash::PerformanceMeter::Runner::LAST_MESSAGE)
|
27
|
+
runner.feed_input_with(events, 0, lines, io)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "feed the input stream with events.size+1 events" do
|
31
|
+
expect(feed).to eq(events.to_i)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LogStash::PerformanceMeter::Core do
|
4
|
+
|
5
|
+
let(:config) { 'spec/fixtures/config.yml' }
|
6
|
+
let(:logstash_home) { '.' }
|
7
|
+
let(:suite_def) { 'spec/fixtures/basic_suite.rb' }
|
8
|
+
let(:serial_runner) { double('DummySerialRunner') }
|
9
|
+
let(:runner) { LogStash::PerformanceMeter::Runner }
|
10
|
+
|
11
|
+
let(:run_outcome) { { :percentile => [2000] , :elapsed => 100, :events_count => 3000, :start_time => 12 } }
|
12
|
+
subject(:manager) { LogStash::PerformanceMeter::Core.new(suite_def, logstash_home, config, runner) }
|
13
|
+
|
14
|
+
context "with a valid configuration" do
|
15
|
+
before(:each) do
|
16
|
+
expect(serial_runner).to receive(:run).with(0, 5, anything()).ordered { run_outcome }
|
17
|
+
expect(serial_runner).to receive(:run).with(0, 10, anything()).ordered { run_outcome }
|
18
|
+
end
|
19
|
+
context "using a file" do
|
20
|
+
|
21
|
+
it "run each test case in a serial maner" do
|
22
|
+
expect(runner).to receive(:new).with("spec/fixtures/simple.conf", false, logstash_home).twice { serial_runner }
|
23
|
+
manager.run
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
context "without a file" do
|
29
|
+
|
30
|
+
let(:config) { '' }
|
31
|
+
|
32
|
+
it "run each test case as expected" do
|
33
|
+
expect(runner).to receive(:read_input_file).with('simple_10.txt').twice { [] }
|
34
|
+
expect(runner).to receive(:new).with("simple.conf", false, logstash_home).twice { serial_runner }
|
35
|
+
manager.run
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with a wrong configuration" do
|
42
|
+
|
43
|
+
let(:config) { 'spec/fixtures/wrong_config.yml' }
|
44
|
+
|
45
|
+
it "run each test case as expected" do
|
46
|
+
expect(runner).to receive(:new).with("spec/wrong_fixture/simple.conf", false, logstash_home).once { serial_runner }
|
47
|
+
expect { manager.run }.to raise_error(LogStash::PerformanceMeter::ConfigException)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|