logstash-input-nagioscheck 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8ca20ad47c778a45985808bcbf33745f7dc0161e60ff62559cc812038437b678
4
+ data.tar.gz: 704d48106df1f6b9da3bb900f0f9bb89fa54a59d51b61a145080a91fd7183884
5
+ SHA512:
6
+ metadata.gz: fa9abb0d1c8b7b9dff9b6ed822092593646d2c562b6435e879a3af3b6c56c5d36aeabd27427759459a3ab25bff2fb535831d1a94cae84e295caa1eff02ad906e
7
+ data.tar.gz: c68be11d949439c24c44a2259833cb89120b6892e54d4ff1679700a5d214b6a091f9b4829869b5416e922a93bce7ea460a2a5d6fd4a7dfb91692ad3f8065a0ba
@@ -0,0 +1,2 @@
1
+ ## 0.1.0
2
+ - Plugin created with the logstash plugin generator
@@ -0,0 +1,10 @@
1
+ The following is a list of people who have contributed ideas, code, bug
2
+ reports, or in general have helped logstash along its way.
3
+
4
+ Contributors:
5
+ * - jay.greenberg@elastic.co
6
+
7
+ Note: If you've sent us patches, bug reports, or otherwise contributed to
8
+ Logstash, and you aren't on the list above and want to be, please let us know
9
+ and we'll make sure you're here. Contributions from folks like you are what make
10
+ open source awesome.
@@ -0,0 +1,2 @@
1
+ # logstash-input-nagioscheck
2
+ Example input plugin. This should help bootstrap your effort to write your own input plugin!
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
data/LICENSE ADDED
@@ -0,0 +1,11 @@
1
+ Licensed under the Apache License, Version 2.0 (the "License");
2
+ you may not use this file except in compliance with the License.
3
+ You may obtain a copy of the License at
4
+
5
+ http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software
8
+ distributed under the License is distributed on an "AS IS" BASIS,
9
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ See the License for the specific language governing permissions and
11
+ limitations under the License.
@@ -0,0 +1,96 @@
1
+ # Module settings and structure
2
+
3
+ ## settings
4
+
5
+ ### logstash.yml
6
+
7
+ ```
8
+ modules:
9
+ - name: netflow
10
+ var.output.elasticsearch.host: "es.mycloud.com"
11
+ var.output.elasticsearch.user: "foo"
12
+ var.output.elasticsearch.password: "password"
13
+ var.input.tcp.port: 5606
14
+ ```
15
+
16
+ ### command-line
17
+
18
+ ```
19
+ bin/logstash \
20
+ --modules netflow \
21
+ -M "netflow.var.output.elasticsearch.host=es.mycloud.com" \
22
+ -M "netflow.var.output.elasticsearch.user=foo" \
23
+ -M "netflow.var.output.elasticsearch.password=password" \
24
+ -M "netflow.var.input.tcp.port=5606"
25
+ ```
26
+
27
+ ## Current Gem structure
28
+ ```
29
+ GEM File structure
30
+ logstash-module-netflow
31
+ ├── configuration
32
+ │ ├── elasticsearch
33
+ │ │ └── netflow.json
34
+ │ ├── kibana
35
+ │ │ ├── dashboard
36
+ │ │ │ └── netflow.json (contains '["dash1", "dash2"]')
37
+ │ │ │ └── dash1.json ("panelJSON" contains refs to visualization panels 1,2 and search 1)
38
+ │ │ │ └── dash2.json ("panelJSON" contains refs to visualization panel 3 and search 2)
39
+ │ │ ├── index-pattern
40
+ | | | └── netflow.json
41
+ │ │ ├── search
42
+ | | | └── search1.json
43
+ | | | └── search2.json
44
+ │ │ └── vizualization
45
+ | | | └── panel1.json
46
+ | | | └── panel2.json
47
+ | | | └── panel3.json
48
+ │ └── logstash
49
+ │ └── netflow.conf.erb
50
+ ├── lib
51
+ │ └── logstash_registry.rb
52
+ └── logstash-module-netflow.gemspec
53
+ ```
54
+ ## Proposed multi-version Gem structure
55
+ ```
56
+ GEM File structure
57
+ logstash-module-netflow
58
+ ├── configuration
59
+ │ ├── elasticsearch
60
+ │ │ └── netflow.json
61
+ │ ├── kibana
62
+ │ │ ├── dashboard
63
+ │ │ │ └── netflow.json (contains '{"v5.5.0": ["dash1", "dash2"], "v6.0.4": ["dash1", "dash2"]')
64
+ │ │ │ └── v5.5.0
65
+ │ │ │ | └── dash1.json ("panelJSON" contains refs to visualization panels 1,2 and search 1)
66
+ │ │ │ | └── dash2.json ("panelJSON" contains refs to visualization panel 3 and search 2)
67
+ │ │ │ └── v6.0.4
68
+ │ │ │ └── dash1.json ("panelJSON" contains refs to visualization panels 1,2 and search 1)
69
+ │ │ │ └── dash2.json ("panelJSON" contains refs to visualization panel 3 and search 2)
70
+ │ │ ├── index-pattern
71
+ │ │ │ └── v5
72
+ | | | | └── netflow.json
73
+ │ │ │ └── v6
74
+ | | | └── netflow.json
75
+ │ │ ├── search
76
+ │ │ │ └── v5
77
+ | | | | └── search1.json
78
+ | | | | └── search2.json
79
+ │ │ │ └── v6
80
+ | | | └── search1.json
81
+ | | | └── search2.json
82
+ │ │ └── vizualization
83
+ │ │ │ └── v5
84
+ | | | | └── panel1.json
85
+ | | | | └── panel2.json
86
+ | | | | └── panel3.json
87
+ │ │ │ └── v6
88
+ | | | └── panel1.json
89
+ | | | └── panel2.json
90
+ | | | └── panel3.json
91
+ │ └── logstash
92
+ │ └── netflow.conf.erb
93
+ ├── lib
94
+ │ └── logstash_registry.rb
95
+ └── logstash-module-netflow.gemspec
96
+ ```
@@ -0,0 +1,128 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/exec"
3
+ require "logstash/namespace"
4
+ require "stud/interval"
5
+ require "socket" # for Socket.gethostname
6
+ require 'securerandom'
7
+
8
+ # Generate a repeating message.
9
+ #
10
+ # This plugin is intented only as an example.
11
+
12
+ class LogStash::Inputs::Nagioscheck < LogStash::Inputs::Exec
13
+ config_name "nagioscheck"
14
+
15
+ # Name of the check
16
+ config :name, :validate => :string, :required => true
17
+
18
+ # Custom parse failure tag
19
+ config :failure_tag, :validate => :string, :default => "_nagioscheckparsefailure"
20
+
21
+ # Override the execute routine from the exec input
22
+ def execute(queue)
23
+ start = Time.now
24
+ output = exit_status = nil
25
+ begin
26
+ @logger.debug? && @logger.debug("Running exec", :command => @command)
27
+ output, exit_status = run_command()
28
+ rescue StandardError => e
29
+ @logger.error("Error while running command",
30
+ :command => @command, :e => e, :backtrace => e.backtrace)
31
+ rescue Exception => e
32
+ @logger.error("Exception while running command",
33
+ :command => @command, :e => e, :backtrace => e.backtrace)
34
+ end
35
+ duration = Time.now - start
36
+ unless exit_status.nil? #exit status will be nil if the command never completed running
37
+ @logger.debug? && @logger.debug("Command completed", :command => @command, :duration => duration)
38
+ @codec.decode(output) do |event|
39
+ decorate(event)
40
+
41
+ cmd_message, cmd_perf = event.get("message").split('|')
42
+
43
+ event.set("check_uuid", SecureRandom.uuid)
44
+
45
+ unless cmd_perf.nil?
46
+ cmd_perf.strip.split_by_spaces_except_single_quoted.each { |metric|
47
+
48
+ results = parse_performance(metric)
49
+
50
+ if results.nil?
51
+
52
+ @logger.warn("Error parsing nagios performance data (malformed)", :raw => event.get("message"))
53
+ event.tag(@failure_tag)
54
+
55
+ else
56
+
57
+ perf_event = event.clone
58
+ perf_event.remove("message")
59
+
60
+ perf_event.set("type", "nagiosmetric")
61
+ perf_event.set("name", @name)
62
+ perf_event.set("label", results[1])
63
+ perf_event.set("uom", results[3])
64
+ perf_event.set("value", results[2].to_f)
65
+ perf_event.set("warning", results[4].to_f)
66
+ perf_event.set("critical", results[5].to_f)
67
+ perf_event.set("min", results[6].to_f)
68
+ perf_event.set("max", results[7].to_f)
69
+
70
+ queue << perf_event
71
+
72
+ end
73
+
74
+ }
75
+ end
76
+
77
+ event.set("host", @hostname)
78
+ event.set("command", @command)
79
+ event.set("type", "nagioscheck")
80
+ event.set("message", cmd_message.nil? ? "" : cmd_message.strip)
81
+ event.set("name", @name)
82
+ event.set("took_ms", duration * 1000)
83
+ event.set("status_code", exit_status)
84
+ event.set("status", nice_status(exit_status))
85
+
86
+ queue << event
87
+
88
+ end
89
+ end
90
+ duration
91
+ end
92
+
93
+ end # class LogStash::Inputs::Nagioscheck
94
+
95
+ class String
96
+ def split_by_spaces_except_single_quoted
97
+ self.split(/\s(?=(?:[^']|'[^']*')*$)/)
98
+ end
99
+ end
100
+
101
+ def nice_status(status)
102
+ case status
103
+ when 0
104
+ return "OK"
105
+ when 1
106
+ return "WARNING"
107
+ when 2
108
+ return "CRITICAL"
109
+ when 3
110
+ return "UNKNOWN"
111
+ else
112
+ return "INVALID STATUS"
113
+ end
114
+ end
115
+
116
+
117
+ def parse_performance(perf)
118
+
119
+ # As per https://github.com/nagios-plugins/nagios-plugin-perl/blob/master/lib/Nagios/Monitoring/Plugin/Performance.pm
120
+
121
+ value = /[-+]?[\d\.,]+/
122
+ value_re = /#{value}(?:e#{value})?/
123
+ value_with_negative_infinity = /#{value_re}|~/
124
+
125
+ regex = /^'?([^'=]+)'?=(#{value_re})([\w%]*);?(#{value_with_negative_infinity}\:?#{value_re}?)?;?(#{value_with_negative_infinity}\:?#{value_re}?)?;?(#{value_re})?;?(#{value_re})?/o
126
+ regex.match(perf)
127
+
128
+ end
@@ -0,0 +1,4 @@
1
+ require "logstash/inputs/nagioscheck"
2
+
3
+ LogStash::PLUGIN_REGISTRY.add(:modules, "nagios", LogStash::Modules::Scaffold.new("nagios", File.join(File.dirname(__FILE__), "..", "module")))
4
+ LogStash::PLUGIN_REGISTRY.add(:input, "nagios", LogStash::Inputs::Nagioscheck)
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-input-nagioscheck'
3
+ s.version = '0.1.0'
4
+ s.licenses = ['Apache-2.0']
5
+ s.summary = 'Logstash NagiosCheck Filter'
6
+ s.description = 'Parses the output of Nagios Checks (via exec input)'
7
+ s.homepage = 'http://www.elastic.co'
8
+ s.authors = ['Jay Greenberg']
9
+ s.email = 'jay.greenberg@elastic.co'
10
+ s.require_paths = ['lib']
11
+
12
+ # Files
13
+ s.files = Dir['lib/**/*','module/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
14
+ # Tests
15
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
+
17
+ # Special flag to let us know this is actually a logstash plugin
18
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
19
+
20
+ # Gem dependencies
21
+ s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
22
+ s.add_runtime_dependency 'logstash-codec-plain'
23
+ s.add_runtime_dependency 'logstash-input-exec', ">= 3.3.0"
24
+ s.add_runtime_dependency 'stud', '>= 0.0.22'
25
+ s.add_development_dependency 'logstash-devutils', '>= 0.0.16'
26
+ s.add_development_dependency 'logstash-input-exec', ">= 3.3.0"
27
+ end
@@ -0,0 +1,99 @@
1
+ {
2
+ "mappings": {
3
+ "doc": {
4
+ "_meta": {
5
+ "version": "6.2.0"
6
+ },
7
+ "properties": {
8
+ "@timestamp": {
9
+ "type": "date"
10
+ },
11
+ "@version": {
12
+ "type": "keyword",
13
+ "ignore_above": 256
14
+ },
15
+ "check_uuid": {
16
+ "type": "keyword",
17
+ "ignore_above": 256
18
+ },
19
+ "command": {
20
+ "type": "text",
21
+ "fields": {
22
+ "keyword": {
23
+ "type": "keyword",
24
+ "ignore_above": 256
25
+ }
26
+ }
27
+ },
28
+ "critical": {
29
+ "type": "float"
30
+ },
31
+ "host": {
32
+ "type": "keyword",
33
+ "ignore_above": 256
34
+ },
35
+ "label": {
36
+ "type": "text",
37
+ "fields": {
38
+ "keyword": {
39
+ "type": "keyword",
40
+ "ignore_above": 256
41
+ }
42
+ }
43
+ },
44
+ "max": {
45
+ "type": "float"
46
+ },
47
+ "message": {
48
+ "type": "text",
49
+ "fields": {
50
+ "keyword": {
51
+ "type": "keyword",
52
+ "ignore_above": 256
53
+ }
54
+ }
55
+ },
56
+ "min": {
57
+ "type": "float"
58
+ },
59
+ "name": {
60
+ "type": "keyword",
61
+ "ignore_above": 256
62
+ },
63
+ "status": {
64
+ "type": "keyword",
65
+ "ignore_above": 256
66
+ },
67
+ "status_code": {
68
+ "type": "long"
69
+ },
70
+ "tags": {
71
+ "type": "keyword",
72
+ "ignore_above": 256
73
+ },
74
+ "took_ms": {
75
+ "type": "float"
76
+ },
77
+ "type": {
78
+ "type": "keyword",
79
+ "ignore_above": 256
80
+ },
81
+ "uom": {
82
+ "type": "keyword",
83
+ "ignore_above": 256
84
+ },
85
+ "value": {
86
+ "type": "float"
87
+ },
88
+ "warning": {
89
+ "type": "float"
90
+ }
91
+ }
92
+ }
93
+ },
94
+ "order": 0,
95
+ "settings": {
96
+ "index.refresh_interval": "5s"
97
+ },
98
+ "template": "nagios-*"
99
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "title": "Nagios Overview",
3
+ "hits": 0,
4
+ "description": "",
5
+ "panelsJSON": "[{\"panelIndex\":\"1\",\"gridData\":{\"x\":3,\"y\":0,\"w\":9,\"h\":3,\"i\":\"1\"},\"id\":\"d602cb70-52d1-11e8-8d6e-5ded8718dfbd\",\"type\":\"visualization\",\"version\":\"6.2.3\"},{\"panelIndex\":\"3\",\"gridData\":{\"x\":6,\"y\":3,\"w\":6,\"h\":3,\"i\":\"3\"},\"embeddableConfig\":{\"table\":{\"sort\":{\"column\":\"7fa9c650-52d3-11e8-a1cd-61c073d732d5\",\"order\":\"desc\"}}},\"id\":\"e1b3e380-52d3-11e8-8d6e-5ded8718dfbd\",\"type\":\"visualization\",\"version\":\"6.2.3\"},{\"panelIndex\":\"5\",\"gridData\":{\"x\":0,\"y\":0,\"w\":3,\"h\":3,\"i\":\"5\"},\"embeddableConfig\":{\"vis\":{\"colors\":{\"Critical\":\"#F29191\",\"OK\":\"#B7DBAB\",\"Warning\":\"#F4D598\"},\"legendOpen\":false}},\"id\":\"e6d01410-52d8-11e8-8d6e-5ded8718dfbd\",\"type\":\"visualization\",\"version\":\"6.2.3\"},{\"panelIndex\":\"6\",\"gridData\":{\"x\":0,\"y\":3,\"w\":6,\"h\":3,\"i\":\"6\"},\"id\":\"7b67a110-52d9-11e8-8d6e-5ded8718dfbd\",\"type\":\"visualization\",\"version\":\"6.2.3\"}]",
6
+ "optionsJSON": "{\"darkTheme\":false,\"hidePanelTitles\":false,\"useMargins\":true}",
7
+ "version": 1,
8
+ "timeRestore": false,
9
+ "kibanaSavedObjectMeta": {
10
+ "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}"
11
+ }
12
+ }
13
+
@@ -0,0 +1 @@
1
+ ["Nagios Overview"]
@@ -0,0 +1,5 @@
1
+ {
2
+ "title": "nagios-*",
3
+ "timeFieldName": "@timestamp",
4
+ "fields": "[{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"check_uuid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"command\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"command.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"critical\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"label\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"label.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"max\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"message.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"min\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"status\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"status_code\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"took_ms\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"uom\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"value\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"warning\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]"
5
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "title": "Status Overview By Host",
3
+ "visState": "{\"title\":\"Status Overview By Host\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"table\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"filters\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\",\"field\":\"name\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"bar\",\"line_width\":\"0\",\"point_size\":1,\"fill\":\"0.5\",\"stacked\":\"stacked\",\"terms_field\":\"label.keyword\",\"label\":\"OK\",\"filter\":\"status:OK\",\"split_filters\":[{\"filter\":\"status: OK\",\"label\":\"OK\",\"color\":\"#68BC00\",\"id\":\"b6262af0-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: WARNING\",\"label\":\"WARNING\",\"color\":\"rgba(252,220,0,1)\",\"id\":\"b9c91b40-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: CRITICAL\",\"label\":\"CRITICAL\",\"color\":\"rgba(244,78,59,1)\",\"id\":\"c95387d0-52d0-11e8-a1cd-61c073d732d5\"}],\"split_color_mode\":\"gradient\",\"hide_in_legend\":0,\"color_rules\":[{\"value\":0,\"id\":\"7eae92e0-52d2-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(52,199,64,1)\",\"opperator\":\"gt\"}],\"offset_time\":\"\",\"value_template\":\"\"},{\"id\":\"50dd0800-52d3-11e8-a1cd-61c073d732d5\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"50dd0801-52d3-11e8-a1cd-61c073d732d5\",\"type\":\"count\",\"field\":\"name\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"WARNING\",\"color_rules\":[{\"value\":0,\"id\":\"702721f0-52d3-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(236,214,44,1)\",\"opperator\":\"gt\"}],\"filter\":\"status:WARNING\",\"offset_time\":\"\",\"value_template\":\"\"},{\"id\":\"7fa9c650-52d3-11e8-a1cd-61c073d732d5\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"7fa9c651-52d3-11e8-a1cd-61c073d732d5\",\"type\":\"count\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"CRITICAL\",\"color_rules\":[{\"value\":0,\"id\":\"9c22bee0-52d3-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(255,2,16,1)\",\"opperator\":\"gt\"}],\"filter\":\"status:CRITICAL\",\"offset_time\":\"\",\"value_template\":\"\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"nagios*\",\"interval\":\"10m\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":0,\"gauge_color_rules\":[{\"id\":\"6bbfd790-52d0-11e8-a1cd-61c073d732d5\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"bar_color_rules\":[{\"id\":\"42bc8120-52d2-11e8-a1cd-61c073d732d5\"}],\"background_color_rules\":[{\"id\":\"4d7a4a70-52d2-11e8-a1cd-61c073d732d5\"}],\"pivot_id\":\"host\",\"pivot_label\":\"Status in the Last 10 Minutes\",\"markdown\":\"{{warning.last.raw}}\",\"pivot_rows\":\"100\",\"drop_last_bucket\":0},\"aggs\":[]}",
4
+ "uiStateJSON": "{}",
5
+ "description": "",
6
+ "version": 1,
7
+ "kibanaSavedObjectMeta": {
8
+ "searchSourceJSON": "{}"
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "title": "Status Overview",
3
+ "visState": "{\"title\":\"Status Overview\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"filters\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"cardinality\",\"field\":\"name\"},{\"id\":\"ee99b260-52d2-11e8-a1cd-61c073d732d5\",\"type\":\"count\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"bar\",\"line_width\":\"0\",\"point_size\":1,\"fill\":\"0.5\",\"stacked\":\"stacked\",\"terms_field\":\"label.keyword\",\"label\":\"OK\",\"filter\":\"\",\"split_filters\":[{\"filter\":\"status: OK\",\"label\":\"OK\",\"color\":\"#68BC00\",\"id\":\"b6262af0-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: WARNING\",\"label\":\"WARNING\",\"color\":\"rgba(252,220,0,1)\",\"id\":\"b9c91b40-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: CRITICAL\",\"label\":\"CRITICAL\",\"color\":\"rgba(244,78,59,1)\",\"id\":\"c95387d0-52d0-11e8-a1cd-61c073d732d5\"}],\"split_color_mode\":\"gradient\",\"hide_in_legend\":0,\"color_rules\":[{\"id\":\"7eae92e0-52d2-11e8-a1cd-61c073d732d5\"}]}],\"time_field\":\"@timestamp\",\"index_pattern\":\"nagios*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":0,\"gauge_color_rules\":[{\"id\":\"6bbfd790-52d0-11e8-a1cd-61c073d732d5\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"bar_color_rules\":[{\"id\":\"42bc8120-52d2-11e8-a1cd-61c073d732d5\"}],\"background_color_rules\":[{\"id\":\"4d7a4a70-52d2-11e8-a1cd-61c073d732d5\"}],\"pivot_id\":\"name\",\"pivot_label\":\"Name\",\"markdown\":\"{{warning.last.raw}}\"},\"aggs\":[]}",
4
+ "uiStateJSON": "{}",
5
+ "description": "",
6
+ "version": 1,
7
+ "kibanaSavedObjectMeta": {
8
+ "searchSourceJSON": "{}"
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "title": "Status Overview By Service",
3
+ "visState": "{\"title\":\"Status Overview By Service\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"table\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"filters\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\",\"field\":\"name\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"bar\",\"line_width\":\"0\",\"point_size\":1,\"fill\":\"0.5\",\"stacked\":\"stacked\",\"terms_field\":\"label.keyword\",\"label\":\"OK\",\"filter\":\"status:OK\",\"split_filters\":[{\"filter\":\"status: OK\",\"label\":\"OK\",\"color\":\"#68BC00\",\"id\":\"b6262af0-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: WARNING\",\"label\":\"WARNING\",\"color\":\"rgba(252,220,0,1)\",\"id\":\"b9c91b40-52d0-11e8-a1cd-61c073d732d5\"},{\"filter\":\"status: CRITICAL\",\"label\":\"CRITICAL\",\"color\":\"rgba(244,78,59,1)\",\"id\":\"c95387d0-52d0-11e8-a1cd-61c073d732d5\"}],\"split_color_mode\":\"gradient\",\"hide_in_legend\":0,\"color_rules\":[{\"value\":0,\"id\":\"7eae92e0-52d2-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(52,199,64,1)\",\"opperator\":\"gt\"}],\"offset_time\":\"\",\"value_template\":\"\"},{\"id\":\"50dd0800-52d3-11e8-a1cd-61c073d732d5\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"50dd0801-52d3-11e8-a1cd-61c073d732d5\",\"type\":\"count\",\"field\":\"name\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"WARNING\",\"color_rules\":[{\"value\":0,\"id\":\"702721f0-52d3-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(236,214,44,1)\",\"opperator\":\"gt\"}],\"filter\":\"status:WARNING\",\"offset_time\":\"\",\"value_template\":\"\"},{\"id\":\"7fa9c650-52d3-11e8-a1cd-61c073d732d5\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"7fa9c651-52d3-11e8-a1cd-61c073d732d5\",\"type\":\"count\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"CRITICAL\",\"color_rules\":[{\"value\":0,\"id\":\"9c22bee0-52d3-11e8-a1cd-61c073d732d5\",\"text\":\"rgba(255,2,16,1)\",\"opperator\":\"gt\"}],\"filter\":\"status:CRITICAL\",\"offset_time\":\"\",\"value_template\":\"\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"nagios*\",\"interval\":\"10m\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":0,\"gauge_color_rules\":[{\"id\":\"6bbfd790-52d0-11e8-a1cd-61c073d732d5\"}],\"gauge_width\":10,\"gauge_inner_width\":10,\"gauge_style\":\"half\",\"bar_color_rules\":[{\"id\":\"42bc8120-52d2-11e8-a1cd-61c073d732d5\"}],\"background_color_rules\":[{\"id\":\"4d7a4a70-52d2-11e8-a1cd-61c073d732d5\"}],\"pivot_id\":\"name\",\"pivot_label\":\"Status in the Last 10 Minutes\",\"markdown\":\"{{warning.last.raw}}\",\"pivot_rows\":\"100\",\"drop_last_bucket\":0},\"aggs\":[]}",
4
+ "uiStateJSON": "{}",
5
+ "description": "",
6
+ "version": 1,
7
+ "kibanaSavedObjectMeta": {
8
+ "searchSourceJSON": "{}"
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "title": "Status of All Hosts",
3
+ "visState": "{\"title\":\"Status of All Hosts\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":false,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"host\",\"customLabel\":\"Hosts\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"filters\",\"schema\":\"segment\",\"params\":{\"filters\":[{\"input\":{\"query\":\"status:OK\"},\"label\":\"OK\"},{\"input\":{\"query\":\"status:CRITICAL\"},\"label\":\"Critical\"},{\"input\":{\"query\":\"status:WARNING\"},\"label\":\"Warning\"}]}}]}",
4
+ "uiStateJSON": "{\"vis\":{\"colors\":{\"Critical\":\"#F29191\",\"OK\":\"#B7DBAB\",\"Warning\":\"#F4D598\"}}}",
5
+ "description": "",
6
+ "version": 1,
7
+ "kibanaSavedObjectMeta": {
8
+ "searchSourceJSON": "{\"index\":\"nagios-*\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}"
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ input {
2
+ nagioscheck {
3
+ name => "my_dummy_check"
4
+ command => "/usr/local/sbin/check_dummy 0 Hello"
5
+ interval => "10"
6
+ }
7
+ }
8
+ output {
9
+ <%= elasticsearch_output_config() %>
10
+ }
@@ -0,0 +1,238 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require "logstash/inputs/nagioscheck"
4
+
5
+
6
+ describe LogStash::Inputs::Nagioscheck do
7
+
8
+ it_behaves_like "an interruptible input plugin" do
9
+ let(:config) { { "name" => "my_load_check", "command" => "/usr/local/sbin/check_load -w 1,2,3 -c 4,5,6", "interval" => 100 } }
10
+ end
11
+
12
+
13
+ context "when we simulate certain output 1" do
14
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_load_check", "command" => "echo 'Everything OK | load1=0.010;5.000;9.000;0; load5=0.060;5.000;9.000;0; load15=2.010;5.000;9.000;0;'", "interval" => 0) }
15
+ let(:queue) { [] }
16
+
17
+ before do
18
+ input.register
19
+ input.execute(queue)
20
+ end
21
+
22
+ after do
23
+ input.stop
24
+ end
25
+
26
+ it "it parses out properly" do
27
+ expect(queue.length).to eq 4
28
+
29
+ expect(queue[0].get("value")).to eq 0.01
30
+
31
+ expect(queue[1].get("value")).to eq 0.06
32
+ expect(queue[1].get("label")).to eq "load5"
33
+
34
+ expect(queue[2].get("value")).to eq 2.01
35
+
36
+ expect(queue[3].get("message")).to eq "Everything OK"
37
+ expect(queue[3].get("status")).to eq "OK"
38
+ expect(queue[3].get("took_ms")).to be > 0
39
+
40
+ end
41
+
42
+ end
43
+
44
+ context "when we simulate certain output 2" do
45
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_check", "command" => "echo 'Everything OK | users=4;20;50;0'", "interval" => 0) }
46
+ let(:queue) { [] }
47
+
48
+ before do
49
+ input.register
50
+ input.execute(queue)
51
+ end
52
+
53
+ after do
54
+ input.stop
55
+ end
56
+
57
+ it "it parses out properly" do
58
+
59
+ expect(queue.length).to eq 2
60
+
61
+ expect(queue[0].get("value")).to eq 4
62
+ expect(queue[0].get("warning")).to eq 20
63
+ expect(queue[0].get("critical")).to eq 50
64
+ expect(queue[0].get("min")).to eq 0
65
+
66
+ expect(queue[1].get("message")).to eq "Everything OK"
67
+ expect(queue[1].get("status")).to eq "OK"
68
+ expect(queue[1].get("took_ms")).to be > 0
69
+
70
+ end
71
+
72
+ end
73
+
74
+
75
+
76
+
77
+ context "when we simulate certain output 3 - quoted strings" do
78
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_check", "command" => "echo 'Some Disk Data | /home/a-m=0;0;0 '\"'\"'i have spaces'\"'\"'=20 '\"'\"'12345678901234567890'\"'\"'=20'", "interval" => 0) }
79
+ let(:queue) { [] }
80
+
81
+ before do
82
+ input.register
83
+ input.execute(queue)
84
+ end
85
+
86
+ after do
87
+ input.stop
88
+ end
89
+
90
+ it "it parses out properly" do
91
+
92
+ expect(queue.length).to eq 4
93
+
94
+ expect(queue[0].get("label")).to eq "/home/a-m"
95
+ expect(queue[0].get("value")).to eq 0
96
+ expect(queue[0].get("warning")).to eq 0
97
+ expect(queue[0].get("critical")).to eq 0
98
+ expect(queue[1].get("label")).to eq "i have spaces"
99
+ expect(queue[1].get("value")).to eq 20
100
+ expect(queue[2].get("label")).to eq "12345678901234567890"
101
+ expect(queue[2].get("value")).to eq 20
102
+
103
+ expect(queue[3].get("status")).to eq "OK"
104
+
105
+ end
106
+
107
+ end
108
+
109
+ context "when we simulate certain output 4" do
110
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_uom_check", "command" => "echo 'Some Float Parsing with Uom | time=0.002722s;0.000000;0.000000;0.000000;10.000000'", "interval" => 0) }
111
+ let(:queue) { [] }
112
+
113
+ before do
114
+ input.register
115
+ input.execute(queue)
116
+ end
117
+
118
+ after do
119
+ input.stop
120
+ end
121
+
122
+ it "it parses out properly" do
123
+
124
+ expect(queue.length).to eq 2
125
+
126
+ expect(queue[0].get("label")).to eq "time"
127
+ expect(queue[0].get("value")).to eq 0.002722
128
+ expect(queue[0].get("uom")).to eq "s"
129
+ expect(queue[0].get("max")).to eq 10
130
+
131
+ end
132
+
133
+ end
134
+
135
+
136
+ context "when we simulate malformed output" do
137
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_broken_plugin", "failure_tag" => "i_must_appear", "command" => "echo 'Some Status | invalid;perf data'", "interval" => 0) }
138
+ let(:queue) { [] }
139
+
140
+ before do
141
+ input.register
142
+ input.execute(queue)
143
+ end
144
+
145
+ after do
146
+ input.stop
147
+ end
148
+
149
+ it "it tags with parse failure" do
150
+ expect(queue[0].get("tags")).to include("i_must_appear")
151
+ end
152
+
153
+ end
154
+
155
+ context "when we have a string in the perf data" do
156
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_broken_plugin", "failure_tag" => "i_must_appear", "command" => "echo 'String in perf data is parsed as 0| time=0.002722s;0.000000;string;0.000000;10.000000'", "interval" => 0) }
157
+ let(:queue) { [] }
158
+
159
+ before do
160
+ input.register
161
+ input.execute(queue)
162
+ end
163
+
164
+ after do
165
+ input.stop
166
+ end
167
+
168
+ it "it parses it as 0" do
169
+ expect(queue[0].get("critical")).to eq 0
170
+ end
171
+
172
+ end
173
+
174
+
175
+ context "when we have empty output" do
176
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_broken_plugin", "failure_tag" => "i_must_appear", "command" => "echo ''", "interval" => 0) }
177
+ let(:queue) { [] }
178
+
179
+ before do
180
+ input.register
181
+ input.execute(queue)
182
+ end
183
+
184
+ after do
185
+ input.stop
186
+ end
187
+
188
+ it "it's ignored" do
189
+ expect(queue[0].get("status")).to eq "OK"
190
+ end
191
+
192
+ end
193
+
194
+ context "when a real check runs" do
195
+ let(:input) { LogStash::Plugin.lookup("input", "nagioscheck").new("name" => "my_load_check", "command" => "/usr/local/sbin/check_load -w 0,2,3 -c 0,5,6", "interval" => 0) }
196
+ let(:queue) { [] }
197
+
198
+ before do
199
+ input.register
200
+ input.execute(queue)
201
+ end
202
+
203
+ after do
204
+ input.stop
205
+ end
206
+
207
+ it "it parses out properly" do
208
+
209
+ expect(queue[0].get('type')).to eq "nagiosmetric"
210
+ expect(queue[0].get('name')).to eq "my_load_check"
211
+ expect(queue[0].get('label')).to eq "load1"
212
+ expect(queue[0].get('warning')).to eq 0
213
+ expect(queue[0].get('critical')).to eq 0
214
+ expect(queue[0].get('min')).to eq 0
215
+
216
+ expect(queue[1].get('label')).to eq "load5"
217
+ expect(queue[1].get('warning')).to eq 2
218
+ expect(queue[1].get('critical')).to eq 5
219
+ expect(queue[1].get('min')).to eq 0
220
+
221
+ expect(queue[2].get('label')).to eq "load15"
222
+ expect(queue[2].get('warning')).to eq 3
223
+ expect(queue[2].get('critical')).to eq 6
224
+ expect(queue[2].get('min')).to eq 0
225
+
226
+ expect(queue[3].get('message')).not_to be_nil
227
+ expect(queue[3].get('message')).to include("load average")
228
+ expect(queue[3].get('status')).to eq "CRITICAL"
229
+ expect(queue[3].get('name')).to eq "my_load_check"
230
+ expect(queue[3].get('took_ms')).to be > 0
231
+ expect(queue[3].get('type')).to eq "nagioscheck"
232
+
233
+ end
234
+
235
+
236
+ end
237
+
238
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-nagioscheck
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jay Greenberg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ name: logstash-core-plugin-api
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ name: logstash-codec-plain
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.3.0
47
+ name: logstash-input-exec
48
+ prerelease: false
49
+ type: :runtime
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 3.3.0
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.0.22
61
+ name: stud
62
+ prerelease: false
63
+ type: :runtime
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.22
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.0.16
75
+ name: logstash-devutils
76
+ prerelease: false
77
+ type: :development
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.0.16
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.3.0
89
+ name: logstash-input-exec
90
+ prerelease: false
91
+ type: :development
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.3.0
97
+ description: Parses the output of Nagios Checks (via exec input)
98
+ email: jay.greenberg@elastic.co
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - CHANGELOG.md
104
+ - CONTRIBUTORS
105
+ - DEVELOPER.md
106
+ - Gemfile
107
+ - LICENSE
108
+ - README.md
109
+ - lib/logstash/inputs/nagioscheck.rb
110
+ - lib/logstash_registry.rb
111
+ - logstash-input-nagioscheck.gemspec
112
+ - module/elasticsearch/nagios.json
113
+ - module/kibana/6.x/dashboard/Nagios Overview.json
114
+ - module/kibana/6.x/dashboard/nagios.json
115
+ - module/kibana/6.x/index-pattern/nagios.json
116
+ - module/kibana/6.x/visualization/7b67a110-52d9-11e8-8d6e-5ded8718dfbd.json
117
+ - module/kibana/6.x/visualization/d602cb70-52d1-11e8-8d6e-5ded8718dfbd.json
118
+ - module/kibana/6.x/visualization/e1b3e380-52d3-11e8-8d6e-5ded8718dfbd.json
119
+ - module/kibana/6.x/visualization/e6d01410-52d8-11e8-8d6e-5ded8718dfbd.json
120
+ - module/logstash/nagios.conf.erb
121
+ - spec/inputs/nagioscheck_spec.rb
122
+ homepage: http://www.elastic.co
123
+ licenses:
124
+ - Apache-2.0
125
+ metadata:
126
+ logstash_plugin: 'true'
127
+ logstash_group: input
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 2.6.13
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: Logstash NagiosCheck Filter
148
+ test_files:
149
+ - spec/inputs/nagioscheck_spec.rb