Skip to content

Commit

Permalink
docs: add initial readme
Browse files Browse the repository at this point in the history
  • Loading branch information
LironEr committed Dec 2, 2023
1 parent 2605671 commit 5c83520
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 3 deletions.
142 changes: 141 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,141 @@
# serverless-aws-alarms
# Serverless AWS Alarms Plugin

[![serverless](http://public.serverless.com/badges/v3.svg)](https://www.serverless.com)
[![npm](https://img.shields.io/npm/v/serverless-aws-alarms)](https://www.npmjs.com/package/serverless-aws-alarms)
[![node](https://img.shields.io/node/v/serverless-aws-alarms)](https://github.com/LironEr/serverless-aws-alarms)
[![serverless](https://img.shields.io/npm/dependency-version/serverless-aws-alarms/peer/serverless.svg)](https://github.com/serverless/serverless)
[![license](https://img.shields.io/npm/l/serverless-aws-alarms)](https://www.npmjs.com/package/serverless-aws-alarms)

Serverless framework plugin that easily creates CloudWatch alarms for lambdas.

## Usage

```yml
service: service-name

plugins:
- serverless-aws-alarms

custom:
awsAlarms:
stages: # optional - select which stages to deploy alarms to
- staging
- production

actions:
default: # optional - default actions for all alarms
ok: arn:aws:sns:${self:provider.region}:${aws:accountId}:my-team-alerts-ok
alarm: arn:aws:sns:${self:provider.region}:${aws:accountId}:my-team-alerts-alarm
insufficientData: arn:aws:sns:${self:provider.region}:${aws:accountId}:my-team-alerts-insufficient-data
critical: # optional - create more actions
ok: !Ref MyTeamCriticalAlertsTopic # you can also use !Ref and other CloudFormation functions
alarm: !ImportValue 'my-team-alerts'
defaults:
nameTemplate: $[functionName]-$[metricName]-alarm # Optional - naming template for alarms, can be overwritten in definitions
prefixTemplate: $[stackName] # Optional - override the alarm name prefix

definitions: # these defaults are merged with your definitions
lambdaErrors:
enabled: true
period: 300 # override period
lambdaTimeout:
enabled: true
period: 300 # override period
threshold: 2000 # override threshold
okActions:
- critical
alarmActions:
- critical
insufficientDataActions: [] # override insufficientDataActions to empty array (instead of using default)
customAlarm: # create new alarm
enabled: false
prefixTemplate: $[stackName] # Optional - override the alarm name prefix
nameTemplate: $[functionName]-high-duration-alarm # Optional - override the alarm name
description: 'My custom alarm'
namespace: 'AWS/Lambda'
metric: Duration
threshold: 200
statistic: Average
period: 300
evaluationPeriods: 1
datapointsToAlarm: 1
comparisonOperator: GreaterThanOrEqualToThreshold

provider:
name: aws
runtime: nodejs18x

functions:
foo:
name: ${self:service}-foo
handler: foo.handler
alarms: # merged with definitions
customAlarm:
enabled: true
someAlarm: # creates new alarm for this lambda or overwrite some properties of the alarm (with the same name) from definitions
namespace: 'AWS/Lambda'
metric: Errors
threshold: 1
statistic: Minimum
period: 60
evaluationPeriods: 1
datapointsToAlarm: 1
comparisonOperator: GreaterThanOrEqualToThreshold
actionsEnabled: false
```
### Alarm defenition
Detailed description of the properties can be found in the [AWS documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-alarm.html).
| name | description | type | default |
| ----------------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- | --------------------------------- |
| enabled | Indicates whether the alarm will be created or not | `boolean` | `false` |
| prefixTemplate | Prefix alarm name | `string` | `''` |
| nameTemplate | The name of the alarm | `string` | `$[lambdaName]-$[definitionName]` |
| description | The description of the alarm | `string` | |
| namespace | The namespace of the metric associated with the alarm | `string` | |
| metric | The name of the metric associated with the alarm | `string` | |
| comparisonOperator | The arithmetic operation to use when comparing the specified statistic and threshold | `string` | |
| statistic | The statistic for the metric associated with the alarm | `string` | |
| threshold | The value to compare with the specified statistic | `number` | |
| period | The period, in seconds, over which the statistic is applied | `number` | |
| evaluationPeriods | The number of periods over which data is compared to the specified threshold | `number` | |
| datapointsToAlarm | The number of datapoints that must be breaching to trigger the alarm | `number` | |
| actionsEnabled | Indicates whether actions should be executed during any changes to the alarm state | `boolean` | |
| okActions | The actions to execute when this alarm transitions to the OK state from any other state | `string[]` | |
| alarmActions | The list of actions to execute when this alarm transitions into an ALARM state from any other state | `string[]` | |
| insufficientDataActions | The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state | `string[]` | |
| treatMissingData | Sets how this alarm is to handle missing data points | `string` | |
| metricFilter | Create an alarm based on a pattern found in a log group | [`AlarmMetricFilterDefinition`](#metric-filter-definition) | |

### Metric filter definition

Detailed description of the properties can be found in the [AWS documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html).

| name | description | type | default |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------- |
| pattern | A filter pattern for extracting metric data out of ingested log events. For more information, see [Filter and Pattern Syntax][FilterAndPatternSyntax] | `string` **required** | |
| metricValue | The value that is published to the CloudWatch metric | `string` \| `number` | |
| defaultValue | The value to emit when a filter pattern does not match a log event | `number` | |
| nameTemplate | The name of the metric filter | `string` | `$[lambdaName]$[definitionName]AlarmFilter` |

### Name template placeholders

You can use the following placeholders in the `nameTemplate` and `prefixTemplate` properties:

- `stackName` - the name of the stack
- `lambdaName` - the name of the lambda
- `lambdaId` - the name of the lambda resource (the key in `functions` section)
- `lambdaLogicalId` - the name of the lambda resource in the CloudFormation template
- `metricName` - the name of the metric (from alarm defenition)
- `definitionName` - the name of the alarm definition

Usage example:

```yml
nameTemplate: $[stackName]-$[lambdaName]-$[metricName]-alarm
prefixTemplate: $[stackName]
```

[FilterAndPatternSyntax]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
"serverless",
"serverless framework",
"serverless plugin",
"aws"
"aws",
"aws lambda",
"aws cloudwatch",
"monitoring"
],
"engines": {
"node": ">=18"
Expand Down
1 change: 0 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ export interface PluginConfig {
defaults?: Partial<AlarmDefinition>;
actions?: Record<string, AlarmActions>;
definitions?: Record<string, AlarmDefinition>;
customPlaceholders?: Record<string, string>;
}

export type ServerlessLambdaDefinition = (Serverless.FunctionDefinitionHandler | Serverless.FunctionDefinitionImage) & {
Expand Down

0 comments on commit 5c83520

Please sign in to comment.