kennel 1.74.0 → 1.74.1
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 +4 -4
- data/Readme.md +73 -28
- data/lib/kennel/models/monitor.rb +9 -3
- data/lib/kennel/version.rb +1 -1
- data/template/Readme.md +67 -25
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ca8f1880a71be912c4d52c43b378781001c20eaa1797c923b46c7fab0134a92e
|
|
4
|
+
data.tar.gz: 5147a4185090e027300f8e74dd07df1b76d1d3a70b03e97986ca7043fa7a60ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 13cef2ac877cf523b13d34ccb969376af5ef451bca24e7484536785e8ebce86e713d2cd4572126cad0fdd62b7ee3d7d39c23563302d697570d18925ba1820e89
|
|
7
|
+
data.tar.gz: 9865461cb7c846ffabb03b5619ec7aa5833c4f7db1389efc834020b33f25246b4a6e39616df4ecd6cd0846c621a1d9e23d1672c243e43478ec4d747aeb28f36c
|
data/Readme.md
CHANGED
|
@@ -1,17 +1,58 @@
|
|
|
1
|
-
# Kennel
|
|
2
|
-
|
|
3
1
|

|
|
4
2
|
|
|
5
|
-
Manage
|
|
3
|
+
Manage Datadog Monitors / Dashboards / Slos as code
|
|
6
4
|
|
|
7
|
-
-
|
|
8
|
-
- Changes are PR reviewed and
|
|
5
|
+
- DRY, searchable, audited, documented
|
|
6
|
+
- Changes are PR reviewed and applied on merge
|
|
9
7
|
- Updating shows diff before applying
|
|
10
|
-
- Automated import of existing
|
|
8
|
+
- Automated import of existing resources
|
|
9
|
+
- Resources are grouped into projects that belong to teams and inherit tags
|
|
10
|
+
- No copy-pasting of ids to create new resources
|
|
11
|
+
- Automated cleanup when removing code
|
|
12
|
+
- [Helpers](#helpers) for automating common tasks
|
|
13
|
+
|
|
14
|
+
### Applying changes
|
|
11
15
|
|
|
12
16
|

|
|
17
|
+
|
|
18
|
+
### Example code
|
|
19
|
+
|
|
20
|
+
```Ruby
|
|
21
|
+
# teams/foo.rb
|
|
22
|
+
module Teams
|
|
23
|
+
class Foo < Kennel::Models::Team
|
|
24
|
+
defaults(mention: -> { "@slack-my-team" })
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# projects/bar.rb
|
|
29
|
+
class Bar < Kennel::Models::Project
|
|
30
|
+
defaults(
|
|
31
|
+
team: -> { Teams::Foo.new }, # use mention and tags from the team
|
|
32
|
+
parts: -> {
|
|
33
|
+
[
|
|
34
|
+
Kennel::Models::Monitor.new(
|
|
35
|
+
self, # the current project
|
|
36
|
+
type: -> { "query alert" },
|
|
37
|
+
kennel_id: -> { "load-too-high" }, # pick a unique name
|
|
38
|
+
name: -> { "Foobar Load too high" }, # nice descriptive name that will show up in alerts and emails
|
|
39
|
+
message: -> {
|
|
40
|
+
<<~TEXT
|
|
41
|
+
This is bad!
|
|
42
|
+
#{super()} # inserts mention from team
|
|
43
|
+
TEXT
|
|
44
|
+
},
|
|
45
|
+
query: -> { "avg(last_5m):avg:system.load.5{hostgroup:api} by {pod} > #{critical}" },
|
|
46
|
+
critical: -> { 20 }
|
|
47
|
+
)
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
```
|
|
53
|
+
|
|
13
54
|
<!-- NOT IN template/Readme.md -->
|
|
14
|
-
##
|
|
55
|
+
## Installation
|
|
15
56
|
|
|
16
57
|
- create a new private `kennel` repo for your organization (do not fork this repo)
|
|
17
58
|
- use the template folder as starting point:
|
|
@@ -22,8 +63,8 @@ Manage datadog monitors/dashboards/slos as code
|
|
|
22
63
|
cd kennel && git add . && git commit -m 'initial'
|
|
23
64
|
```
|
|
24
65
|
- add a basic projects and teams so others can copy-paste to get started
|
|
25
|
-
- setup travis build for your repo
|
|
26
|
-
- uncomment `.travis.yml` section for
|
|
66
|
+
- setup travis (CI) build for your repo
|
|
67
|
+
- uncomment `.travis.yml` section for datadog updates on merge
|
|
27
68
|
- follow `Setup` in your repos Readme.md
|
|
28
69
|
<!-- NOT IN -->
|
|
29
70
|
|
|
@@ -176,25 +217,7 @@ To link to existing monitors via their kennel_id
|
|
|
176
217
|
- figure out project name by converting the class name to snake-case
|
|
177
218
|
- run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project
|
|
178
219
|
|
|
179
|
-
###
|
|
180
|
-
|
|
181
|
-
Run `rake kennel:alerts TAG=service:my-service` to see all un-muted alerts for a given datadog monitor tag.
|
|
182
|
-
|
|
183
|
-
### Validating mentions work
|
|
184
|
-
|
|
185
|
-
`rake kennel:validate_mentions` should run as part of CI
|
|
186
|
-
|
|
187
|
-
### Grepping through all of datadog
|
|
188
|
-
|
|
189
|
-
`TYPE=monitor rake kennel:dump`
|
|
190
|
-
|
|
191
|
-
### Find all monitors with No-Data
|
|
192
|
-
|
|
193
|
-
`rake kennel:nodata TAG=team:foo`
|
|
194
|
-
|
|
195
|
-
## Examples
|
|
196
|
-
|
|
197
|
-
### Reusable monitors/dashes/etc
|
|
220
|
+
### Reuse
|
|
198
221
|
|
|
199
222
|
Add to `parts/<folder>`.
|
|
200
223
|
|
|
@@ -221,8 +244,30 @@ class Database < Kennel::Models::Project
|
|
|
221
244
|
)
|
|
222
245
|
end
|
|
223
246
|
```
|
|
247
|
+
|
|
248
|
+
## Helpers
|
|
249
|
+
|
|
250
|
+
### Listing un-muted alerts
|
|
251
|
+
|
|
252
|
+
Run `rake kennel:alerts TAG=service:my-service` to see all un-muted alerts for a given datadog monitor tag.
|
|
253
|
+
|
|
254
|
+
### Validating mentions work
|
|
255
|
+
|
|
256
|
+
`rake kennel:validate_mentions` should run as part of CI
|
|
257
|
+
|
|
258
|
+
### Grepping through all of datadog
|
|
259
|
+
|
|
260
|
+
`TYPE=monitor rake kennel:dump`
|
|
261
|
+
|
|
262
|
+
### Find all monitors with No-Data
|
|
263
|
+
|
|
264
|
+
`rake kennel:nodata TAG=team:foo`
|
|
265
|
+
|
|
224
266
|
<!-- NOT IN template/Readme.md -->
|
|
225
267
|
|
|
268
|
+
|
|
269
|
+
## Development
|
|
270
|
+
|
|
226
271
|
### Integration testing
|
|
227
272
|
|
|
228
273
|
```Bash
|
|
@@ -25,7 +25,7 @@ module Kennel
|
|
|
25
25
|
settings(
|
|
26
26
|
:query, :name, :message, :escalation_message, :critical, :type, :renotify_interval, :warning, :timeout_h, :evaluation_delay,
|
|
27
27
|
:ok, :no_data_timeframe, :notify_no_data, :notify_audit, :tags, :critical_recovery, :warning_recovery, :require_full_window,
|
|
28
|
-
:threshold_windows, :new_host_delay
|
|
28
|
+
:threshold_windows, :new_host_delay, :groupby_simple_monitor
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
defaults(
|
|
@@ -44,7 +44,8 @@ module Kennel
|
|
|
44
44
|
evaluation_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:evaluation_delay) },
|
|
45
45
|
critical_recovery: -> { nil },
|
|
46
46
|
warning_recovery: -> { nil },
|
|
47
|
-
threshold_windows: -> { nil }
|
|
47
|
+
threshold_windows: -> { nil },
|
|
48
|
+
groupby_simple_monitor: -> { nil }
|
|
48
49
|
)
|
|
49
50
|
|
|
50
51
|
def as_json
|
|
@@ -94,6 +95,11 @@ module Kennel
|
|
|
94
95
|
end
|
|
95
96
|
end
|
|
96
97
|
|
|
98
|
+
# option randomly pops up and cannot be removed
|
|
99
|
+
unless (group = groupby_simple_monitor).nil?
|
|
100
|
+
options[:groupby_simple_monitor] = group
|
|
101
|
+
end
|
|
102
|
+
|
|
97
103
|
if windows = threshold_windows
|
|
98
104
|
options[:threshold_windows] = windows
|
|
99
105
|
end
|
|
@@ -119,7 +125,7 @@ module Kennel
|
|
|
119
125
|
Utils.path_to_url "/monitors##{id}/edit"
|
|
120
126
|
end
|
|
121
127
|
|
|
122
|
-
# datadog uses
|
|
128
|
+
# datadog uses / for show and # for edit as separator in it's links
|
|
123
129
|
def self.parse_url(url)
|
|
124
130
|
return unless id = url[/\/monitors[\/#](\d+)/, 1]
|
|
125
131
|
Integer(id)
|
data/lib/kennel/version.rb
CHANGED
data/template/Readme.md
CHANGED
|
@@ -1,16 +1,57 @@
|
|
|
1
|
-
# Kennel
|
|
2
|
-
|
|
3
1
|

|
|
4
2
|
|
|
5
|
-
Manage
|
|
3
|
+
Manage Datadog Monitors / Dashboards / Slos as code
|
|
6
4
|
|
|
7
|
-
-
|
|
8
|
-
- Changes are PR reviewed and
|
|
5
|
+
- DRY, searchable, audited, documented
|
|
6
|
+
- Changes are PR reviewed and applied on merge
|
|
9
7
|
- Updating shows diff before applying
|
|
10
|
-
- Automated import of existing
|
|
8
|
+
- Automated import of existing resources
|
|
9
|
+
- Resources are grouped into projects that belong to teams and inherit tags
|
|
10
|
+
- No copy-pasting of ids to create new resources
|
|
11
|
+
- Automated cleanup when removing code
|
|
12
|
+
- [Helpers](#helpers) for automating common tasks
|
|
13
|
+
|
|
14
|
+
### Applying changes
|
|
11
15
|
|
|
12
16
|

|
|
13
17
|
|
|
18
|
+
### Example code
|
|
19
|
+
|
|
20
|
+
```Ruby
|
|
21
|
+
# teams/foo.rb
|
|
22
|
+
module Teams
|
|
23
|
+
class Foo < Kennel::Models::Team
|
|
24
|
+
defaults(mention: -> { "@slack-my-team" })
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# projects/bar.rb
|
|
29
|
+
class Bar < Kennel::Models::Project
|
|
30
|
+
defaults(
|
|
31
|
+
team: -> { Teams::Foo.new }, # use mention and tags from the team
|
|
32
|
+
parts: -> {
|
|
33
|
+
[
|
|
34
|
+
Kennel::Models::Monitor.new(
|
|
35
|
+
self, # the current project
|
|
36
|
+
type: -> { "query alert" },
|
|
37
|
+
kennel_id: -> { "load-too-high" }, # pick a unique name
|
|
38
|
+
name: -> { "Foobar Load too high" }, # nice descriptive name that will show up in alerts and emails
|
|
39
|
+
message: -> {
|
|
40
|
+
<<~TEXT
|
|
41
|
+
This is bad!
|
|
42
|
+
#{super()} # inserts mention from team
|
|
43
|
+
TEXT
|
|
44
|
+
},
|
|
45
|
+
query: -> { "avg(last_5m):avg:system.load.5{hostgroup:api} by {pod} > #{critical}" },
|
|
46
|
+
critical: -> { 20 }
|
|
47
|
+
)
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
|
|
14
55
|
## Structure
|
|
15
56
|
|
|
16
57
|
- `projects/` monitors/dashboards/etc scoped by project
|
|
@@ -158,25 +199,7 @@ To link to existing monitors via their kennel_id
|
|
|
158
199
|
- figure out project name by converting the class name to snake-case
|
|
159
200
|
- run `PROJECT=foo bundle exec rake kennel:update_datadog` to test changes for a single project
|
|
160
201
|
|
|
161
|
-
###
|
|
162
|
-
|
|
163
|
-
Run `rake kennel:alerts TAG=service:my-service` to see all un-muted alerts for a given datadog monitor tag.
|
|
164
|
-
|
|
165
|
-
### Validating mentions work
|
|
166
|
-
|
|
167
|
-
`rake kennel:validate_mentions` should run as part of CI
|
|
168
|
-
|
|
169
|
-
### Grepping through all of datadog
|
|
170
|
-
|
|
171
|
-
`TYPE=monitor rake kennel:dump`
|
|
172
|
-
|
|
173
|
-
### Find all monitors with No-Data
|
|
174
|
-
|
|
175
|
-
`rake kennel:nodata TAG=team:foo`
|
|
176
|
-
|
|
177
|
-
## Examples
|
|
178
|
-
|
|
179
|
-
### Reusable monitors/dashes/etc
|
|
202
|
+
### Reuse
|
|
180
203
|
|
|
181
204
|
Add to `parts/<folder>`.
|
|
182
205
|
|
|
@@ -203,3 +226,22 @@ class Database < Kennel::Models::Project
|
|
|
203
226
|
)
|
|
204
227
|
end
|
|
205
228
|
```
|
|
229
|
+
|
|
230
|
+
## Helpers
|
|
231
|
+
|
|
232
|
+
### Listing un-muted alerts
|
|
233
|
+
|
|
234
|
+
Run `rake kennel:alerts TAG=service:my-service` to see all un-muted alerts for a given datadog monitor tag.
|
|
235
|
+
|
|
236
|
+
### Validating mentions work
|
|
237
|
+
|
|
238
|
+
`rake kennel:validate_mentions` should run as part of CI
|
|
239
|
+
|
|
240
|
+
### Grepping through all of datadog
|
|
241
|
+
|
|
242
|
+
`TYPE=monitor rake kennel:dump`
|
|
243
|
+
|
|
244
|
+
### Find all monitors with No-Data
|
|
245
|
+
|
|
246
|
+
`rake kennel:nodata TAG=team:foo`
|
|
247
|
+
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kennel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.74.
|
|
4
|
+
version: 1.74.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Grosser
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-07-
|
|
11
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|