logstash-output-sentry 0.3.1 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -1
- data/CONTRIBUTORS +5 -4
- data/LICENSE +0 -2
- data/README.md +26 -52
- data/lib/logstash/outputs/sentry.rb +108 -105
- data/logstash-output-sentry.gemspec +9 -9
- data/spec/outputs/sentry_spec.rb +14 -15
- metadata +33 -22
- data/DEVELOPER.md +0 -1
- data/NOTICE.TXT +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d73e9557eb60015f472332b61f32e288f4f8b9a4
|
4
|
+
data.tar.gz: 6dcfda94126f45d97dfca5871f2612f99c8c08c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a70cb4ed11f81caeb9fdbc6d8648ab961c5ca41a04b27a66e54288c9b110f56e6e3923737a8931cca4acb4889a9d7d1365a8765a126798d61725b343e6123947
|
7
|
+
data.tar.gz: 86887aa98d9a6b328647c6d4e8b6bf16dc36a89ca11fde27fa1cfad655d564fbaaa187e901cd7f23f5ca94db3dffeb886cc4ca0c77522d4eac58cb42a83cb005
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,16 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 0.4.1
|
4
|
+
- Fixing versions for development dependencies.
|
5
|
+
|
6
|
+
## 0.4.0
|
7
|
+
- Implements the full sentry interface.
|
8
|
+
|
1
9
|
## 0.2.0
|
2
10
|
- Improving sentry.rb script based on antho31/logstash-output-sentry and bigpandaio/logstash-output-sentry projects.
|
3
11
|
- Creating documentation (starting from bigpandaio/logstash-output-sentry with some fixes for the differences that we have introduced to the code).
|
12
|
+
|
4
13
|
## 0.1.0
|
5
|
-
- Starting project from clarkdave/logstash-sentry.rb
|
14
|
+
- Starting project from clarkdave/logstash-sentry.rb.
|
6
15
|
- Packing script in a gem so it can be easily installed.
|
7
16
|
- Adding parameters so that we can use the plugin to send data to our own sentry server.
|
data/CONTRIBUTORS
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
The following is a list of people who have contributed ideas, code, bug
|
2
|
-
reports, or in general have helped
|
2
|
+
reports, or in general have helped this plugin along its way.
|
3
3
|
|
4
4
|
Contributors:
|
5
5
|
* Javier Matos Odut (javiermatos)
|
6
|
+
# Julian Rüth (saraedum)
|
6
7
|
|
7
|
-
Note: If you've sent us patches, bug reports, or otherwise contributed to
|
8
|
-
|
9
|
-
|
8
|
+
Note: If you've sent us patches, bug reports, or otherwise contributed to this
|
9
|
+
plugin, and you aren't on the list above and want to be, please let us know and
|
10
|
+
we'll make sure you're here. Contributions from folks like you are what make
|
10
11
|
open source awesome.
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ You must have [Logstash](https://github.com/elasticsearch/logstash) installed fo
|
|
18
18
|
As this plugin has been shared on [RubyGems](https://rubygems.org) with the name [logstash-output-sentry](https://rubygems.org/gems/logstash-output-sentry) you can install it using the following command from your Logstash installation path:
|
19
19
|
|
20
20
|
```sh
|
21
|
-
bin/plugin install logstash-output-sentry
|
21
|
+
bin/logstash-plugin install logstash-output-sentry
|
22
22
|
```
|
23
23
|
|
24
24
|
When installing from official repository as suggested below, the installation path is `/opt/logstash`.
|
@@ -34,70 +34,48 @@ It fits somewhere in-between a simple metrics solution (such as Graphite) and a
|
|
34
34
|
[http|https]://[key]:[secret]@[host]/[project_id]
|
35
35
|
```
|
36
36
|
|
37
|
-
*
|
37
|
+
* Setup logstash to write to sentry:
|
38
38
|
```ruby
|
39
39
|
output {
|
40
40
|
sentry {
|
41
41
|
'key' => "yourkey"
|
42
|
-
'secret' => "
|
42
|
+
'secret' => "yoursecret"
|
43
43
|
'project_id' => "yourprojectid"
|
44
44
|
}
|
45
45
|
}
|
46
46
|
```
|
47
47
|
|
48
|
-
*
|
48
|
+
* By default, the plugin connects to https://app.getsentry.com/api. Set the `url` if you have installed Sentry on your own machine:
|
49
49
|
```ruby
|
50
50
|
output {
|
51
51
|
sentry {
|
52
|
-
'
|
53
|
-
'use_ssl' => false
|
54
|
-
'project_id' => "yourprojectid"
|
52
|
+
'url' => "http://local.sentry:9000/api"
|
55
53
|
'key' => "yourkey"
|
56
|
-
'secret' => "
|
54
|
+
'secret' => "yoursecret"
|
55
|
+
'project_id' => "yourprojectid"
|
57
56
|
}
|
58
57
|
}
|
59
58
|
```
|
60
59
|
|
61
|
-
*
|
62
|
-
```ruby
|
63
|
-
sentry {
|
64
|
-
'project_id' => "1"
|
65
|
-
'key' => "87e60914d35a4394a69acc3b6d15d061"
|
66
|
-
'secret' => "596d005d20274474991a2fb8c33040b8"
|
67
|
-
'msg' => "msg_field"
|
68
|
-
}
|
69
|
-
```
|
60
|
+
* If you don't configure anything else, the necessary fields will be set automatically, i.e., `event_id`, `timestamp` (set to `@timestamp`), `logger` (set to `"logstash"`) and `platform` (set to `"other"`). All the other fields from logstash are going to be put into the `extra` field in sentry. Additionally, the `level` is set to `"error"` and the `server_name` to the value of `host`.
|
70
61
|
|
71
|
-
*
|
62
|
+
* The plugin can write to all the fields that the sentry interface currently supports, i.e., `timestamp`, `message`, `logger`, `platform`, `sdk`, `level`, `culprit`, `server_name`, `release`, `tags`, `environment`, `modules`, `extra`, `fingerprint`, `exception`, `sentry.interface.Message`, `stacktrace`, `template`, `breadcrumbs`, `contexts`, `request`, `threads`, `user`, `debug_meta`, `repos`, `sdk`. To set a field, you can either read the value from another field or set it to a constant value by setting the corresponding `_value`:
|
72
63
|
```ruby
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
'msg' => "Message you want"
|
80
|
-
'level_tag' => "fatal"
|
81
|
-
'fields_to_tags' => true
|
82
|
-
}
|
83
|
-
```
|
64
|
+
output {
|
65
|
+
sentry {
|
66
|
+
'message' => "message" # sets message to the contents of the message field
|
67
|
+
'environment' => "[tag][Environment]" # sets message to the contents of the field Environment in tag
|
68
|
+
'exception' => "[@metadata][sentry][exception]" # sets exception to the metadata field, see below for a complete example
|
69
|
+
'user_value' => "nobody" # sets the user to the constant "nobody"
|
84
70
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
'use_ssl' => false
|
90
|
-
'project_id' => "1"
|
91
|
-
'key' => "87e60914d35a4394a69acc3b6d15d061"
|
92
|
-
'secret' => "596d005d20274474991a2fb8c33040b8"
|
93
|
-
'msg' => "Message you want"
|
94
|
-
'level_tag' => "fatal"
|
95
|
-
'fields_to_tags' => true
|
96
|
-
'strim_timestamp' => true
|
71
|
+
'key' => "yourkey"
|
72
|
+
'secret' => "yoursecret"
|
73
|
+
'project_id' => "yourprojectid"
|
74
|
+
}
|
97
75
|
}
|
98
76
|
```
|
99
77
|
|
100
|
-
* You can also
|
78
|
+
* You can also prepare the settings in a filter to create a cleaner config:
|
101
79
|
```ruby
|
102
80
|
input {
|
103
81
|
syslog {
|
@@ -154,17 +132,13 @@ filter {
|
|
154
132
|
}
|
155
133
|
}
|
156
134
|
output {
|
157
|
-
elasticsearch {
|
158
|
-
hosts => ["192.168.1.200:9200"]
|
159
|
-
document_type => "%{type}"
|
160
|
-
}
|
161
135
|
sentry {
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
msg => "[@metadata][sentry][msg]"
|
136
|
+
server_name => "[@metadata][sentry][host]"
|
137
|
+
level => "[@metadata][sentry][severity]"
|
138
|
+
message => "[@metadata][sentry][msg]"
|
139
|
+
|
167
140
|
project_id => "%{[@metadata][sentry][pid]}"
|
141
|
+
key => "%{[@metadata][sentry][key]}"
|
168
142
|
secret => "%{[@metadata][sentry][secret]}"
|
169
143
|
}
|
170
144
|
}
|
@@ -174,4 +148,4 @@ output {
|
|
174
148
|
|
175
149
|
All contributions are welcome: ideas, patches, documentation, bug reports, complaints, and even something you drew up on a napkin.
|
176
150
|
|
177
|
-
Note that this plugin has been written from [this
|
151
|
+
Note that this plugin has been written from [this Gist](https://gist.github.com/clarkdave/edaab9be9eaa9bf1ee5f).
|
@@ -3,145 +3,148 @@ require 'logstash/outputs/base'
|
|
3
3
|
require 'logstash/namespace'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
-
# Sentry is a modern error logging and aggregation platform.
|
7
|
-
# * https://getsentry.com/
|
8
|
-
#
|
9
|
-
# It’s important to note that Sentry should not be thought of as a log stream, but as an aggregator.
|
10
|
-
# It fits somewhere in-between a simple metrics solution (such as Graphite) and a full-on log stream aggregator (like Logstash).
|
11
|
-
#
|
12
|
-
# Generate and inform your client key (Settings -> Client key)
|
13
|
-
# The client key has this form * https://[key]:[secret]@[host]/[project_id] *
|
14
|
-
#
|
15
|
-
# More informations :
|
16
|
-
# * https://sentry.readthedocs.org/en/latest/
|
17
|
-
|
18
|
-
|
19
6
|
class LogStash::Outputs::Sentry < LogStash::Outputs::Base
|
20
|
-
|
21
7
|
config_name 'sentry'
|
8
|
+
concurrency :shared
|
22
9
|
|
23
|
-
#
|
24
|
-
config :
|
25
|
-
|
26
|
-
# Sentry host
|
27
|
-
config :host, :validate => :string, :required => true, :default => 'app.getsentry.com'
|
10
|
+
# Sentry API URL
|
11
|
+
config :url, :validate => :uri, :required => false, :default => 'https://app.getsentry.com/api'
|
28
12
|
|
29
13
|
# Project id, key and secret
|
30
14
|
config :project_id, :validate => :string, :required => true
|
31
15
|
config :key, :validate => :string, :required => true
|
32
16
|
config :secret, :validate => :string, :required => true
|
33
17
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
# This sets the level value in Sentry (the level tag), allow usage of event dynamic value
|
38
|
-
config :level_tag, :validate => :string, :default => 'error'
|
39
|
-
|
40
|
-
# If set to true automatically map all logstash defined fields to Sentry extra fields.
|
41
|
-
# As an example, the logstash event:
|
42
|
-
# [source,ruby]
|
43
|
-
# {
|
44
|
-
# "@timestamp": "2013-12-10T14:36:26.151+0000",
|
45
|
-
# "@version": 1,
|
46
|
-
# "message": "log message",
|
47
|
-
# "host": "host.domain.com",
|
48
|
-
# "nested_field": {
|
49
|
-
# "key": "value"
|
50
|
-
# }
|
51
|
-
# }
|
52
|
-
# Is mapped to this Sentry event:
|
53
|
-
# [source,ruby]
|
54
|
-
# extra {
|
55
|
-
# "@timestamp": "2013-12-10T14:36:26.151+0000",
|
56
|
-
# "@version": 1,
|
57
|
-
# "message": "log message",
|
58
|
-
# "host": "host.domain.com",
|
59
|
-
# "nested_field": {
|
60
|
-
# "key": "value"
|
61
|
-
# }
|
62
|
-
# }
|
63
|
-
config :fields_to_tags, :validate => :boolean, :default => false, :required => false
|
64
|
-
|
65
|
-
# Remove timestamp from message (title) if the message starts with a timestamp
|
66
|
-
config :strip_timestamp, :validate => :boolean, :default => false, :required => false
|
67
|
-
|
68
|
-
public
|
69
|
-
def register
|
70
|
-
#I took this out becuase it fails when I try sending in the project_id or host as part of the event for a dynamic config
|
71
|
-
# require 'net/https'
|
72
|
-
# require 'uri'
|
18
|
+
def self.sentry_key(name, field_default=nil, value_default=nil)
|
19
|
+
name = name.to_s if name.is_a?(Symbol)
|
73
20
|
|
74
|
-
|
75
|
-
|
21
|
+
@sentry_keys ||= []
|
22
|
+
@sentry_keys << name
|
76
23
|
|
77
|
-
|
78
|
-
|
79
|
-
|
24
|
+
opts = {
|
25
|
+
:validate => :string,
|
26
|
+
:required => false,
|
27
|
+
}
|
80
28
|
|
81
|
-
|
29
|
+
config name, opts.merge(if field_default then {:default => field_default} else {} end)
|
30
|
+
config "#{name}_value", opts.merge(if value_default then {:default => value_default} else {} end)
|
82
31
|
end
|
32
|
+
class << self; attr_accessor :sentry_keys end
|
33
|
+
# https://docs.sentry.io/clientdev/attributes/
|
34
|
+
sentry_key :timestamp, field_default='@timestamp'
|
35
|
+
sentry_key :message
|
36
|
+
sentry_key :_logger
|
37
|
+
sentry_key :platform
|
38
|
+
sentry_key :sdk
|
39
|
+
sentry_key :level, value_default='error'
|
40
|
+
sentry_key :culprit
|
41
|
+
sentry_key :server_name, field_default='host'
|
42
|
+
sentry_key :release
|
43
|
+
sentry_key :tags
|
44
|
+
sentry_key :environment
|
45
|
+
sentry_key :modules
|
46
|
+
sentry_key :extra, field_default='' # puts all fields into extra
|
47
|
+
sentry_key :fingerprint
|
48
|
+
# https://docs.sentry.io/clientdev/interfaces/exception/
|
49
|
+
sentry_key :exception
|
50
|
+
# https://docs.sentry.io/clientdev/interfaces/message/
|
51
|
+
sentry_key :"sentry.interfaces.Message"
|
52
|
+
# https://docs.sentry.io/clientdev/interfaces/stacktrace/
|
53
|
+
sentry_key :stacktrace
|
54
|
+
# https://docs.sentry.io/clientdev/interfaces/template/
|
55
|
+
sentry_key :template
|
56
|
+
# https://docs.sentry.io/clientdev/interfaces/breadcrumbs/
|
57
|
+
sentry_key :breadcrumbs
|
58
|
+
# https://docs.sentry.io/clientdev/interfaces/contexts/
|
59
|
+
sentry_key :contexts
|
60
|
+
# https://docs.sentry.io/clientdev/interfaces/http/
|
61
|
+
sentry_key :request
|
62
|
+
# https://docs.sentry.io/clientdev/interfaces/threads/
|
63
|
+
sentry_key :threads
|
64
|
+
# https://docs.sentry.io/clientdev/interfaces/user/
|
65
|
+
sentry_key :user
|
66
|
+
# https://docs.sentry.io/clientdev/interfaces/debug/
|
67
|
+
sentry_key :debug_meta
|
68
|
+
# https://docs.sentry.io/clientdev/interfaces/repos/
|
69
|
+
sentry_key :repos
|
70
|
+
# https://docs.sentry.io/clientdev/interfaces/sdk/
|
71
|
+
sentry_key :sdk
|
83
72
|
|
84
73
|
public
|
85
|
-
def
|
86
|
-
|
87
|
-
require 'uri'
|
88
|
-
|
89
|
-
url = "%{proto}://#{event.sprintf(@host)}/api/#{event.sprintf(@project_id)}/store/" % { :proto => use_ssl ? 'https' : 'http' }
|
90
|
-
uri = URI.parse(url)
|
74
|
+
def register
|
75
|
+
end
|
91
76
|
|
92
|
-
|
93
|
-
|
94
|
-
client.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
77
|
+
def get(event, key)
|
78
|
+
key = key.to_s if key.is_a?(Symbol)
|
95
79
|
|
96
|
-
|
80
|
+
instance_variable_name = key.gsub(/\./, '')
|
97
81
|
|
98
|
-
|
82
|
+
field = instance_variable_get("@#{instance_variable_name}")
|
83
|
+
if field == ''
|
84
|
+
ret = event.to_hash
|
85
|
+
ret.delete('tags')
|
86
|
+
return ret
|
87
|
+
elsif field
|
88
|
+
return event.get(field) if event.get(field)
|
89
|
+
end
|
99
90
|
|
100
|
-
|
91
|
+
value = instance_variable_get("@#{instance_variable_name}_value")
|
92
|
+
return value # can be nil
|
93
|
+
end
|
101
94
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
#remove timestamp from message if available
|
106
|
-
message_matched = message_to_send.match(/\d\d\d\d\-\d\d\-\d\d\s[0-9]{1,2}\:\d\d\:\d\d,\d{1,}\s(.*)/)
|
107
|
-
message_to_send = message_matched ? message_matched[1] : message_to_send
|
95
|
+
def multi_receive(events)
|
96
|
+
for event in events
|
97
|
+
receive(event)
|
108
98
|
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_packet(event, timestamp)
|
102
|
+
require 'securerandom'
|
103
|
+
event_id = SecureRandom.uuid.gsub('-', '')
|
109
104
|
|
110
105
|
packet = {
|
111
|
-
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
115
|
-
:platform =>
|
116
|
-
:server_name => event['host'],
|
117
|
-
:extra => event.to_hash,
|
106
|
+
# parameters required by sentry
|
107
|
+
:event_id => event_id,
|
108
|
+
:timestamp => timestamp.to_s,
|
109
|
+
:logger => get(event, :_logger) || "logstash",
|
110
|
+
:platform => get(event, :platform) || "other",
|
118
111
|
}
|
119
112
|
|
120
|
-
|
121
|
-
|
113
|
+
for key in LogStash::Outputs::Sentry.sentry_keys
|
114
|
+
sentry_key = key.gsub(/^_/,'')
|
115
|
+
next if packet[sentry_key];
|
116
|
+
value = get(event, key)
|
117
|
+
packet[sentry_key] = value if value
|
122
118
|
end
|
123
119
|
|
124
|
-
|
120
|
+
return packet
|
121
|
+
end
|
125
122
|
|
123
|
+
def send_packet(event, packet, timestamp)
|
126
124
|
auth_header = "Sentry sentry_version=5," +
|
127
|
-
"sentry_client=raven_logstash/
|
128
|
-
"sentry_timestamp=#{
|
129
|
-
"sentry_key=#{
|
130
|
-
"sentry_secret=#{
|
131
|
-
|
132
|
-
request = Net::HTTP::Post.new(uri.path)
|
125
|
+
"sentry_client=raven_logstash/0.4.0," +
|
126
|
+
"sentry_timestamp=#{timestamp.to_i}," +
|
127
|
+
"sentry_key=#{@key}," +
|
128
|
+
"sentry_secret=#{@secret}"
|
133
129
|
|
134
|
-
|
135
|
-
request.body = packet.to_json
|
136
|
-
request.add_field('X-Sentry-Auth', auth_header)
|
130
|
+
url = "#{@url}/#{@project_id}/store/"
|
137
131
|
|
138
|
-
|
132
|
+
require 'http'
|
133
|
+
response = HTTP.post(url, :body => packet.to_json, :headers => {:"X-Sentry-Auth" => auth_header})
|
134
|
+
raise "Sentry answered with #{response} and code #{response.code} to our request #{packet}" unless response.code == 200
|
135
|
+
end
|
139
136
|
|
140
|
-
|
137
|
+
def receive(event)
|
138
|
+
begin
|
139
|
+
require 'time'
|
140
|
+
timestamp = get(event, :timestamp) || Time.now
|
141
141
|
|
142
|
-
|
142
|
+
sentry_packet = create_packet(event, timestamp)
|
143
|
+
@logger.debug('Sentry packet', :sentry_packet => sentry_packet)
|
144
|
+
|
145
|
+
send_packet(event, sentry_packet, timestamp)
|
143
146
|
rescue Exception => e
|
144
|
-
@logger.warn('Unhandled exception', :
|
147
|
+
@logger.warn('Unhandled exception', :exception => e)
|
145
148
|
end
|
146
149
|
end
|
147
150
|
end
|
@@ -1,25 +1,25 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-sentry'
|
3
|
-
s.version = '0.
|
4
|
-
s.licenses = ['Apache
|
3
|
+
s.version = '0.4.1'
|
4
|
+
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = 'This output plugin sends messages to any sentry server.'
|
6
|
-
s.description = 'This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install logstash-output-sentry. This gem is not a stand-alone program.'
|
7
|
-
s.authors = ['Javier Matos Odut']
|
6
|
+
s.description = 'This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install logstash-output-sentry. This gem is not a stand-alone program.'
|
7
|
+
s.authors = ['Javier Matos Odut', 'Julian Rüth']
|
8
8
|
s.email = 'iam@javiermatos.com'
|
9
9
|
s.homepage = 'https://github.com/javiermatos/logstash-output-sentry'
|
10
10
|
s.require_paths = ['lib']
|
11
11
|
|
12
12
|
# Files
|
13
13
|
s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
|
14
|
-
|
14
|
+
# Tests
|
15
15
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
16
16
|
|
17
17
|
# Special flag to let us know this is actually a logstash plugin
|
18
18
|
s.metadata = { 'logstash_plugin' => 'true', 'logstash_group' => 'output' }
|
19
19
|
|
20
20
|
# Gem dependencies
|
21
|
-
s.add_runtime_dependency 'logstash-core', '>=
|
22
|
-
s.add_runtime_dependency '
|
23
|
-
s.
|
24
|
-
s.add_development_dependency 'logstash-
|
21
|
+
s.add_runtime_dependency 'logstash-core-plugin-api', '>= 1.60', '< 3.0'
|
22
|
+
s.add_runtime_dependency 'json', '>= 1.8.0', '< 2.0.0'
|
23
|
+
s.add_development_dependency 'logstash-devutils', '>= 1.0.0', '< 2.0.0'
|
24
|
+
s.add_development_dependency 'logstash-codec-plain', '>= 3.0.0', '< 4.0.0'
|
25
25
|
end
|
data/spec/outputs/sentry_spec.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'logstash/devutils/rspec/spec_helper'
|
3
2
|
require 'logstash/outputs/sentry'
|
4
|
-
require 'logstash/codecs/plain'
|
5
|
-
require 'logstash/event'
|
6
3
|
|
7
4
|
describe LogStash::Outputs::Sentry do
|
8
|
-
|
9
|
-
|
5
|
+
describe "Registration" do
|
6
|
+
config <<-CONFIG
|
7
|
+
output {
|
8
|
+
sentry {
|
9
|
+
url => "http://web:9000/api"
|
10
|
+
project_id => "2"
|
11
|
+
key => "Sheez5ohZ8Ohdiquei2E"
|
12
|
+
secret => "vie4eituy2aYoongeege"
|
13
|
+
}
|
14
|
+
}
|
15
|
+
CONFIG
|
10
16
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
describe 'receive message' do
|
16
|
-
subject { output.receive(sample_event) }
|
17
|
-
|
18
|
-
it 'returns a string' do
|
19
|
-
expect(subject).to eq('Event received')
|
20
|
-
end
|
17
|
+
sample("...") do
|
18
|
+
;
|
19
|
+
end
|
21
20
|
end
|
22
21
|
end
|
metadata
CHANGED
@@ -1,85 +1,98 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-sentry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Javier Matos Odut
|
8
|
+
- Julian Rüth
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2017-05-23 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: logstash-core
|
15
|
+
name: logstash-core-plugin-api
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
+
version: '1.60'
|
20
21
|
- - "<"
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.0
|
23
|
+
version: '3.0'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
28
|
- - ">="
|
28
29
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
+
version: '1.60'
|
30
31
|
- - "<"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: 3.0
|
33
|
+
version: '3.0'
|
33
34
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
35
|
+
name: json
|
35
36
|
requirement: !ruby/object:Gem::Requirement
|
36
37
|
requirements:
|
37
38
|
- - ">="
|
38
39
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
40
|
+
version: 1.8.0
|
41
|
+
- - "<"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.0.0
|
40
44
|
type: :runtime
|
41
45
|
prerelease: false
|
42
46
|
version_requirements: !ruby/object:Gem::Requirement
|
43
47
|
requirements:
|
44
48
|
- - ">="
|
45
49
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
50
|
+
version: 1.8.0
|
51
|
+
- - "<"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.0.0
|
47
54
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
55
|
+
name: logstash-devutils
|
49
56
|
requirement: !ruby/object:Gem::Requirement
|
50
57
|
requirements:
|
51
58
|
- - ">="
|
52
59
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
60
|
+
version: 1.0.0
|
54
61
|
- - "<"
|
55
62
|
- !ruby/object:Gem::Version
|
56
63
|
version: 2.0.0
|
57
|
-
type: :
|
64
|
+
type: :development
|
58
65
|
prerelease: false
|
59
66
|
version_requirements: !ruby/object:Gem::Requirement
|
60
67
|
requirements:
|
61
68
|
- - ">="
|
62
69
|
- !ruby/object:Gem::Version
|
63
|
-
version: 1.
|
70
|
+
version: 1.0.0
|
64
71
|
- - "<"
|
65
72
|
- !ruby/object:Gem::Version
|
66
73
|
version: 2.0.0
|
67
74
|
- !ruby/object:Gem::Dependency
|
68
|
-
name: logstash-
|
75
|
+
name: logstash-codec-plain
|
69
76
|
requirement: !ruby/object:Gem::Requirement
|
70
77
|
requirements:
|
71
78
|
- - ">="
|
72
79
|
- !ruby/object:Gem::Version
|
73
|
-
version:
|
80
|
+
version: 3.0.0
|
81
|
+
- - "<"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 4.0.0
|
74
84
|
type: :development
|
75
85
|
prerelease: false
|
76
86
|
version_requirements: !ruby/object:Gem::Requirement
|
77
87
|
requirements:
|
78
88
|
- - ">="
|
79
89
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
90
|
+
version: 3.0.0
|
91
|
+
- - "<"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 4.0.0
|
81
94
|
description: This gem is a logstash plugin required to be installed on top of the
|
82
|
-
Logstash core pipeline using $LS_HOME/bin/plugin install logstash-output-sentry.
|
95
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install logstash-output-sentry.
|
83
96
|
This gem is not a stand-alone program.
|
84
97
|
email: iam@javiermatos.com
|
85
98
|
executables: []
|
@@ -88,17 +101,15 @@ extra_rdoc_files: []
|
|
88
101
|
files:
|
89
102
|
- CHANGELOG.md
|
90
103
|
- CONTRIBUTORS
|
91
|
-
- DEVELOPER.md
|
92
104
|
- Gemfile
|
93
105
|
- LICENSE
|
94
|
-
- NOTICE.TXT
|
95
106
|
- README.md
|
96
107
|
- lib/logstash/outputs/sentry.rb
|
97
108
|
- logstash-output-sentry.gemspec
|
98
109
|
- spec/outputs/sentry_spec.rb
|
99
110
|
homepage: https://github.com/javiermatos/logstash-output-sentry
|
100
111
|
licenses:
|
101
|
-
- Apache
|
112
|
+
- Apache-2.0
|
102
113
|
metadata:
|
103
114
|
logstash_plugin: 'true'
|
104
115
|
logstash_group: output
|
@@ -118,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
129
|
version: '0'
|
119
130
|
requirements: []
|
120
131
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.5.
|
132
|
+
rubygems_version: 2.5.2
|
122
133
|
signing_key:
|
123
134
|
specification_version: 4
|
124
135
|
summary: This output plugin sends messages to any sentry server.
|
data/DEVELOPER.md
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
# logstash-output-sentry
|