Skip to content

serverless-plugins/serverless-librato-alerts

Repository files navigation

serverless-librato-alerts

Serverless plugin for Librato Alerts

Configuration

Alerts can be defined on a global level under the custom section. Definitions can be overwritten per function and function specific alerts can be defined within the function definition.

Template strings

Template strings can contain the following tokens:

Token Description
$[stackName] Stack name if defined (provider.stackName). If undefined, defaults to: <service>-<stage>
$[serviceName] Name of service (service.name)
$[stage] Name of the stage. Value obtained in this order: --stage CLI option, config.stage, provider.stage, or default to dev
$[functionName] Name of function
$[functionId] Logical id of the function. This is the name of the function with - replaced with Dash, _ replaced with Underscore, and Function suffix added
$[alertName] Name of alert
$[env:<name>] Access an environment variable value (will not decode SSM parameter store references)

Template strings can contain the following function tokens:

Function Token Description
$(camelCase <value>) Converts <value> to camel case
$(kebabCase <value>) Converts <value> to kebab case
$(lowerFirst <value>) Converts the first character of <value> to lower case
$(toLower <value>) Converts <value>, as a whole, to lower case just like String#toLowerCase.
$(upperFirst <value>) Converts the first character of <value> to upper case
$(toUpper <value>) Converts <value>, as a whole, to upper case just like String#toUpperCase.

Usage

service: foo
provider:
  name: aws
  runtime: nodejs20.x

custom:
  libratoAlerts:
    stages: # Optionally - select which stages to deploy alarms to
      - production
      - staging

    nameTemplate: "$[serviceName]_$[stage].$[functionName].$[alertName]" # Optionally - naming template for alerts, can be overwritten in definitions
    nameSearchForUpdatesAndDeletes: "$[serviceName]_$[stage]." # Should be based on the nameTemplate. Only supports $[stackName], $[serviceName], and $[stage]

    definitions:  # these defaults are merged with your definitions
      - name: not_running
        description: 'Alert when function has not run in the last hour. Repeat alert every 15 minutes until cleared'
        conditions:
          - metric: "$(upperFirst $[functionName]).overall_time"
            type: 'absent'
            duration: 3600
        rearmSeconds: 900
        notify:
          - 145 # id of service 1
          - 42  # id of service 2
      - name: foo_bar.baz
        description: 'Alert when baz immediately goes above 5'
        nameTemplate: $[stage].$[functionName].foo_bar.baz # Optionally - naming template for the alarms, overwrites globally defined one
        rearmSeconds: 600 # Specifies the minimum amount of time between sending alert notifications, in seconds. Defaults to 600s
        conditions:
          - metric: 'foo.bar.baz'
              create: true # Control the properties of the metric if it does not exist and must be created
              type: 'guage'
              period: 60
            type: 'above' # above, below, absent
            tags:
              - name: environment
                values:
                  - production
            summaryFunction: 'average' # min, max, average, sum, count, derivative
            duration: 0 # 0 for immediately. Or >= 60 and <= 3600 seconds
            threshold: 5
        notify: 24 # id of service
    global:
      - not_running # Will be created for all functions

plugins:
  - serverless-librato-alerts

functions:
  foo:
    handler: foo.handler
    libratoAlerts:  # merged with global librato-alerts
      - foo_bar.baz
      - not_running # override specific settings
        conditions:
          - metric: $[functionName].overall_time
            type: 'stops reporting'
            threshold: 15