logstash-output-opsgenie 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash/outputs/opsgenie.rb +71 -58
- data/logstash-output-opsgenie.gemspec +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 879ee69bcc8c74773d2012eb9c7bd81fc5769ae7
|
4
|
+
data.tar.gz: a8875eecceeb87845d71b3742036eb1b94b00f4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af122c65f7e74fa4524e969f9f90e16f975f60b0885f79c6b23622b1fcc5551916628b5afb690fec4d465241d8fb3ccf6d710b73f418c08d99da77c84439dd6b
|
7
|
+
data.tar.gz: 92ebe7188eb5bdfba10659ae65a70149ca41226722dcb85061923583ef80ee4924c63d07031d3e20062534ceebe61fad9d17e271c6ffcc68e8f922b19b16b8bb
|
@@ -8,62 +8,62 @@ require "net/https"
|
|
8
8
|
|
9
9
|
# The OpsGenie output is used to Create, Close, Acknowledge Alerts and Add Note to alerts in OpsGenie.
|
10
10
|
# For this output to work, your event must contain "opsgenieAction" field and you must configure apiKey field in configuration.
|
11
|
-
#
|
12
|
-
#
|
11
|
+
# If opsgenieAction is "create", event must contain "message" field.
|
12
|
+
# For other actions ("close", "acknowledge" or "note"), event must contain "alias" or "alertId" field.
|
13
13
|
#
|
14
14
|
# If your event have the following fields (If you use default field names).
|
15
15
|
#
|
16
|
-
# Example
|
16
|
+
# Example event:
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
18
|
+
# {
|
19
|
+
# "note" => "test note",
|
20
|
+
# "opsgenieAction" => "create",
|
21
|
+
# "teams" => ["teams"],
|
22
|
+
# "description" => "test description",
|
23
|
+
# "source" => "test source",
|
24
|
+
# "message" => "test message",
|
25
|
+
# "priority" => "P4",
|
26
|
+
# "tags" => ["tags"],
|
27
|
+
# "@timestamp" => 2017-09-15T13:32:00.747Z,
|
28
|
+
# "@version" => "1",
|
29
|
+
# "host" => "Neo's-MacBook-Pro.local",
|
30
|
+
# "alias" => "test-alias",
|
31
|
+
# "details" => {
|
32
|
+
# "prop2" => "val2",
|
33
|
+
# "prop1" => "val1"
|
34
|
+
# },
|
35
|
+
# "actions" => ["actions"],
|
36
|
+
# "user" => "test user",
|
37
|
+
# "entity" => "test entity"
|
38
|
+
# }
|
39
39
|
#
|
40
40
|
# An alert with following properties will be created.
|
41
41
|
#
|
42
42
|
# {
|
43
|
-
# "message": "
|
44
|
-
# "alias": "
|
43
|
+
# "message": "test message",
|
44
|
+
# "alias": "test alias",
|
45
45
|
# "teams": ["teams"],
|
46
|
-
# "description": "
|
47
|
-
# "source": "
|
46
|
+
# "description": "test description",
|
47
|
+
# "source": "test source",
|
48
|
+
# "note": "test note",
|
49
|
+
# "user": "test user",
|
50
|
+
# "priority": "P4",
|
48
51
|
# "tags": [
|
49
52
|
# "tags"
|
50
53
|
# ],
|
51
|
-
# "recipients": [
|
52
|
-
# "the-recipients"
|
53
|
-
# ],
|
54
54
|
# "details": {
|
55
|
-
# "
|
56
|
-
# "
|
55
|
+
# "prop2": "val2",
|
56
|
+
# "prop1": "val1"
|
57
57
|
# },
|
58
58
|
# "actions": [
|
59
59
|
# "actions"
|
60
60
|
# ],
|
61
|
-
# "entity": "
|
61
|
+
# "entity": "test entity",
|
62
62
|
# }
|
63
63
|
#
|
64
64
|
# Fields with prefix "Attribute" are the keys of the fields will be extracted from Logstash event.
|
65
65
|
# For more information about the api requests and their contents,
|
66
|
-
# please refer to Alert API("https://
|
66
|
+
# please refer to Alert API("https://docs.opsgenie.com/docs/alert-api") support doc.
|
67
67
|
|
68
68
|
class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
69
69
|
|
@@ -78,25 +78,27 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
78
78
|
|
79
79
|
|
80
80
|
# Host of opsgenie api, normally you should not need to change this field.
|
81
|
-
config :opsGenieBaseUrl, :validate => :string, :required => false, :default => 'https://api.opsgenie.com'
|
82
|
-
|
83
|
-
# Url will be used to create alerts in OpsGenie
|
84
|
-
config :createActionUrl, :validate => :string, :required => false, :default =>'/v1/json/alert'
|
81
|
+
config :opsGenieBaseUrl, :validate => :string, :required => false, :default => 'https://api.opsgenie.com/v2/alerts/'
|
85
82
|
|
86
83
|
# Url will be used to close alerts in OpsGenie
|
87
|
-
config :
|
84
|
+
config :closeActionPath, :validate => :string, :required => false, :default =>'/close'
|
88
85
|
|
89
86
|
# Url will be used to acknowledge alerts in OpsGenie
|
90
|
-
config :
|
87
|
+
config :acknowledgeActionPath, :validate => :string, :required => false, :default =>'/acknowledge'
|
91
88
|
|
92
89
|
# Url will be used to add notes to alerts in OpsGenie
|
93
|
-
config :
|
94
|
-
|
90
|
+
config :noteActionPath, :validate => :string, :required => false, :default =>'/notes'
|
95
91
|
|
96
92
|
# The value of this field holds the name of the action will be executed in OpsGenie.
|
97
93
|
# This field must be in Event object. Should be one of "create", "close", "acknowledge" or "note". Other values will be discarded.
|
98
94
|
config :actionAttribute, :validate => :string, :required => false, :default => 'opsgenieAction'
|
99
95
|
|
96
|
+
# This value specifies the query parameter identifierType
|
97
|
+
config :identifierType, :validate => :string, :required => false, :default =>'id'
|
98
|
+
|
99
|
+
# This value will be set to eventual identifier according to event(id/alias).
|
100
|
+
config :identifier, :validate => :string, :required => false, :default =>''
|
101
|
+
|
100
102
|
# The value of this field holds the Id of the alert that actions will be executed.
|
101
103
|
# One of "alertId" or "alias" field must be in Event object, except from "create" action
|
102
104
|
config :alertIdAttribute, :validate => :string, :required => false, :default => 'alertId'
|
@@ -111,18 +113,22 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
111
113
|
# The value of this field holds the list of team names which will be responsible for the alert.
|
112
114
|
config :teamsAttribute, :validate => :string, :required => false, :default => 'teams'
|
113
115
|
|
116
|
+
# The value of this field holds the Teams and users that the alert will become
|
117
|
+
# visible to without sending any notification.
|
118
|
+
config :visibleToAttribute, :validate => :string, :required => false, :default => 'visibleTo'
|
119
|
+
|
114
120
|
# The value of this field holds the detailed description of the alert.
|
115
121
|
config :descriptionAttribute, :validate => :string, :required => false, :default => 'description'
|
116
122
|
|
117
|
-
# The value of this field holds the optional user, group, schedule or escalation names to calculate which users will receive the notifications of the alert.
|
118
|
-
config :recipientsAttribute, :validate => :string, :required => false, :default => 'recipients'
|
119
|
-
|
120
123
|
# The value of this field holds the comma separated list of actions that can be executed on the alert.
|
121
124
|
config :actionsAttribute, :validate => :string, :required => false, :default => 'actions'
|
122
125
|
|
123
126
|
# The value of this field holds the source of alert. By default, it will be assigned to IP address of incoming request.
|
124
127
|
config :sourceAttribute, :validate => :string, :required => false, :default => 'source'
|
125
128
|
|
129
|
+
# The value of this field holds the priority level of the alert
|
130
|
+
config :priorityAttribute, :validate => :string, :required => false, :default => 'priority'
|
131
|
+
|
126
132
|
# The value of this field holds the comma separated list of labels attached to the alert.
|
127
133
|
config :tagsAttribute, :validate => :string, :required => false, :default => 'tags'
|
128
134
|
|
@@ -149,16 +155,18 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
149
155
|
if alertAlias == nil then
|
150
156
|
alertId = event.get(@alertIdAttribute) if event.get(@alertIdAttribute)
|
151
157
|
if !(alertId == nil) then
|
152
|
-
|
158
|
+
@identifierType = 'id'
|
159
|
+
@identifier = alertId
|
153
160
|
end
|
154
161
|
else
|
155
|
-
|
162
|
+
@identifierType = 'alias'
|
163
|
+
@identifier = alertAlias
|
156
164
|
end
|
157
165
|
end # def populateAliasOrId
|
158
166
|
|
159
167
|
public
|
160
168
|
def executePost(uri, params)
|
161
|
-
|
169
|
+
unless uri == nil then
|
162
170
|
@logger.info("Executing url #{uri}")
|
163
171
|
url = URI(uri)
|
164
172
|
http = Net::HTTP.new(url.host, url.port, @proxy_address, @proxy_port)
|
@@ -166,7 +174,7 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
166
174
|
http.use_ssl = true
|
167
175
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
168
176
|
end
|
169
|
-
request = Net::HTTP::Post.new(url.
|
177
|
+
request = Net::HTTP::Post.new(url.request_uri, initheader = { "Content-Type" =>"application/json", "Authorization" => "GenieKey #{@apiKey}" })
|
170
178
|
request.body = params.to_json
|
171
179
|
response = http.request(request)
|
172
180
|
body = response.body
|
@@ -178,26 +186,28 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
178
186
|
public
|
179
187
|
def receive(event)
|
180
188
|
return unless output?(event)
|
189
|
+
|
181
190
|
@logger.info("processing #{event}")
|
182
191
|
opsGenieAction = event.get(@actionAttribute) if event.get(@actionAttribute)
|
183
192
|
if opsGenieAction then
|
184
|
-
params = {
|
193
|
+
params = {}
|
194
|
+
populateCommonContent(params, event)
|
195
|
+
|
185
196
|
case opsGenieAction.downcase
|
186
197
|
when "create"
|
187
|
-
uri = "#{@opsGenieBaseUrl}
|
198
|
+
uri = "#{@opsGenieBaseUrl}"
|
188
199
|
params = populateCreateAlertContent(params, event)
|
189
200
|
when "close"
|
190
|
-
uri = "#{@opsGenieBaseUrl}#{@
|
201
|
+
uri = "#{@opsGenieBaseUrl}#{@identifier}#{@closeActionPath}?identifierType=#{@identifierType}"
|
191
202
|
when "acknowledge"
|
192
|
-
uri = "#{@opsGenieBaseUrl}#{@
|
203
|
+
uri = "#{@opsGenieBaseUrl}#{@identifier}#{@acknowledgeActionPath}?identifierType=#{@identifierType}"
|
193
204
|
when "note"
|
194
|
-
uri = "#{@opsGenieBaseUrl}#{@
|
205
|
+
uri = "#{@opsGenieBaseUrl}#{@identifier}#{@noteActionPath}?identifierType=#{@identifierType}"
|
195
206
|
else
|
196
207
|
@logger.warn("Action #{opsGenieAction} does not match any available action, discarding..")
|
197
208
|
return
|
198
209
|
end
|
199
210
|
|
200
|
-
populateCommonContent(params, event)
|
201
211
|
executePost(uri, params)
|
202
212
|
else
|
203
213
|
@logger.warn("No opsgenie action defined")
|
@@ -208,14 +218,17 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
208
218
|
private
|
209
219
|
def populateCreateAlertContent(params, event)
|
210
220
|
params['message'] = event.get(@messageAttribute) if event.get(@messageAttribute)
|
221
|
+
params['alias'] = event.get(@aliasAttribute) if event.get(@aliasAttribute)
|
211
222
|
params['teams'] = event.get(@teamsAttribute) if event.get(@teamsAttribute)
|
223
|
+
params['visibleTo'] = event.get(@visibleToAttribute) if event.get(@visibleToAttribute)
|
212
224
|
params['description'] = event.get(@descriptionAttribute) if event.get(@descriptionAttribute)
|
213
|
-
params['recipients'] = event.get(@recipientsAttribute) if event.get(@recipientsAttribute)
|
214
225
|
params['actions'] = event.get(@actionsAttribute) if event.get(@actionsAttribute)
|
215
226
|
params['tags'] = event.get(@tagsAttribute) if event.get(@tagsAttribute)
|
216
227
|
params['entity'] = event.get(@entityAttribute) if event.get(@entityAttribute)
|
228
|
+
params['priority'] = event.get(@priorityAttribute) if event.get(@priorityAttribute)
|
217
229
|
params['details'] = event.get(@detailsAttribute) if event.get(@detailsAttribute)
|
218
230
|
|
231
|
+
|
219
232
|
return params
|
220
233
|
end
|
221
234
|
|
@@ -227,4 +240,4 @@ class LogStash::Outputs::OpsGenie < LogStash::Outputs::Base
|
|
227
240
|
params['note'] = event.get(@noteAttribute) if event.get(@noteAttribute)
|
228
241
|
end
|
229
242
|
|
230
|
-
end # class LogStash::Outputs::OpsGenie
|
243
|
+
end # class LogStash::Outputs::OpsGenie
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-opsgenie'
|
3
|
-
s.version = '
|
3
|
+
s.version = '3.0.0'
|
4
4
|
s.licenses = ["Apache License (2.0)"]
|
5
5
|
s.summary = "This output Creates, Closes, Acknowledges alerts and Adds Note to alerts in OpsGenie."
|
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 gemname. This gem is not a stand-alone program"
|
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 gemname. This gem is not a stand-alone program"
|
7
7
|
s.authors = ["Elastic"]
|
8
8
|
s.email = "info@elastic.co"
|
9
9
|
s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-opsgenie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-core-plugin-api
|
@@ -59,8 +59,8 @@ dependencies:
|
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0'
|
61
61
|
description: This gem is a logstash plugin required to be installed on top of the
|
62
|
-
Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This
|
63
|
-
a stand-alone program
|
62
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
63
|
+
gem is not a stand-alone program
|
64
64
|
email: info@elastic.co
|
65
65
|
executables: []
|
66
66
|
extensions: []
|