ACloudGuru/serverless-plugin-aws-alerts

Name: serverless-plugin-aws-alerts

Owner: A Cloud Guru

Description: A Serverless Framework plugin that creates CloudWatch alarms for functions.

Created: 2016-11-14 01:35:45.0

Updated: 2018-01-19 00:42:55.0

Pushed: 2017-11-13 05:46:48.0

Homepage:

Size: 130

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Serverless AWS Alerts Plugin

NPM version Build Status Dependency Status Coverage percentage

A Serverless plugin to easily add CloudWatch alarms to functions

Installation

npm i serverless-plugin-aws-alerts

Usage
ice: your-service
ider:
me: aws
ntime: nodejs4.3

om:
erts:
stages: # Optionally - select which stages to deploy alarms to
  - production
  - staging

dashboards: true

topics:
  ok: ${self:service}-${opt:stage}-alerts-ok
  alarm: ${self:service}-${opt:stage}-alerts-alarm
  insufficientData: ${self:service}-${opt:stage}-alerts-insufficientData
definitions:  # these defaults are merged with your definitions
  functionErrors:
    period: 300 # override period
  customAlarm:
    description: 'My custom alarm'
    namespace: 'AWS/Lambda'
    metric: duration
    threshold: 200
    statistic: Average
    period: 300
    evaluationPeriods: 1
    comparisonOperator: GreaterThanOrEqualToThreshold
alarms:
  - functionThrottles
  - functionErrors
  - functionInvocations
  - functionDuration

ins:
serverless-plugin-aws-alerts

tions:
o:
handler: foo.handler
alarms: # merged with function alarms
  - customAlarm
  - name: fooAlarm # creates new alarm or overwrites some properties of the alarm (with the same name) from definitions
    namespace: 'AWS/Lambda'
    metric: errors # define custom metrics here
    threshold: 1
    statistic: Minimum
    period: 60
    evaluationPeriods: 1
    comparisonOperator: GreaterThanOrEqualToThreshold
SNS Topics

If topic name is specified, plugin assumes that topic does not exist and will create it. To use existing topics, specify ARNs instead.

SNS Notifications

You can configure subscriptions to your SNS topics within your serverless.yml. For each subscription, you'll need to specify a protocol and an endpoint.

The following example will send email notifications to me@example.com for all messages to the Alarm topic:

om:
erts:
topics:
  alarm:
    topic: ${self:service}-${opt:stage}-alerts-alarm
    notifications:
      - protocol: email
        endpoint: me@example.com

You can configure notifications to send to webhook URLs, to SMS devices, to other Lambda functions, and more. Check out the AWS docs here for configuration options.

Metric Log Filters

You can monitor a log group for a function for a specific pattern. Do this by adding the pattern key. You can learn about custom patterns at: http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

The following would create a custom metric log filter based alarm named barAlarm. Any function that included this alarm would have its logs scanned for the pattern exception Bar and if found would trigger an alarm.

om:
erts:
function:
  - name: barAlarm
    metric: barExceptions
    threshold: 0
    statistic: Minimum
    period: 60
    evaluationPeriods: 1
    comparisonOperator: GreaterThanThreshold
    pattern: 'exception Bar'
  - name: bunyanErrors
    metric: BunyanErrors
    threshold: 0
    statistic: Sum
    period: 60
    evaluationPeriods: 1
    comparisonOperator: GreaterThanThreshold
    pattern: '{$.level > 40}'

Note: For custom log metrics, namespace property will automatically be set to stack name (e.g. fooservice-dev).

Default Definitions

The plugin provides some default definitions that you can simply drop into your application. For example:

ts:
erts:
- functionErrors
- functionThrottles
- functionInvocations
- functionDuration

If these definitions do not quite suit i.e. the threshold is too high, you can override a setting without creating a completely new definition.

ts:
finitions:  # these defaults are merged with your definitions
functionErrors:
  period: 300 # override period
  treatMissingData: notBreaching # override treatMissingData

The default definitions are below.

nitions:
nctionInvocations:
namespace: 'AWS/Lambda'
metric: Invocations
threshold: 100
statistic: Sum
period: 60
evaluationPeriods: 1
comparisonOperator: GreaterThanOrEqualToThreshold
treatMissingData: missing
nctionErrors:
namespace: 'AWS/Lambda'
metric: Errors
threshold: 1
statistic: Maximum
period: 60
evaluationPeriods: 1
comparisonOperator: GreaterThanOrEqualToThreshold
treatMissingData: missing
nctionDuration:
namespace: 'AWS/Lambda'
metric: Duration
threshold: 500
statistic: Maximum
period: 60
evaluationPeriods: 1
comparisonOperator: GreaterThanOrEqualToThreshold
treatMissingData: missing
nctionThrottles:
namespace: 'AWS/Lambda'
metric: Throttles
threshold: 1
statistic: Sum
period: 60
evaluationPeriods: 1
comparisonOperator: GreaterThanOrEqualToThreshold
treatMissingData: missing
Using Percentile Statistic for a Metric

Statistic not only supports SampleCount, Average, Sum, Minimum or Maximum as defined in CloudFormation here, but also percentiles. This is possible by leveraging ExtendedStatistic under the hood. This plugin will automatically choose the correct key for you. See an example below:

nitions:
nctionDuration:
namespace: 'AWS/Lambda'
metric: Duration
threshold: 100
statistic: 'p95'
period: 60
evaluationPeriods: 1
comparisonOperator: GreaterThanThreshold
treatMissingData: missing
License

MIT © A Cloud Guru


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.