observed-logstash 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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +78 -0
- data/Rakefile +1 -0
- data/features/observe_404_counts_using_elasticsearch.feature +31 -0
- data/features/support/env.rb +8 -0
- data/lib/observed/logstash.rb +81 -0
- data/lib/observed/logstash/version.rb +5 -0
- data/observed-logstash.gemspec +32 -0
- data/spec/fixtures/observed.conf +12 -0
- data/spec/integration_spec.rb +33 -0
- data/spec/logstash_spec.rb +129 -0
- data/spec/spec_helper.rb +25 -0
- metadata +205 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e005dcc11482579c3f276584704d1fcc079d8dc
|
4
|
+
data.tar.gz: a083fe5f0232256bcc4c30430741b488555bce73
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 95579163f7d1ee17ab9b84992db83d19ae9c9d4ff0b1b2509fd86cecf4de1a5a7d00e6d7a54618a1b19458c2f0dc1581af341f5f08bc056327ce8e84197cf5bb
|
7
|
+
data.tar.gz: dd64751c5f2f269baba128f574e8a5ba4e16d78b46f32b0f809c7b9ebf858d67b3eeae745b47e27cd124e21871bad4adc60bf6f1ad6a6f8de09f78aa7f81ef6b
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 GREE, Inc.
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Observed::Logstash
|
2
|
+
|
3
|
+
Allows you to use the number of results returned by an Elasticsearch query as an [Observed](https://github.com/gree/observed) healthcheck.
|
4
|
+
|
5
|
+
Expected use case is searching server logs stored in Logstash format.
|
6
|
+
|
7
|
+
You provide an Elasticsearch query and a timespan, and the plugin will search for logs that match your query. If there are too few hits, or too many, it will record an error event.
|
8
|
+
|
9
|
+
## Example use cases
|
10
|
+
|
11
|
+
* If your web server returned more than X "500 Internal Server Error" responses in the last few minutes, it's probably unhealthy.
|
12
|
+
|
13
|
+
* If it returned fewer than Y "200 OK" responses in the last few minutes, it's probably unhealthy.
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
gem 'observed-logstash'
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install observed-logstash
|
28
|
+
|
29
|
+
## Test
|
30
|
+
|
31
|
+
Some tests expect an Elasticsearch instance to be running on Localhost.
|
32
|
+
|
33
|
+
$ git clone https://github.com/cb372/observed-logstash.git
|
34
|
+
$ cd observed-logstash
|
35
|
+
$ bundle install
|
36
|
+
$ elasticsearch
|
37
|
+
$ bundle exec rspec
|
38
|
+
|
39
|
+
## Usage
|
40
|
+
|
41
|
+
### Configuration parameters
|
42
|
+
|
43
|
+
<table>
|
44
|
+
<tr><th>Name</th><th>Required?</th><th>Default value</th><th>Description</th></tr>
|
45
|
+
<tr><td>host</td><td>No</td><td>localhost:9200</td><td>ES server hostname and port</td></tr>
|
46
|
+
<tr><td>index_name_format</td><td>No</td><td>logstash-%Y.%m.%d (Logstash daily format)</td><td>Naming format of ES indices</td></tr>
|
47
|
+
<tr><td>query</td><td>Yes</td><td></td><td>A hash representing an ES query, e.g. { :term => { :status => 404 } }</td></tr>
|
48
|
+
<tr><td>timespan_in_seconds</td><td>Yes</td><td></td><td>Search for logs from the last N seconds</td></tr>
|
49
|
+
<tr><td>max_hits</td><td>No</td><td>1000000</td><td>Maximum number of matching logs in the last N seconds. If there are more than these, an error will be recorded.</td></tr>
|
50
|
+
<tr><td>min_hits</td><td>No</td><td>0</td><td></td></tr>
|
51
|
+
</table>
|
52
|
+
|
53
|
+
### Example configuration
|
54
|
+
|
55
|
+
````ruby
|
56
|
+
observe 'myapp.404', via: 'logstash', with: {
|
57
|
+
host: 'localhost:9200',
|
58
|
+
index_name_format: 'observed-logstash-test-%Y.%m.%d',
|
59
|
+
query: { :term => { :status => 404 } },
|
60
|
+
timespan_in_seconds: 3600,
|
61
|
+
max_hits: 10
|
62
|
+
}
|
63
|
+
````
|
64
|
+
|
65
|
+
### Example reporting
|
66
|
+
|
67
|
+
````ruby
|
68
|
+
report /myapp.404/, via: 'stdout', with: {
|
69
|
+
format: -> tag, time, data {
|
70
|
+
case data[:status]
|
71
|
+
when :success
|
72
|
+
"Looks OK! #{data[:message]}"
|
73
|
+
else
|
74
|
+
"Oh noes! #{data[:message]}"
|
75
|
+
end
|
76
|
+
}
|
77
|
+
}
|
78
|
+
````
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: Check the number of 404 errors using an Elasticsearch query
|
2
|
+
|
3
|
+
In order to observe the number of Apache logs with status code 404 using Observed,
|
4
|
+
I want to the observed-logstash plugin to perform an Elasticsearch query,
|
5
|
+
check the number of search results, and report the result via reporters
|
6
|
+
|
7
|
+
Scenario: Create a .rb file containing Observed code and run it with the ruby command
|
8
|
+
Given a file named "test.rb" with:
|
9
|
+
"""
|
10
|
+
require 'observed'
|
11
|
+
require 'observed/logstash'
|
12
|
+
|
13
|
+
include Observed
|
14
|
+
|
15
|
+
observe 'foo_1', via: 'logstash', with: {
|
16
|
+
host: 'localhost:9200',
|
17
|
+
query: { :term => { :status => 404 } },
|
18
|
+
timespan_in_seconds: 60,
|
19
|
+
max_results: 10,
|
20
|
+
timeout_in_milliseconds: 1000
|
21
|
+
}
|
22
|
+
|
23
|
+
report /foo_\d+/, via: 'stdout'
|
24
|
+
|
25
|
+
run 'foo_1'
|
26
|
+
"""
|
27
|
+
When I run `ruby test.rb`
|
28
|
+
Then the output should contain:
|
29
|
+
"""
|
30
|
+
foo_1.success
|
31
|
+
"""
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'observed/logstash/version'
|
2
|
+
require 'observed/observer'
|
3
|
+
require 'observed/observer_helpers/timer'
|
4
|
+
require 'elasticsearch'
|
5
|
+
|
6
|
+
module Observed
|
7
|
+
module Plugins
|
8
|
+
class Logstash < Observed::Observer
|
9
|
+
|
10
|
+
attribute :host, default: 'localhost:9200'
|
11
|
+
attribute :index_name_format, default: 'logstash-%Y.%m.%d'
|
12
|
+
attribute :query
|
13
|
+
attribute :timespan_in_seconds
|
14
|
+
attribute :max_hits, default: 1000000
|
15
|
+
attribute :min_hits, default: 0
|
16
|
+
|
17
|
+
def build_client
|
18
|
+
Elasticsearch::Client.new host: host
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_timestamp_filter
|
22
|
+
{
|
23
|
+
:range => {
|
24
|
+
:@timestamp => {
|
25
|
+
:from => (system.now.to_f * 1000).to_i - (1000 * timespan_in_seconds),
|
26
|
+
:to => (system.now.to_f * 1000).to_i
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def build_body
|
33
|
+
{
|
34
|
+
:query => query,
|
35
|
+
:filter => build_timestamp_filter
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_data(hits)
|
40
|
+
data = { hits: hits, min_hits: min_hits, max_hits: max_hits }
|
41
|
+
if hits < min_hits
|
42
|
+
data[:status] = :error
|
43
|
+
data[:message] = "Not enough hits. Only #{hits} in the last #{timespan_in_seconds} seconds, required at least #{min_hits}"
|
44
|
+
elsif hits > max_hits
|
45
|
+
data[:status] = :error
|
46
|
+
data[:message] = "Too many hits. Got #{hits} in the last #{timespan_in_seconds} seconds, required at most #{max_hits}"
|
47
|
+
else
|
48
|
+
data[:status] = :success
|
49
|
+
data[:message] = "#{hits} hits in the last #{timespan_in_seconds} seconds"
|
50
|
+
end
|
51
|
+
|
52
|
+
data
|
53
|
+
end
|
54
|
+
|
55
|
+
def observe
|
56
|
+
logger.debug "Host: #{host}, index name format: #{index_name_format}, query: [#{query}], timespan: #{timespan_in_seconds}s, max hits: #{max_hits}, min hits: #{min_hits}"
|
57
|
+
|
58
|
+
index = system.now.strftime(index_name_format)
|
59
|
+
body = build_body
|
60
|
+
|
61
|
+
logger.debug "Index: #{index}, Body: #{body}"
|
62
|
+
|
63
|
+
client = build_client
|
64
|
+
response = client.search :index => index,
|
65
|
+
:body => body
|
66
|
+
hits = response['hits']['total'].to_i
|
67
|
+
logger.debug("Hits: #{hits}")
|
68
|
+
|
69
|
+
data = build_data(hits)
|
70
|
+
system.report("#{self.tag}.#{data[:status]}", data)
|
71
|
+
end
|
72
|
+
|
73
|
+
def logger
|
74
|
+
@logger ||= Logger.new(STDOUT)
|
75
|
+
end
|
76
|
+
|
77
|
+
plugin_name 'logstash'
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'observed/logstash/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "observed-logstash"
|
8
|
+
spec.version = Observed::Logstash::VERSION
|
9
|
+
spec.authors = ["Chris Birchall"]
|
10
|
+
spec.email = ["chris.birchall@gmail.com"]
|
11
|
+
spec.description = %q{observed-logstash}
|
12
|
+
spec.summary = %q{observed-logstash is a plugin for Observed that runs an Elasticsearch query and checks the number of results as a sign of healthiness.}
|
13
|
+
spec.homepage = "https://github.com/cb372/observed-logstash"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "observed", "~> 0.1.0"
|
22
|
+
spec.add_dependency "elasticsearch", "~> 0.4.1"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "mocha"
|
28
|
+
spec.add_development_dependency "fakefs"
|
29
|
+
spec.add_development_dependency "simplecov"
|
30
|
+
spec.add_development_dependency "cucumber"
|
31
|
+
spec.add_development_dependency "aruba"
|
32
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'observed/builtin_plugins'
|
2
|
+
require 'observed/logstash'
|
3
|
+
|
4
|
+
observe 'myapp.404', via: 'logstash', with: {
|
5
|
+
host: 'localhost:9200',
|
6
|
+
index_name_format: 'observed-logstash-test-%Y.%m.%d',
|
7
|
+
query: { :term => { :status => 404 } },
|
8
|
+
timespan_in_seconds: 3600,
|
9
|
+
max_hits: 10
|
10
|
+
}
|
11
|
+
|
12
|
+
report /myapp.404/, via: 'stdout'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'observed/application/oneshot'
|
4
|
+
require 'elasticsearch'
|
5
|
+
|
6
|
+
describe Observed::Application::Oneshot do
|
7
|
+
subject {
|
8
|
+
Observed::Application::Oneshot.create(
|
9
|
+
config_file: 'spec/fixtures/observed.conf'
|
10
|
+
)
|
11
|
+
}
|
12
|
+
|
13
|
+
let(:index_name) {
|
14
|
+
Time.now.strftime('observed-logstash-test-%Y.%m.%d')
|
15
|
+
}
|
16
|
+
|
17
|
+
let(:client) {
|
18
|
+
Elasticsearch::Client.new
|
19
|
+
}
|
20
|
+
|
21
|
+
before do
|
22
|
+
client.indices.create :index => index_name
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'initializes' do
|
26
|
+
expect(subject.run.size).not_to eq(0)
|
27
|
+
end
|
28
|
+
|
29
|
+
after do
|
30
|
+
client.indices.delete :index => index_name
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'observed/logstash'
|
4
|
+
require 'elasticsearch'
|
5
|
+
|
6
|
+
describe Observed::Plugins::Logstash do
|
7
|
+
|
8
|
+
subject {
|
9
|
+
Observed::Plugins::Logstash.new
|
10
|
+
}
|
11
|
+
|
12
|
+
before {
|
13
|
+
subject.configure config
|
14
|
+
}
|
15
|
+
|
16
|
+
let(:config) {
|
17
|
+
{
|
18
|
+
host: 'localhost:9200',
|
19
|
+
index_name_format: 'apache_myapp-%Y.%m.%d',
|
20
|
+
query: { :term => { :status => 404 } },
|
21
|
+
timespan_in_seconds: 3600,
|
22
|
+
min_hits: 5,
|
23
|
+
max_hits: 10,
|
24
|
+
tag: 'foo',
|
25
|
+
system: sys
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
let(:sys) {
|
30
|
+
sys = mock('system')
|
31
|
+
sys.stubs(:now).returns(now)
|
32
|
+
sys
|
33
|
+
}
|
34
|
+
|
35
|
+
let(:now) {
|
36
|
+
Time.at(1384333117)
|
37
|
+
}
|
38
|
+
|
39
|
+
let(:now_millis) {
|
40
|
+
now.to_i * 1000
|
41
|
+
}
|
42
|
+
|
43
|
+
let(:one_hour_ago_millis) {
|
44
|
+
now_millis - (3600 * 1000)
|
45
|
+
}
|
46
|
+
|
47
|
+
let(:client) {
|
48
|
+
mock('client')
|
49
|
+
}
|
50
|
+
|
51
|
+
context 'when not enough hits' do
|
52
|
+
before {
|
53
|
+
client.stubs(:search).returns({ "hits" => { "total" => 4 } })
|
54
|
+
subject.stubs(:build_client).returns(client)
|
55
|
+
|
56
|
+
sys.expects(:report).with('foo.error', {
|
57
|
+
hits: 4,
|
58
|
+
min_hits: 5,
|
59
|
+
max_hits: 10,
|
60
|
+
status: :error,
|
61
|
+
message: 'Not enough hits. Only 4 in the last 3600 seconds, required at least 5'
|
62
|
+
})
|
63
|
+
}
|
64
|
+
|
65
|
+
it 'reports an error' do
|
66
|
+
expect { subject.observe }.to_not raise_error
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when too many hits' do
|
71
|
+
before {
|
72
|
+
client.stubs(:search).returns({ "hits" => { "total" => 11 } })
|
73
|
+
subject.stubs(:build_client).returns(client)
|
74
|
+
|
75
|
+
sys.expects(:report).with('foo.error', {
|
76
|
+
hits: 11,
|
77
|
+
min_hits: 5,
|
78
|
+
max_hits: 10,
|
79
|
+
status: :error,
|
80
|
+
message: 'Too many hits. Got 11 in the last 3600 seconds, required at most 10'
|
81
|
+
})
|
82
|
+
}
|
83
|
+
|
84
|
+
it 'reports an error' do
|
85
|
+
expect { subject.observe }.to_not raise_error
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when not too many or too few hits' do
|
90
|
+
before {
|
91
|
+
client.stubs(:search).returns({ "hits" => { "total" => 10 } })
|
92
|
+
subject.stubs(:build_client).returns(client)
|
93
|
+
|
94
|
+
sys.expects(:report).with('foo.success', {
|
95
|
+
hits: 10,
|
96
|
+
min_hits: 5,
|
97
|
+
max_hits: 10,
|
98
|
+
status: :success,
|
99
|
+
message: '10 hits in the last 3600 seconds'
|
100
|
+
})
|
101
|
+
}
|
102
|
+
|
103
|
+
it 'reports success' do
|
104
|
+
expect { subject.observe }.to_not raise_error
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'when searching' do
|
109
|
+
before {
|
110
|
+
client.stubs(:search).returns({ "hits" => { "total" => 10 } })
|
111
|
+
subject.stubs(:build_client).returns(client)
|
112
|
+
}
|
113
|
+
|
114
|
+
it 'searches the correct index and constructs query correctly' do
|
115
|
+
expect { client.search :index => 'apache_myapp-2013.11.13',
|
116
|
+
:body => {
|
117
|
+
:query => { :term => { :status => 404 } },
|
118
|
+
:filter => { @timestamp => {
|
119
|
+
:from => one_hour_ago_millis,
|
120
|
+
:to => now_millis
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'fakefs/spec_helpers'
|
2
|
+
require 'rspec'
|
3
|
+
|
4
|
+
Dir["#{File.expand_path('..', __FILE__)}/support/**/*.rb"].each { |f| require f }
|
5
|
+
|
6
|
+
puts "Please do not update/create files while tests are running."
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.color_enabled = true
|
10
|
+
config.order = :random
|
11
|
+
config.filter_run :focus => true
|
12
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
13
|
+
config.run_all_when_everything_filtered = true
|
14
|
+
|
15
|
+
config.before(:each) do
|
16
|
+
@fixture_path = Pathname.new(File.expand_path('../fixtures/', __FILE__))
|
17
|
+
end
|
18
|
+
|
19
|
+
config.mock_framework = :mocha
|
20
|
+
end
|
21
|
+
|
22
|
+
if RUBY_VERSION =~ /^1.9/
|
23
|
+
require 'simplecov'
|
24
|
+
SimpleCov.start
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: observed-logstash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Birchall
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: observed
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: elasticsearch
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.4.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mocha
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fakefs
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: cucumber
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: aruba
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: observed-logstash
|
154
|
+
email:
|
155
|
+
- chris.birchall@gmail.com
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- .gitignore
|
161
|
+
- Gemfile
|
162
|
+
- LICENSE.txt
|
163
|
+
- README.md
|
164
|
+
- Rakefile
|
165
|
+
- features/observe_404_counts_using_elasticsearch.feature
|
166
|
+
- features/support/env.rb
|
167
|
+
- lib/observed/logstash.rb
|
168
|
+
- lib/observed/logstash/version.rb
|
169
|
+
- observed-logstash.gemspec
|
170
|
+
- spec/fixtures/observed.conf
|
171
|
+
- spec/integration_spec.rb
|
172
|
+
- spec/logstash_spec.rb
|
173
|
+
- spec/spec_helper.rb
|
174
|
+
homepage: https://github.com/cb372/observed-logstash
|
175
|
+
licenses:
|
176
|
+
- MIT
|
177
|
+
metadata: {}
|
178
|
+
post_install_message:
|
179
|
+
rdoc_options: []
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 2.0.3
|
195
|
+
signing_key:
|
196
|
+
specification_version: 4
|
197
|
+
summary: observed-logstash is a plugin for Observed that runs an Elasticsearch query
|
198
|
+
and checks the number of results as a sign of healthiness.
|
199
|
+
test_files:
|
200
|
+
- features/observe_404_counts_using_elasticsearch.feature
|
201
|
+
- features/support/env.rb
|
202
|
+
- spec/fixtures/observed.conf
|
203
|
+
- spec/integration_spec.rb
|
204
|
+
- spec/logstash_spec.rb
|
205
|
+
- spec/spec_helper.rb
|