cfn-guardian 0.1.0 → 0.6.3

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +1 -0
  3. data/.github/workflows/build-gem.yml +25 -0
  4. data/.github/workflows/release-gem.yml +25 -0
  5. data/.github/workflows/release-image.yml +33 -0
  6. data/.rspec +1 -0
  7. data/Dockerfile +19 -0
  8. data/Gemfile.lock +39 -21
  9. data/README.md +9 -378
  10. data/cfn-guardian.gemspec +7 -5
  11. data/docs/alarm_templates.md +130 -0
  12. data/docs/cli.md +182 -0
  13. data/docs/composite_alarms.md +24 -0
  14. data/docs/custom_checks/azure_file_check.md +28 -0
  15. data/docs/custom_checks/domain_expiry.md +10 -0
  16. data/docs/custom_checks/http.md +59 -0
  17. data/docs/custom_checks/log_group_metric_filters.md +27 -0
  18. data/docs/custom_checks/nrpe.md +29 -0
  19. data/docs/custom_checks/port.md +40 -0
  20. data/docs/custom_checks/sftp.md +73 -0
  21. data/docs/custom_checks/sql.md +44 -0
  22. data/docs/custom_checks/tls.md +25 -0
  23. data/docs/custom_metrics.md +71 -0
  24. data/docs/event_subscriptions.md +67 -0
  25. data/docs/maintenance_mode.md +85 -0
  26. data/docs/notifiers.md +33 -0
  27. data/docs/overview.md +22 -0
  28. data/docs/resources.md +93 -0
  29. data/docs/variables.md +58 -0
  30. data/lib/cfnguardian.rb +325 -37
  31. data/lib/cfnguardian/cloudwatch.rb +132 -0
  32. data/lib/cfnguardian/codecommit.rb +54 -0
  33. data/lib/cfnguardian/codepipeline.rb +138 -0
  34. data/lib/cfnguardian/compile.rb +142 -18
  35. data/lib/cfnguardian/config/defaults.yaml +103 -0
  36. data/lib/cfnguardian/deploy.rb +2 -16
  37. data/lib/cfnguardian/display_formatter.rb +163 -0
  38. data/lib/cfnguardian/drift.rb +79 -0
  39. data/lib/cfnguardian/error.rb +4 -0
  40. data/lib/cfnguardian/log.rb +0 -1
  41. data/lib/cfnguardian/models/alarm.rb +193 -59
  42. data/lib/cfnguardian/models/check.rb +128 -33
  43. data/lib/cfnguardian/models/composite.rb +21 -0
  44. data/lib/cfnguardian/models/event.rb +201 -49
  45. data/lib/cfnguardian/models/event_subscription.rb +96 -0
  46. data/lib/cfnguardian/models/metric_filter.rb +28 -0
  47. data/lib/cfnguardian/resources/amazonmq_rabbitmq.rb +136 -0
  48. data/lib/cfnguardian/resources/application_targetgroup.rb +2 -0
  49. data/lib/cfnguardian/resources/azure_file.rb +20 -0
  50. data/lib/cfnguardian/resources/base.rb +155 -33
  51. data/lib/cfnguardian/resources/ec2_instance.rb +11 -0
  52. data/lib/cfnguardian/resources/ecs_service.rb +2 -2
  53. data/lib/cfnguardian/resources/http.rb +17 -1
  54. data/lib/cfnguardian/resources/internal_http.rb +74 -0
  55. data/lib/cfnguardian/resources/internal_port.rb +33 -0
  56. data/lib/cfnguardian/resources/internal_sftp.rb +58 -0
  57. data/lib/cfnguardian/resources/log_group.rb +26 -0
  58. data/lib/cfnguardian/resources/network_targetgroup.rb +1 -0
  59. data/lib/cfnguardian/resources/port.rb +25 -0
  60. data/lib/cfnguardian/resources/rds_cluster.rb +14 -0
  61. data/lib/cfnguardian/resources/rds_instance.rb +73 -0
  62. data/lib/cfnguardian/resources/redshift_cluster.rb +2 -2
  63. data/lib/cfnguardian/resources/sftp.rb +50 -0
  64. data/lib/cfnguardian/resources/sql.rb +3 -3
  65. data/lib/cfnguardian/resources/tls.rb +66 -0
  66. data/lib/cfnguardian/s3.rb +3 -2
  67. data/lib/cfnguardian/stacks/main.rb +94 -72
  68. data/lib/cfnguardian/stacks/resources.rb +111 -43
  69. data/lib/cfnguardian/string.rb +12 -0
  70. data/lib/cfnguardian/version.rb +1 -1
  71. metadata +133 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2605c1c68bc60955c63d620536adc746e75db45812783c641ee41a85cfc6693b
4
- data.tar.gz: 50882bfd8151cc4cde52a0107509a8a9380bc15d8ab6d3805558f8a9578a928e
3
+ metadata.gz: 7998606f2ce8404ce0b55dddb9e5d1f4936cd5529364e0b909b1ea3133163ac8
4
+ data.tar.gz: 82f582858ae75993fc77966e2ae42d9142a1b16a428f74f67f5c1afb2b74854e
5
5
  SHA512:
6
- metadata.gz: 1134950814ca8e006cac4e5b78a6d0d77e2e3a289e85fac71b981f60fafe0c332eb3f84c44cffa28763c9b5bd093f0e6b385fe19962920a895dcd833fbe81dd4
7
- data.tar.gz: ee7616c707777d6fcdcc5d199ef2e821f8678464b4a0292b3ccd9fcd1f30785aa22057b59d39f543b36652b51ac529c65c1c25671cd8409d6892cf0d3fbc796e
6
+ metadata.gz: f3bda3d2c3c6665749843206c10f3260a5862d87b9f8e066c17eb2b52b996a2911dd619435a16f52336c6aa534a2a0cc39caa03859f1f5f32f6b31182736b44c
7
+ data.tar.gz: '0665209c6f4e74710383cf37be0a63446e38ed1b89fe6072b8efd030b0b4a010e31f7b54bfed456ea0bd866929b8d769b77506de2e4b5199357bd91fc8ae6213'
data/.dockerignore ADDED
@@ -0,0 +1 @@
1
+ cfn-guardian-*.gem
@@ -0,0 +1,25 @@
1
+ name: test and build gem
2
+ on:
3
+ push:
4
+ branches: [ master ]
5
+ pull_request:
6
+ branches: [ master ]
7
+
8
+ jobs:
9
+ build:
10
+ name: test + build
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: set up ruby 2.7
16
+ uses: actions/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.7.x
19
+ - name: rspec
20
+ run: |
21
+ gem install rspec
22
+ rspec
23
+ - name: build gem
24
+ run: |
25
+ gem build cfn-guardian.gemspec
@@ -0,0 +1,25 @@
1
+ name: release gem
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build and publish gem
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Check out the repo
14
+ uses: actions/checkout@v2
15
+
16
+ - name: Set up ruby 2.7
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: 2.7.x
20
+
21
+ - name: Publish gem
22
+ uses: dawidd6/action-publish-gem@v1
23
+ with:
24
+ api_key: ${{secrets.RUBYGEMS_API_KEY}}
25
+ github_token: ${{secrets.GITHUB_TOKEN}}
@@ -0,0 +1,33 @@
1
+ name: release docker image
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish Container Image
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Check out the repo
14
+ uses: actions/checkout@v2
15
+
16
+ - name: Set up Docker Buildx
17
+ uses: docker/setup-buildx-action@v1
18
+
19
+ - name: Login to GitHub Container Repository
20
+ uses: docker/login-action@v1
21
+ with:
22
+ registry: ghcr.io
23
+ username: ${{ github.repository_owner }}
24
+ password: ${{ secrets.GHCR_PUSH_TOKEN }}
25
+
26
+ - name: Build and push Container Image to GitHub Container Repository
27
+ uses: docker/build-push-action@v2
28
+ with:
29
+ context: .
30
+ file: ./Dockerfile
31
+ push: true
32
+ tags: ghcr.io/base2services/guardian:${{ github.event.release.tag_name }}
33
+ build-args: GUARDIAN_VERSION=${{ github.event.release.tag_name }}
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/Dockerfile ADDED
@@ -0,0 +1,19 @@
1
+ FROM ruby:2.7-alpine
2
+
3
+ ARG GUARDIAN_VERSION="0.2.2"
4
+
5
+ COPY . /src
6
+
7
+ WORKDIR /src
8
+
9
+ RUN apk add --no-cache git \
10
+ && gem build cfn-guardian.gemspec \
11
+ && gem install cfn-guardian-${GUARDIAN_VERSION}.gem \
12
+ && rm -rf /src
13
+
14
+ RUN addgroup -g 1000 guardian && \
15
+ adduser -D -u 1000 -G guardian guardian
16
+
17
+ USER guardian
18
+
19
+ RUN cfndsl -u 11.5.0
data/Gemfile.lock CHANGED
@@ -1,44 +1,62 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cfn-guardian (0.1.0)
5
- aws-sdk-cloudformation (~> 1, < 2)
6
- aws-sdk-s3 (~> 1, < 2)
4
+ cfn-guardian (0.6.0)
5
+ aws-sdk-cloudformation (~> 1.31, < 2)
6
+ aws-sdk-cloudwatch (~> 1.28, < 2)
7
+ aws-sdk-codecommit (~> 1.28, < 2)
8
+ aws-sdk-codepipeline (~> 1.28, < 2)
9
+ aws-sdk-s3 (~> 1.60, < 2)
7
10
  cfndsl (~> 1.0, < 2)
11
+ term-ansicolor (~> 1, < 2)
8
12
  terminal-table (~> 1, < 2)
9
13
  thor (~> 0.20)
10
14
 
11
15
  GEM
12
16
  remote: https://rubygems.org/
13
17
  specs:
14
- aws-eventstream (1.0.3)
15
- aws-partitions (1.236.0)
16
- aws-sdk-cloudformation (1.26.0)
17
- aws-sdk-core (~> 3, >= 3.71.0)
18
+ aws-eventstream (1.1.0)
19
+ aws-partitions (1.390.0)
20
+ aws-sdk-cloudformation (1.44.0)
21
+ aws-sdk-core (~> 3, >= 3.109.0)
18
22
  aws-sigv4 (~> 1.1)
19
- aws-sdk-core (3.76.0)
20
- aws-eventstream (~> 1.0, >= 1.0.2)
21
- aws-partitions (~> 1, >= 1.228.0)
23
+ aws-sdk-cloudwatch (1.40.0)
24
+ aws-sdk-core (~> 3, >= 3.99.0)
25
+ aws-sigv4 (~> 1.1)
26
+ aws-sdk-codecommit (1.36.0)
27
+ aws-sdk-core (~> 3, >= 3.99.0)
28
+ aws-sigv4 (~> 1.1)
29
+ aws-sdk-codepipeline (1.33.0)
30
+ aws-sdk-core (~> 3, >= 3.99.0)
31
+ aws-sigv4 (~> 1.1)
32
+ aws-sdk-core (3.109.2)
33
+ aws-eventstream (~> 1, >= 1.0.2)
34
+ aws-partitions (~> 1, >= 1.239.0)
22
35
  aws-sigv4 (~> 1.1)
23
36
  jmespath (~> 1.0)
24
- aws-sdk-kms (1.25.0)
25
- aws-sdk-core (~> 3, >= 3.71.0)
37
+ aws-sdk-kms (1.39.0)
38
+ aws-sdk-core (~> 3, >= 3.109.0)
26
39
  aws-sigv4 (~> 1.1)
27
- aws-sdk-s3 (1.53.0)
28
- aws-sdk-core (~> 3, >= 3.71.0)
40
+ aws-sdk-s3 (1.84.0)
41
+ aws-sdk-core (~> 3, >= 3.109.0)
29
42
  aws-sdk-kms (~> 1)
30
43
  aws-sigv4 (~> 1.1)
31
- aws-sigv4 (1.1.0)
32
- aws-eventstream (~> 1.0, >= 1.0.2)
33
- cfndsl (1.0.0)
44
+ aws-sigv4 (1.2.2)
45
+ aws-eventstream (~> 1, >= 1.0.2)
46
+ cfndsl (1.2.0)
34
47
  hana (~> 1.3)
35
- hana (1.3.5)
48
+ hana (1.3.6)
36
49
  jmespath (1.4.0)
37
- rake (10.5.0)
50
+ rake (13.0.1)
51
+ sync (0.5.0)
52
+ term-ansicolor (1.7.1)
53
+ tins (~> 1.0)
38
54
  terminal-table (1.8.0)
39
55
  unicode-display_width (~> 1.1, >= 1.1.1)
40
56
  thor (0.20.3)
41
- unicode-display_width (1.6.0)
57
+ tins (1.25.0)
58
+ sync
59
+ unicode-display_width (1.7.0)
42
60
 
43
61
  PLATFORMS
44
62
  ruby
@@ -46,7 +64,7 @@ PLATFORMS
46
64
  DEPENDENCIES
47
65
  bundler (~> 2.0)
48
66
  cfn-guardian!
49
- rake (~> 10.0)
67
+ rake (~> 13.0)
50
68
 
51
69
  BUNDLED WITH
52
70
  2.0.2
data/README.md CHANGED
@@ -1,10 +1,14 @@
1
1
  # CfnGuardian
2
2
 
3
+ [Documentation](docs/overview.md)
4
+
3
5
  CfnGuardian is a AWS monitoring tool with a few capabilities:
4
6
 
5
7
  - creates cloudwatch alarms through cloudformation based upon resources defined in a YAML config
6
8
  - alerting through SNS using 4 levels of severity [ Critical, Warning, Task, Informational ]
7
9
  - has a standard set of default alarms across many AWS resources
10
+ - creates cloudwatch log metric filters with default alarms
11
+ - creates specfic aws events with sns targets
8
12
  - creates custom metrics for external checks through lambda functions such as
9
13
  - http endpoint availability
10
14
  - http status code matching
@@ -13,10 +17,13 @@ CfnGuardian is a AWS monitoring tool with a few capabilities:
13
17
  - ssl expiry
14
18
  - sql query
15
19
  - nrpe
20
+ - sftp availability
21
+ - sftp file download
22
+ - tls version checking
16
23
 
17
24
  **Supported AWS Resources**
18
25
 
19
- - AmazonMq
26
+ - AmazonMq(RabbitMQ and ActiveMQ)
20
27
  - ApiGateway
21
28
  - Application Targetgroups
22
29
  - Network TargetGroups
@@ -33,380 +40,4 @@ CfnGuardian is a AWS monitoring tool with a few capabilities:
33
40
  - RDS Instances
34
41
  - Redshift Cluster
35
42
  - SQS Queues
36
-
37
- ## Installation
38
-
39
- ```ruby
40
- gem install cfn-guardian
41
- ```
42
-
43
- ## Commands
44
-
45
- **compile**
46
-
47
- ```bash
48
- Usage:
49
- cfn-guardian compile c, --config=CONFIG
50
-
51
- Options:
52
- c, --config=CONFIG # yaml config file
53
- [--validate], [--no-validate] # validate cfn templates
54
- # Default: true
55
- [--bucket=BUCKET] # provide custom bucket name, will create a default bucket if not provided
56
- r, [--region=REGION] # set the AWS region
57
-
58
- Description:
59
- Generates CloudFormation templates from the alarm configuration and output to the out/ directory.
60
- ```
61
-
62
- **deploy**
63
-
64
- ```bash
65
- Usage:
66
- cfn-guardian deploy c, --config=CONFIG
67
-
68
- Options:
69
- c, --config=CONFIG # yaml config file
70
- [--bucket=BUCKET] # provide custom bucket name, will create a default bucket if not provided
71
- r, [--region=REGION] # set the AWS region
72
- r, [--stack-name=STACK_NAME] # set the Cloudformation stack name. Defaults to `guardian`
73
- [--sns-critical=SNS_CRITICAL] # sns topic arn for the critical alamrs
74
- [--sns-warning=SNS_WARNING] # sns topic arn for the warning alamrs
75
- [--sns-task=SNS_TASK] # sns topic arn for the task alamrs
76
- [--sns-informational=SNS_INFORMATIONAL] # sns topic arn for the informational alamrs
77
-
78
- Description:
79
- Generates CloudFormation templates from the alarm configuration and output to the out/ directory. Then copies the files to the s3 bucket and deploys the cloudformation.
80
- ```
81
-
82
- **show-alarms**
83
-
84
- ```bash
85
- Usage:
86
- cfn-guardian show-alarms c, --config=CONFIG
87
-
88
- Options:
89
- c, --config=CONFIG # yaml config file
90
- g, [--group=GROUP] # resource group
91
- n, [--name=NAME] # alarm name
92
- r, [--resource=RESOURCE] # resource id
93
-
94
- Description:
95
- Displays the configured settings for each alarm. Can be filtered by resource group, resource name and alarm name. Defaults to show all configured alarms.
96
- ```
97
-
98
- ```bash
99
- ECSCluster
100
- +--------------------------------------+-----------------------------------+
101
- | ECSContianerInstancesDisconnected |
102
- +--------------------------------------+-----------------------------------+
103
- | property | Value |
104
- +--------------------------------------+-----------------------------------+
105
- | actions_enabled | true |
106
- | alarm_action | Critical |
107
- | comparison_operator | GreaterThanThreshold |
108
- | datapoints_to_alarm | |
109
- | dimensions | {:ClusterName=>"MyCluster"} |
110
- | enabled | true |
111
- | evaluate_low_sample_count_percentile | |
112
- | evaluation_periods | 2 |
113
- | extended_statistic | |
114
- | metric_name | ECSContianerInstancesDisconnected |
115
- | namespace | EcsCICheck |
116
- | period | 300 |
117
- | resource | MyCluster |
118
- | resource_name | 3ccc504543e67a86f3fa43bb64cf592b |
119
- | statistic | Maximum |
120
- | threshold | 0 |
121
- | treat_missing_data | |
122
- | unit | |
123
- +--------------------------------------+-----------------------------------+
124
- ```
125
-
126
- ## Configuration
127
-
128
- Config is stored in a standard YAML file which will default to `alarms.yaml`. This can be overridden by supplying the `--config` switch.
129
-
130
- ### AWS Resources
131
-
132
- The resources key is where the resources are defined.
133
-
134
- ```yaml
135
- Resources:
136
- # resource group
137
- Ec2Instance:
138
- # Array of resources defining the resource id with the Id: key
139
- - Id: i-1a2b3c4d5e
140
- ```
141
-
142
- There are some resources that require more that the resource id to generate the alarm, for these cases addition key:values are required.
143
-
144
- ```yaml
145
- Resources:
146
- ApplicationTargetGroup:
147
- - Id: target-group-id
148
- # Target group requires the loadbalancer id for the alarm
149
- Loadbalancer: app/application-loadbalancer-id
150
- ```
151
-
152
- | Resource Group | Require Keys |
153
- | --------------------------- | ---------------- |
154
- | ApiGateway | Id |
155
- | AmazonMQBroker | Id |
156
- | AutoScalingGroup | Id |
157
- | DynamoDBTable | Id |
158
- | ElastiCacheReplicationGroup | Id |
159
- | ElasticFileSystem | Id |
160
- | Ec2Instance | Id |
161
- | EcsCluster | Id |
162
- | EcsService | Id, Cluster |
163
- | NetworkTargetGroup | Id, LoadBalancer |
164
- | ApplicationTargetGroup | Id, LoadBalancer |
165
- | ElasticLoadBalancer | Id |
166
- | RDSInstance | Id |
167
- | RDSClusterInstance | Id |
168
- | RedshiftCluster | Id |
169
- | Lambda | Id |
170
- | CloudFrontDistribution | Id |
171
- | SQSQueue | Id |
172
-
173
- ### Custom Metric Resources
174
-
175
- These are also defined under the resources key but more detail is required and differs per group.
176
-
177
- **Http**
178
-
179
- Cloudwatch NameSpace: `HttpCheck`
180
-
181
- ```yaml
182
- Resources:
183
- Http:
184
- # Array of resources defining the http endpoint with the Id: key
185
- - Id: https://api.example.com
186
- # enables the status code check
187
- StatusCode: 200
188
- # enables the SSL check
189
- Ssl: true
190
- - Id: https://www.example.com
191
- StatusCode: 301
192
- - Id: https://example.com
193
- StatusCode: 200
194
- Ssl: true
195
- # enables the body regex check
196
- BodyRegex: 'helloworld'
197
- ```
198
-
199
- **DomainExpiry**
200
-
201
- Cloudwatch NameSpace: `DNS`
202
-
203
- ```yaml
204
- Resources:
205
- DomainExpiry:
206
- # Array of resources defining the domain with the Id: key
207
- - Id: example.com
208
- ```
209
-
210
- **Nrpe**
211
-
212
- Cloudwatch NameSpace: `NRPE`
213
-
214
- *Note: This requires the nrpe agent running and configured on your EC2 Host*
215
-
216
- ```yaml
217
- Resources:
218
- Nrpe:
219
- # Array of host groups with the uniq identifier of Environment.
220
- # This will create a nrpe lambda per group attach to the defined vpc and subnets
221
- - Environment: Prod
222
- # VPC id for the vpc the EC2 hosts are running in
223
- VpcId: vpc-1234
224
- # Array of subnets to attach to the lambda function. Supply multiple if you want to be multi AZ.
225
- # Multiple subnets from the same AZ cannot be used!
226
- Subnets:
227
- - subnet-abcd
228
- Hosts:
229
- # Array of hosts with the Id: key defining the host private ip address
230
- - Id: 10.150.10.6
231
- # Array of nrpe commands to run against the host.
232
- # A custom metric and alarm is created for each command
233
- Commands:
234
- - check_disk
235
- - Id: 10.150.10.6
236
- Commands:
237
- - check_disk
238
- ```
239
-
240
- **Sql**
241
-
242
- Cloudwatch NameSpace: `SQL`
243
-
244
- ```yaml
245
- Resources:
246
- Sql:
247
- # Array of host groups with the uniq identifier of Environment.
248
- # This will create a sql lambda per group attach to the defined vpc and subnets
249
- - Environment: Prod
250
- # VPC id for the vpc the EC2 hosts are running in
251
- VpcId: vpc-1234
252
- # Array of subnets to attach to the lambda function. Supply multiple if you want to be multi AZ.
253
- # Multiple subnets from the same AZ cannot be used!
254
- Subnets:
255
- - subnet-1234
256
- Hosts:
257
- # Array of hosts with the Id: key defining the host private ip address
258
- - Id: my-rds-instance.example.com
259
- # Secret manager secret where the sql:// connection string key:value is defined
260
- # { "connectionString": "sql://username:password@mydb:3306/information_schema"}
261
- SecretId: MyTestDatabaseSecret
262
- # Database engine. supports mysql | postgres | mssql
263
- Engine: mysql
264
- Queries:
265
- # Array of SQL queries
266
- # MetricName used to create the custom metric and alarm
267
- - MetricName: LongRunningTransactions
268
- # SQL Query to execute
269
- Query: >-
270
- SELECT pl.host,trx_id,trx_started,trx_query
271
- FROM information_schema.INNODB_TRX it INNER
272
- JOIN information_schema.PROCESSLIST pl
273
- ON pl.Id=it.trx_mysql_thread_id
274
- WHERE it.trx_started < (NOW() - INTERVAL 4 HOUR);
275
- ```
276
-
277
- Create secretmanager secret:
278
-
279
- ```bash
280
- aws secretsmanager create-secret --name MyTestDatabaseSecret \
281
- --description "My test database secret for use with guardian sql check" \
282
- --secret-string '{"connectionString":"sql://username:password@mydb:3306/information_schema"}'
283
- ```
284
-
285
- ## Alarm Templates
286
-
287
- Each resource group has a set of default alarm templates which defines all the cloudwatch alarm options such as Threshold, Statistic, EvaluationPeriods etc. These can be manipulated in a few ways to change the values or create new alarms.
288
-
289
- Custom alarm templates are defined within the same YAML config file un the `Templates` key.
290
-
291
- ### Overriding Defaults
292
-
293
- ```yaml
294
- Templates:
295
- # define the resource group
296
- Ec2Instance:
297
- # define the Alarm name you want to override
298
- CPUUtilizationHigh:
299
- # supply the key value of the alarm property you want to override
300
- Threshold: 80
301
- ```
302
-
303
- ### Creating A New Alarm From A Default
304
-
305
- You can create a default alarm from a default alarm using the `Inherit:` key. This will inherit all properites from the default alarm which can then be overridden.
306
-
307
- ```yaml
308
- Templates:
309
- # define the resource group
310
- Ec2Instance:
311
- # define the Alarm name you want to override
312
- CPUUtilizationWarning:
313
- # Inherit the CPUUtilizationHigh alarm
314
- Inherit: CPUUtilizationHigh
315
- # supply the key value of the alarm property you want to override
316
- Threshold: 75
317
- EvaluationPeriods: 60
318
- AlarmAction: Warning
319
- ```
320
-
321
- ### Creating A New Alarm With No Defaults
322
-
323
- You can create a new alarm with out inheriting an existing one. This will the inherit the default properties for the resource group.
324
-
325
- ```yaml
326
- Templates:
327
- # define the resource group
328
- Ec2Instance:
329
- # define the Alarm name you want to override
330
- CPUUtilizationWarning:
331
- # metric name must be provided
332
- MetricName: CPUUtilization
333
- # supply the key value of the alarm property you want to override
334
- Statistic: Minimum
335
- Threshold: 75
336
- EvaluationPeriods: 60
337
- AlarmAction: Warning
338
- ```
339
-
340
- ### Disabling An Alarm
341
-
342
- You can disable an alarm by setting the alarm to `false`
343
-
344
- ```yaml
345
- Templates:
346
- # define the resource group
347
- Ec2Instance:
348
- # define the Alarm and set the value to false
349
- CPUUtilizationHigh: false
350
- ```
351
-
352
- ### Creating A New Resource Group
353
-
354
- You can create a new resource group based upon an existing resource group. For example if you had 2 target groups and wanted to disable an alarm for one but not the other you can create a new resource group which will inherit all the ApplicationTargetGroup alarms and the disabled the select alarm.
355
-
356
- ```yaml
357
- Resources:
358
- # the default resource group
359
- ApplicationTargetGroup:
360
- - Id: ApiTG
361
- LoadBalancer: MyPublicLB
362
- - Id: WebTG
363
- LoadBalancer: MyPublicLB
364
- - Id: ServiceTG
365
- LoadBalancer: MyPublicLB
366
-
367
- # my new custom resource group
368
- RedirectTargetGroup:
369
- - Id: RedirectTG
370
- LoadBalancer: MyPublicLB
371
-
372
- Templates:
373
- # create the new resource group
374
- RedirectTargetGroup:
375
- # inherit the ApplicationTargetGroup resource group
376
- Inherit: ApplicationTargetGroup
377
- # disable the selected alarm
378
- TargetResponseTime: false
379
- ```
380
-
381
- ## SNS Topics
382
-
383
- Create the topics before launching the guardian stack
384
-
385
- ```bash
386
- aws sns create-topic --name Guardian-Critical
387
- aws sns create-topic --name Guardian-Warning
388
- aws sns create-topic --name Guardian-Task
389
- aws sns create-topic --name Guardian-Informational
390
- ```
391
-
392
- SNS topics can be defined in the YAML config or during the `deploy` command using the sns switches. The full ARN must be used.
393
-
394
- ```yaml
395
- Topics:
396
- Critical: arn:aws:sns:ap-southeast-2:111111111111:Guardian-Critical
397
- Warning: arn:aws:sns:ap-southeast-2:111111111111:Guardian-Warning
398
- Task: arn:aws:sns:ap-southeast-2:111111111111:Guardian-Task
399
- Informational: arn:aws:sns:ap-southeast-2:111111111111:Guardian-Informational
400
- ```
401
-
402
- ## Severities
403
-
404
- Severties are defined in each alarm sing the `AlarmAction` key. There are 4 options `[ Critical, Warning, Task, Informational ]`
405
-
406
- ## Contributing
407
-
408
- Bug reports and pull requests are welcome on GitHub at https://github.com/base2services/cfn-guardian.
409
-
410
- ## License
411
-
412
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
43
+ - LogGroup Metric Filters