Bender - Serverless ETL Framework

Bender provides an extendable Java framework for creating serverless ETL functions on AWS Lambda.
It handles the complex plumbing and provides the interfaces necessary to build modules for all aspects of the ETL
process. Check it out at https://github.com/nextdoor/bender.

Specifying Configuration


S3 File


Upload your configuration file to an S3 bucket and when creating your lambda function specify the environment
variable BENDER_CONFIG pointing to your configuration file in S3. For example BENDER_CONFIG=s3://example/bender.json.
Note that your function will require sufficient IAM privileges to read from this file.

Embedded File


If using APEX to deploy your lambda function you can add your configuration file inside a config directory.
See https://github.com/Nextdoor/bender/tree/master/example_project for an example. When using this method name your
configuration files corresponding to your lambda function aliases. Default is $LATEST.json

Variable Substitution


Your configuration file can contain variables which are substituted for lambda function
environment variables. In your configuration wrap the environment with <> tags.
For example:
{"foo": <BAR>}

Note that if BENDER_SKIP_VALIDATE=true env var is set then Bender will not validate the configuration at runtime.
Use this if you validate the configuration files with the CLI tool prior to deployment.

{}
+
handler
one of DynamodbHandler S3Handler SNSS3Handler KinesisHandler

Handler configuration

DynamodbHandler

For use with DynamoDB stream triggers. Set the function handler to "com.nextdoor.bender.handler.dynamodb.DynamodbHandler::handler". The following IAM permissions are also required: dynamodb:DescribeStream, dynamodb:GetRecords, dynamodb:GetShardIterator, and dynamodb:ListStreams. DynamoDB stream events use AttributeValues (see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html) which uses data type as name, but such construct is converted to standard JSON by DynamodbHandler. For example, {"value":{"N":"123"}} becomes {"value":123}.

{}
+
type
string constant DynamodbHandler default DynamodbHandler
fail_on_exception
boolean default true

If an uncaught exception occurs fail the function

include_function_tags
boolean default false

Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required.

metric_tags
array Tag

Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence.

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
queue_size
integer default 500

Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput.

{
  "type": "object",
  "additionalProperties": false,
  "description": "For use with DynamoDB stream triggers. Set the function handler to \"com.nextdoor.bender.handler.dynamodb.DynamodbHandler::handler\". The following IAM permissions are also required: dynamodb:DescribeStream, dynamodb:GetRecords, dynamodb:GetShardIterator, and dynamodb:ListStreams. DynamoDB stream events use AttributeValues (see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html) which uses data type as name, but such construct is converted to standard JSON by DynamodbHandler. For example, {\"value\":{\"N\":\"123\"}} becomes {\"value\":123}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DynamodbHandler"
      ],
      "default": "DynamodbHandler"
    },
    "fail_on_exception": {
      "type": "boolean",
      "default": true,
      "description": "If an uncaught exception occurs fail the function"
    },
    "include_function_tags": {
      "type": "boolean",
      "default": false,
      "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
    },
    "metric_tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
    },
    "queue_size": {
      "type": "integer",
      "default": 500,
      "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
    }
  },
  "title": "DynamodbHandler",
  "required": [
    "type"
  ]
}
S3Handler

For use with S3 Object creation Lambda triggers. You will also need to set the function handler to "com.nextdoor.bender.handler.s3.S3Handler::handler". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissoins to the S3 bucket to invoke your function.

{}
+
type
string constant S3Handler default S3Handler
fail_on_exception
boolean default true

If an uncaught exception occurs fail the function

include_function_tags
boolean default false

Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required.

metric_tags
array Tag

Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence.

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
queue_size
integer default 500

Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput.

sns_notification_arn
string

SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish.

log_s3_trigger
boolean default false

Logs the original S3 notification that triggered the function.

{
  "type": "object",
  "additionalProperties": false,
  "description": "For use with S3 Object creation Lambda triggers. You will also need to set the function handler to \"com.nextdoor.bender.handler.s3.S3Handler::handler\". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissoins to the S3 bucket to invoke your function.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "S3Handler"
      ],
      "default": "S3Handler"
    },
    "fail_on_exception": {
      "type": "boolean",
      "default": true,
      "description": "If an uncaught exception occurs fail the function"
    },
    "include_function_tags": {
      "type": "boolean",
      "default": false,
      "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
    },
    "metric_tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
    },
    "queue_size": {
      "type": "integer",
      "default": 500,
      "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
    },
    "sns_notification_arn": {
      "type": "string",
      "description": "SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish."
    },
    "log_s3_trigger": {
      "type": "boolean",
      "default": false,
      "description": "Logs the original S3 notification that triggered the function."
    }
  },
  "title": "S3Handler",
  "required": [
    "type"
  ]
}
SNSS3Handler

Similar to the S3Handler but reads SNS notifications which contain S3 Object creation events. This is may be required if you have multiple functions running against the same bucket. For more information about S3 SNS triggers see https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/.You will need to set the function handler to "com.nextdoor.bender.handler.s3.SNSS3Handler::handler". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissions to S3 bucket to publish to SNS and SNS to invoke your function.

{}
+
type
string constant SNSS3Handler default SNSS3Handler
fail_on_exception
boolean default true

If an uncaught exception occurs fail the function

include_function_tags
boolean default false

Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required.

metric_tags
array Tag

Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence.

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
queue_size
integer default 500

Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput.

sns_notification_arn
string

SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish.

log_sns_trigger
boolean default false

Logs the original SNS notification that triggered the function.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Similar to the S3Handler but reads SNS notifications which contain S3 Object creation events. This is may be required if you have multiple functions running against the same bucket. For more information about S3 SNS triggers see https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/.You will need to set the function handler to \"com.nextdoor.bender.handler.s3.SNSS3Handler::handler\". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissions to S3 bucket to publish to SNS and SNS to invoke your function.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SNSS3Handler"
      ],
      "default": "SNSS3Handler"
    },
    "fail_on_exception": {
      "type": "boolean",
      "default": true,
      "description": "If an uncaught exception occurs fail the function"
    },
    "include_function_tags": {
      "type": "boolean",
      "default": false,
      "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
    },
    "metric_tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
    },
    "queue_size": {
      "type": "integer",
      "default": 500,
      "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
    },
    "sns_notification_arn": {
      "type": "string",
      "description": "SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish."
    },
    "log_sns_trigger": {
      "type": "boolean",
      "default": false,
      "description": "Logs the original SNS notification that triggered the function."
    }
  },
  "title": "SNSS3Handler",
  "required": [
    "type"
  ]
}
KinesisHandler

For use with Kinesis triggers. Set the function handler to "com.nextdoor.bender.handler.kinesis.KinesisHandler::handler". The following IAM permissions are also required: kinesis:DescribeStream, kinesis:ListStreams, kinesis:GetShardIterator, kinesis:GetRecords, and kinesis:ListTagsForStream.

{}
+
type
string constant KinesisHandler default KinesisHandler
fail_on_exception
boolean default true

If an uncaught exception occurs fail the function

include_function_tags
boolean default false

Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required.

metric_tags
array Tag

Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence.

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
queue_size
integer default 500

Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput.

add_kinesis_shard_to_partitions
boolean default false

Whether to add kinesis shardid to the event partitions list. The key is "shardid" and value will look like "shardId-000000000000". Note that partitioning must be either enabled or supported by the transport you use. Not all transporters support partitioning.

decompress
boolean default false

If this flag is set to true, then the Kinesis handler will assume all incoming Kinesis record's data will be a gzip that needs to be decompressed before it's stored as a string in the KinesisInternalEvent. One example use case is how using a CloudWatch log subscription filter on Kinesis results in data being stored as a zip that is base64 encoded. The Kinesis Java SDK willtake care of decoding so this flag ensures the gzip is inflated.

buffer_size
integer

This sets the buffer size (default 1024) when Kinesis data is a gzip and needs to be expanded. This flag is only used if the getAssumeKinesisDataIsGzipped config is set as true.

add_shardid_to_partitions
boolean
{
  "type": "object",
  "additionalProperties": false,
  "description": "For use with Kinesis triggers. Set the function handler to \"com.nextdoor.bender.handler.kinesis.KinesisHandler::handler\". The following IAM permissions are also required: kinesis:DescribeStream, kinesis:ListStreams, kinesis:GetShardIterator, kinesis:GetRecords, and kinesis:ListTagsForStream.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KinesisHandler"
      ],
      "default": "KinesisHandler"
    },
    "fail_on_exception": {
      "type": "boolean",
      "default": true,
      "description": "If an uncaught exception occurs fail the function"
    },
    "include_function_tags": {
      "type": "boolean",
      "default": false,
      "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
    },
    "metric_tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
    },
    "queue_size": {
      "type": "integer",
      "default": 500,
      "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
    },
    "add_kinesis_shard_to_partitions": {
      "type": "boolean",
      "default": false,
      "description": "Whether to add kinesis shardid to the event partitions list. The key is \"__shardid__\" and value will look like \"shardId-000000000000\". Note that partitioning must be either enabled or supported by the transport you use. Not all transporters support partitioning."
    },
    "decompress": {
      "type": "boolean",
      "default": false,
      "description": "If this flag is set to true, then the Kinesis handler will assume all incoming Kinesis record's data will be a gzip that needs to be decompressed before it's stored as a string in the KinesisInternalEvent. One example use case is how using a CloudWatch log subscription filter on Kinesis results in data being stored as a zip that is base64 encoded. The Kinesis Java SDK willtake care of decoding so this flag ensures the gzip is inflated."
    },
    "buffer_size": {
      "type": "integer",
      "description": "This sets the buffer size (default 1024) when Kinesis data is a gzip and needs to be expanded. This flag is only used if the getAssumeKinesisDataIsGzipped config is set as true."
    },
    "add_shardid_to_partitions": {
      "type": "boolean"
    }
  },
  "title": "KinesisHandler",
  "required": [
    "type"
  ]
}
sources
array SourceConfig

Source configurations. This includes deserializer and operators.

SourceConfig
{}
+
name
string

Source name

source_regex
string default .*

Pattern to match source trigger against

regex_patterns
array string

Regex patterns to filter events by prior to deserialization

contains_strings
array string

Filter events containing these Strings prior to deserialization

deserializer
one of Regex GenericJson

Deserializer configuration

Regex

Extracts fields from a line with regex groups. Note that number of groups in regex must match number of fields specified.

{}
+
type
string constant Regex default Regex
fields
array ReFieldConfig

List of field names and their types

ReFieldConfig
{}
+
name
string

Name to give to field

type
string enum STRING NUMBER BOOLEAN

Data type of field

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Name to give to field"
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of field"
    }
  },
  "required": [
    "name",
    "type"
  ]
}
use_re2j
boolean default false

Use the faster but less flexible regex library. See https://github.com/google/re2j

{
  "type": "object",
  "additionalProperties": false,
  "description": "Extracts fields from a line with regex groups. Note that number of groups in regex must match number of fields specified.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Regex"
      ],
      "default": "Regex"
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ReFieldConfig"
      },
      "description": "List of field names and their types"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "use_re2j": {
      "type": "boolean",
      "default": false,
      "description": "Use the faster but less flexible regex library. See https://github.com/google/re2j"
    }
  },
  "title": "Regex",
  "required": [
    "type",
    "fields",
    "regex"
  ]
}
GenericJson

Deserializes JSON without performing schema validation.

{}
+
type
string constant GenericJson default GenericJson
nested_field_configs
array FieldConfig

Configuration on how to interpret string fields which can also be deserialized as JSON. For example: {"foo": "{"bar": "baz"}"} will become {"foo": {"bar": "baz"}"}.

FieldConfig
{}
+
field
string

String field which contains a JSON object.

prefix_field
string

Field to put any data which preceded JSON object.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "field": {
      "type": "string",
      "description": "String field which contains a JSON object."
    },
    "prefix_field": {
      "type": "string",
      "description": "Field to put any data which preceded JSON object."
    }
  },
  "required": [
    "field"
  ]
}
root_node_override_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deserializes JSON without performing schema validation.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GenericJson"
      ],
      "default": "GenericJson"
    },
    "nested_field_configs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/FieldConfig"
      },
      "description": "Configuration on how to interpret string fields which can also be deserialized as JSON. For example: {\"foo\": \"{\"bar\": \"baz\"}\"} will become {\"foo\": {\"bar\": \"baz\"}\"}."
    },
    "root_node_override_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "GenericJson",
  "required": [
    "type"
  ]
}
operations
array any of ForkOperation LowerCaseKeyOperation JsonRootNodeOperation SubstitutionOperation PartitionOperation JsonArraySplitOperation UrlDecodeOperation DeleteFieldOperation JsonDropArraysOperation TimeOperation RegexFilterOperation GeoIpOperation FlattenOperation BasicFilterOperation KeyNameReplacementOperation ConditionalOperation GelfOperation JsonKeyNameOperation

Operation configuration

ForkOperation

The fork operation allows nesting multiple operation pipelines within Bender. Each fork (pipeline) has its own operations and operates independently on a clone of the original event. If no filters are applied then this can result in multiple output events for each input event.

{}
+
type
string constant ForkOperation default ForkOperation
forks
array Fork

List of forks.

Fork
{}
+
operations
array any of ForkOperation LowerCaseKeyOperation JsonRootNodeOperation SubstitutionOperation PartitionOperation JsonArraySplitOperation UrlDecodeOperation DeleteFieldOperation JsonDropArraysOperation TimeOperation RegexFilterOperation GeoIpOperation FlattenOperation BasicFilterOperation KeyNameReplacementOperation ConditionalOperation GelfOperation JsonKeyNameOperation

List of operations to perform.

circular reference

{}
+
{
  "description": "_circular reference_"
}
LowerCaseKeyOperation

Provided a JSON object it will recursively lower case all fields.

{}
+
type
string constant LowerCaseKeyOperation default LowerCaseKeyOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively lower case all fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "LowerCaseKeyOperation"
      ],
      "default": "LowerCaseKeyOperation"
    }
  },
  "title": "LowerCaseKeyOperation",
  "required": [
    "type"
  ]
}
JsonRootNodeOperation

Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {"foo": {"bar": {"baz": 1}}} and specified path $.foo.bar the operation will produce {"baz": 1} as the new payload.

{}
+
type
string constant JsonRootNodeOperation default JsonRootNodeOperation
root_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonRootNodeOperation"
      ],
      "default": "JsonRootNodeOperation"
    },
    "root_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "JsonRootNodeOperation",
  "required": [
    "type",
    "root_path"
  ]
}
SubstitutionOperation

This operation allows substituting event fields with different sources such as other fields, static values, or metadata.

{}
+
type
string constant SubstitutionOperation default SubstitutionOperation
substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions to perform.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}
NestedSubstitution

The nested substitution helps build a Map object containing the result of other substitution.

{}
+
type
string constant NestedSubstitution default NestedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions that will build up the final Map object.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The nested substitution helps build a Map object containing the result of other substitution.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "NestedSubstitution"
      ],
      "default": "NestedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions that will build up the final Map object.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "NestedSubstitution",
  "required": [
    "type",
    "key"
  ]
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SubstitutionOperation"
      ],
      "default": "SubstitutionOperation"
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "SubstitutionOperation",
  "required": [
    "type",
    "substitutions"
  ]
}
PartitionOperation

Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath

{}
+
type
string constant PartitionOperation default PartitionOperation
partition_specs
array PartitionSpec

Configuration to specify object fields that are treated as partitions

PartitionSpec
{}
+
name
string

Value to use as the key for the partition.

sources
array string

Fields to use for the value of the partition.

interpreter
string enum STRING MILLISECONDS SECONDS STATIC default STRING

Interpreter to use on the partition value.

format
string

Java date format to use when using a time based interpreter.

string_format
string enum TOLOWER TOUPPER NONE default NONE

Basic string formatting.

seconds_to_round
integer [0;86400] default 0

Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Value to use as the key for the partition."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to use for the value of the partition."
    },
    "interpreter": {
      "type": "string",
      "default": "STRING",
      "enum": [
        "STRING",
        "MILLISECONDS",
        "SECONDS",
        "STATIC"
      ],
      "description": "Interpreter to use on the partition value."
    },
    "format": {
      "type": "string",
      "description": "Java date format to use when using a time based interpreter."
    },
    "string_format": {
      "type": "string",
      "default": "NONE",
      "enum": [
        "TOLOWER",
        "TOUPPER",
        "NONE"
      ],
      "description": "Basic string formatting."
    },
    "seconds_to_round": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
    }
  },
  "required": [
    "name",
    "interpreter"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PartitionOperation"
      ],
      "default": "PartitionOperation"
    },
    "partition_specs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PartitionSpec"
      },
      "description": "Configuration to specify object fields that are treated as partitions"
    }
  },
  "title": "PartitionOperation",
  "required": [
    "type"
  ]
}
JsonArraySplitOperation

Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{"foo": 1}, {"bar": 2}] will be turned into two seperate events with payloads of {"foo": 1} and {"bar": 2}.

{}
+
type
string constant JsonArraySplitOperation default JsonArraySplitOperation
path
string

Path to a JSON node which is an array. See https://github.com/jayway/JsonPath

fields_to_keep
array string

If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonArraySplitOperation"
      ],
      "default": "JsonArraySplitOperation"
    },
    "path": {
      "type": "string",
      "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
    },
    "fields_to_keep": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
    }
  },
  "title": "JsonArraySplitOperation",
  "required": [
    "type",
    "path"
  ]
}
UrlDecodeOperation

Performs a URL decode on the specified fields.

{}
+
type
string constant UrlDecodeOperation default UrlDecodeOperation
fields
array string

fields

times
integer [1;65535] default 1

Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Performs a URL decode on the specified fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlDecodeOperation"
      ],
      "default": "UrlDecodeOperation"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "fields"
    },
    "times": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 1,
      "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
    }
  },
  "title": "UrlDecodeOperation",
  "required": [
    "type",
    "fields"
  ]
}
DeleteFieldOperation

Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant DeleteFieldOperation default DeleteFieldOperation
key_field
string

Name of field key to be deleted.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DeleteFieldOperation"
      ],
      "default": "DeleteFieldOperation"
    },
    "key_field": {
      "type": "string",
      "description": "Name of field key to be deleted."
    }
  },
  "title": "DeleteFieldOperation",
  "required": [
    "type",
    "key_field"
  ]
}
JsonDropArraysOperation

Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html

{}
+
type
string constant JsonDropArraysOperation default JsonDropArraysOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonDropArraysOperation"
      ],
      "default": "JsonDropArraysOperation"
    }
  },
  "title": "JsonDropArraysOperation",
  "required": [
    "type"
  ]
}
TimeOperation

Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant TimeOperation default TimeOperation
time_field
string

Name of field to use as time field

time_field_type
string enum SECONDS MILLISECONDS ISO8601

How to interpret time field

{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "TimeOperation"
      ],
      "default": "TimeOperation"
    },
    "time_field": {
      "type": "string",
      "description": "Name of field to use as time field"
    },
    "time_field_type": {
      "type": "string",
      "enum": [
        "SECONDS",
        "MILLISECONDS",
        "ISO8601"
      ],
      "description": "How to interpret time field"
    }
  },
  "title": "TimeOperation",
  "required": [
    "type",
    "time_field",
    "time_field_type"
  ]
}
RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
GeoIpOperation

Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example

input = {"ip": "8.8.8.8"}

output = {"ip": "8.8.8.8", "geo_ip": {"location": {"lat": 37.751, "lon": -97.822}}}

Note 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.

Note 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.

{}
+
type
string constant GeoIpOperation default GeoIpOperation
src_field_name
string

Field containing an IP address string in the payload

dst_field_name
string default geo_ip

Field name to save the geo data to

geo_lite_db
string

S3 path to the GeoLite2 City database file. Prefix with s3://

geo_properties
array enum string
COUNTRY_NAME COUNTRY_ISO_CODE SUBDIVISION_NAME SUBDIVISION_ISO_CODE CITY_NAME POSTAL_CODE LOCATION

List of geo properties to include

fail_on_not_found
boolean default false

If ip lookup fails also fail the operation. Doing so will filter out the event.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GeoIpOperation"
      ],
      "default": "GeoIpOperation"
    },
    "src_field_name": {
      "type": "string",
      "description": "Field containing an IP address string in the payload"
    },
    "dst_field_name": {
      "type": "string",
      "default": "geo_ip",
      "description": "Field name to save the geo data to"
    },
    "geo_lite_db": {
      "type": "string",
      "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
    },
    "geo_properties": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "COUNTRY_NAME",
          "COUNTRY_ISO_CODE",
          "SUBDIVISION_NAME",
          "SUBDIVISION_ISO_CODE",
          "CITY_NAME",
          "POSTAL_CODE",
          "LOCATION"
        ]
      },
      "description": "List of geo properties to include"
    },
    "fail_on_not_found": {
      "type": "boolean",
      "default": false,
      "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
    }
  },
  "title": "GeoIpOperation",
  "required": [
    "type",
    "src_field_name",
    "dst_field_name",
    "geo_lite_db"
  ]
}
FlattenOperation

Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {"foo": {"bar": {"baz": 1}}} the operation will produce {"foo.bar.baz": 1} as the new payload.

{}
+
type
string constant FlattenOperation default FlattenOperation
separator
string default .

Separator to be used between nested key names (typically a dot(.))

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FlattenOperation"
      ],
      "default": "FlattenOperation"
    },
    "separator": {
      "type": "string",
      "default": ".",
      "description": "Separator to be used between nested key names (typically a dot(.))"
    }
  },
  "title": "FlattenOperation",
  "required": [
    "type"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
KeyNameReplacementOperation

Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.

{}
+
type
string constant KeyNameReplacementOperation default KeyNameReplacementOperation
replacement
string default

If a match is found then replace match with this value. Defaults to emptry string.

drop
boolean default false

If a match is found then drop the key/value.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KeyNameReplacementOperation"
      ],
      "default": "KeyNameReplacementOperation"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "replacement": {
      "type": "string",
      "default": "",
      "description": "If a match is found then replace match with this value. Defaults to emptry string."
    },
    "drop": {
      "type": "boolean",
      "default": false,
      "description": "If a match is found then drop the key/value."
    }
  },
  "title": "KeyNameReplacementOperation",
  "required": [
    "type",
    "regex"
  ]
}
ConditionalOperation

The conditional operation allows for 'if else' style branches in the flow of Bender operations. Conditions are evaluated in order of appearance and the first matching condition will receive the event.

{}
+
type
string constant ConditionalOperation default ConditionalOperation
conditions
array Condition

List of conditions and their operations.

Condition
{}
+
operations
array any of ForkOperation LowerCaseKeyOperation JsonRootNodeOperation SubstitutionOperation PartitionOperation JsonArraySplitOperation UrlDecodeOperation DeleteFieldOperation JsonDropArraysOperation TimeOperation RegexFilterOperation GeoIpOperation FlattenOperation BasicFilterOperation KeyNameReplacementOperation ConditionalOperation GelfOperation JsonKeyNameOperation

List of operations to perform.

circular reference

{}
+
{
  "description": "_circular reference_"
}
LowerCaseKeyOperation

Provided a JSON object it will recursively lower case all fields.

{}
+
type
string constant LowerCaseKeyOperation default LowerCaseKeyOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively lower case all fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "LowerCaseKeyOperation"
      ],
      "default": "LowerCaseKeyOperation"
    }
  },
  "title": "LowerCaseKeyOperation",
  "required": [
    "type"
  ]
}
JsonRootNodeOperation

Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {"foo": {"bar": {"baz": 1}}} and specified path $.foo.bar the operation will produce {"baz": 1} as the new payload.

{}
+
type
string constant JsonRootNodeOperation default JsonRootNodeOperation
root_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonRootNodeOperation"
      ],
      "default": "JsonRootNodeOperation"
    },
    "root_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "JsonRootNodeOperation",
  "required": [
    "type",
    "root_path"
  ]
}
SubstitutionOperation

This operation allows substituting event fields with different sources such as other fields, static values, or metadata.

{}
+
type
string constant SubstitutionOperation default SubstitutionOperation
substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions to perform.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}
NestedSubstitution

The nested substitution helps build a Map object containing the result of other substitution.

{}
+
type
string constant NestedSubstitution default NestedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions that will build up the final Map object.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The nested substitution helps build a Map object containing the result of other substitution.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "NestedSubstitution"
      ],
      "default": "NestedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions that will build up the final Map object.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "NestedSubstitution",
  "required": [
    "type",
    "key"
  ]
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SubstitutionOperation"
      ],
      "default": "SubstitutionOperation"
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "SubstitutionOperation",
  "required": [
    "type",
    "substitutions"
  ]
}
PartitionOperation

Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath

{}
+
type
string constant PartitionOperation default PartitionOperation
partition_specs
array PartitionSpec

Configuration to specify object fields that are treated as partitions

PartitionSpec
{}
+
name
string

Value to use as the key for the partition.

sources
array string

Fields to use for the value of the partition.

interpreter
string enum STRING MILLISECONDS SECONDS STATIC default STRING

Interpreter to use on the partition value.

format
string

Java date format to use when using a time based interpreter.

string_format
string enum TOLOWER TOUPPER NONE default NONE

Basic string formatting.

seconds_to_round
integer [0;86400] default 0

Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Value to use as the key for the partition."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to use for the value of the partition."
    },
    "interpreter": {
      "type": "string",
      "default": "STRING",
      "enum": [
        "STRING",
        "MILLISECONDS",
        "SECONDS",
        "STATIC"
      ],
      "description": "Interpreter to use on the partition value."
    },
    "format": {
      "type": "string",
      "description": "Java date format to use when using a time based interpreter."
    },
    "string_format": {
      "type": "string",
      "default": "NONE",
      "enum": [
        "TOLOWER",
        "TOUPPER",
        "NONE"
      ],
      "description": "Basic string formatting."
    },
    "seconds_to_round": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
    }
  },
  "required": [
    "name",
    "interpreter"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PartitionOperation"
      ],
      "default": "PartitionOperation"
    },
    "partition_specs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PartitionSpec"
      },
      "description": "Configuration to specify object fields that are treated as partitions"
    }
  },
  "title": "PartitionOperation",
  "required": [
    "type"
  ]
}
JsonArraySplitOperation

Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{"foo": 1}, {"bar": 2}] will be turned into two seperate events with payloads of {"foo": 1} and {"bar": 2}.

{}
+
type
string constant JsonArraySplitOperation default JsonArraySplitOperation
path
string

Path to a JSON node which is an array. See https://github.com/jayway/JsonPath

fields_to_keep
array string

If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonArraySplitOperation"
      ],
      "default": "JsonArraySplitOperation"
    },
    "path": {
      "type": "string",
      "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
    },
    "fields_to_keep": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
    }
  },
  "title": "JsonArraySplitOperation",
  "required": [
    "type",
    "path"
  ]
}
UrlDecodeOperation

Performs a URL decode on the specified fields.

{}
+
type
string constant UrlDecodeOperation default UrlDecodeOperation
fields
array string

fields

times
integer [1;65535] default 1

Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Performs a URL decode on the specified fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlDecodeOperation"
      ],
      "default": "UrlDecodeOperation"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "fields"
    },
    "times": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 1,
      "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
    }
  },
  "title": "UrlDecodeOperation",
  "required": [
    "type",
    "fields"
  ]
}
DeleteFieldOperation

Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant DeleteFieldOperation default DeleteFieldOperation
key_field
string

Name of field key to be deleted.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DeleteFieldOperation"
      ],
      "default": "DeleteFieldOperation"
    },
    "key_field": {
      "type": "string",
      "description": "Name of field key to be deleted."
    }
  },
  "title": "DeleteFieldOperation",
  "required": [
    "type",
    "key_field"
  ]
}
JsonDropArraysOperation

Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html

{}
+
type
string constant JsonDropArraysOperation default JsonDropArraysOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonDropArraysOperation"
      ],
      "default": "JsonDropArraysOperation"
    }
  },
  "title": "JsonDropArraysOperation",
  "required": [
    "type"
  ]
}
TimeOperation

Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant TimeOperation default TimeOperation
time_field
string

Name of field to use as time field

time_field_type
string enum SECONDS MILLISECONDS ISO8601

How to interpret time field

{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "TimeOperation"
      ],
      "default": "TimeOperation"
    },
    "time_field": {
      "type": "string",
      "description": "Name of field to use as time field"
    },
    "time_field_type": {
      "type": "string",
      "enum": [
        "SECONDS",
        "MILLISECONDS",
        "ISO8601"
      ],
      "description": "How to interpret time field"
    }
  },
  "title": "TimeOperation",
  "required": [
    "type",
    "time_field",
    "time_field_type"
  ]
}
RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
GeoIpOperation

Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example

input = {"ip": "8.8.8.8"}

output = {"ip": "8.8.8.8", "geo_ip": {"location": {"lat": 37.751, "lon": -97.822}}}

Note 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.

Note 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.

{}
+
type
string constant GeoIpOperation default GeoIpOperation
src_field_name
string

Field containing an IP address string in the payload

dst_field_name
string default geo_ip

Field name to save the geo data to

geo_lite_db
string

S3 path to the GeoLite2 City database file. Prefix with s3://

geo_properties
array enum string
COUNTRY_NAME COUNTRY_ISO_CODE SUBDIVISION_NAME SUBDIVISION_ISO_CODE CITY_NAME POSTAL_CODE LOCATION

List of geo properties to include

fail_on_not_found
boolean default false

If ip lookup fails also fail the operation. Doing so will filter out the event.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GeoIpOperation"
      ],
      "default": "GeoIpOperation"
    },
    "src_field_name": {
      "type": "string",
      "description": "Field containing an IP address string in the payload"
    },
    "dst_field_name": {
      "type": "string",
      "default": "geo_ip",
      "description": "Field name to save the geo data to"
    },
    "geo_lite_db": {
      "type": "string",
      "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
    },
    "geo_properties": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "COUNTRY_NAME",
          "COUNTRY_ISO_CODE",
          "SUBDIVISION_NAME",
          "SUBDIVISION_ISO_CODE",
          "CITY_NAME",
          "POSTAL_CODE",
          "LOCATION"
        ]
      },
      "description": "List of geo properties to include"
    },
    "fail_on_not_found": {
      "type": "boolean",
      "default": false,
      "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
    }
  },
  "title": "GeoIpOperation",
  "required": [
    "type",
    "src_field_name",
    "dst_field_name",
    "geo_lite_db"
  ]
}
FlattenOperation

Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {"foo": {"bar": {"baz": 1}}} the operation will produce {"foo.bar.baz": 1} as the new payload.

{}
+
type
string constant FlattenOperation default FlattenOperation
separator
string default .

Separator to be used between nested key names (typically a dot(.))

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FlattenOperation"
      ],
      "default": "FlattenOperation"
    },
    "separator": {
      "type": "string",
      "default": ".",
      "description": "Separator to be used between nested key names (typically a dot(.))"
    }
  },
  "title": "FlattenOperation",
  "required": [
    "type"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
KeyNameReplacementOperation

Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.

{}
+
type
string constant KeyNameReplacementOperation default KeyNameReplacementOperation
replacement
string default

If a match is found then replace match with this value. Defaults to emptry string.

drop
boolean default false

If a match is found then drop the key/value.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KeyNameReplacementOperation"
      ],
      "default": "KeyNameReplacementOperation"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "replacement": {
      "type": "string",
      "default": "",
      "description": "If a match is found then replace match with this value. Defaults to emptry string."
    },
    "drop": {
      "type": "boolean",
      "default": false,
      "description": "If a match is found then drop the key/value."
    }
  },
  "title": "KeyNameReplacementOperation",
  "required": [
    "type",
    "regex"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
GelfOperation

Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.

{}
+
type
string constant GelfOperation default GelfOperation
src_host_field
array string

Field containing host string

src_short_message_field
array string

Field containing short_message string

src_full_message_field
array string

Field containing full_message string

src_timestamp_field
array string

Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior.

src_level_field
array string

Field containing syslog level number

src_facility_field
array string

Field containing syslog facility string

src_line_number_field
array string

Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead.

src_file_field
array string

Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GelfOperation"
      ],
      "default": "GelfOperation"
    },
    "src_host_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing host string"
    },
    "src_short_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing short_message string"
    },
    "src_full_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing full_message string"
    },
    "src_timestamp_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
    },
    "src_level_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog level number"
    },
    "src_facility_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog facility string"
    },
    "src_line_number_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
    },
    "src_file_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
    }
  },
  "title": "GelfOperation",
  "required": [
    "type",
    "src_host_field",
    "src_short_message_field"
  ]
}
JsonKeyNameOperation

Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {"foo": "one", "bar": 2} will become {"foo__str": "one", "bar__long": 2}. The mapping is string:str, boolean:boolean, array:arr, number:long or __float. It also repalces "." with "_" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or "." in key names.

{}
+
type
string constant JsonKeyNameOperation default JsonKeyNameOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonKeyNameOperation"
      ],
      "default": "JsonKeyNameOperation"
    }
  },
  "title": "JsonKeyNameOperation",
  "required": [
    "type"
  ]
}
condition
one of RegexFilterOperation BasicFilterOperation

Filter operation to evaluate events against.

RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "operations": {
      "type": "array",
      "description": "List of operations to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/ForkOperationConfig"
        },
        {
          "$ref": "#/definitions/LowerCaseKeyOperationConfig"
        },
        {
          "$ref": "#/definitions/JsonRootNodeOperationConfig"
        },
        {
          "$ref": "#/definitions/SubstitutionOperationConfig"
        },
        {
          "$ref": "#/definitions/PartitionOperationConfig"
        },
        {
          "$ref": "#/definitions/ArraySplitOperationConfig"
        },
        {
          "$ref": "#/definitions/URLDecodeOperationConfig"
        },
        {
          "$ref": "#/definitions/DeleteFieldOperationConfig"
        },
        {
          "$ref": "#/definitions/DropArraysOperationConfig"
        },
        {
          "$ref": "#/definitions/TimeOperationConfig"
        },
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/GeoIpOperationConfig"
        },
        {
          "$ref": "#/definitions/FlattenOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameReplacementOperationConfig"
        },
        {
          "$ref": "#/definitions/ConditionalOperationConfig"
        },
        {
          "$ref": "#/definitions/GelfOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameOperationConfig"
        }
      ]
    },
    "condition": {
      "oneOf": [
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        }
      ],
      "description": "Filter operation to evaluate events against."
    }
  },
  "required": [
    "condition"
  ]
}
filter_non_match
boolean default false

When true events that don't match any conditions will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "The conditional operation allows for 'if else' style branches in the flow of Bender operations. Conditions are evaluated in order of appearance and the first matching condition will receive the event.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ConditionalOperation"
      ],
      "default": "ConditionalOperation"
    },
    "conditions": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Condition"
      },
      "description": "List of conditions and their operations."
    },
    "filter_non_match": {
      "type": "boolean",
      "default": false,
      "description": "When true events that don't match any conditions will be filtered out."
    }
  },
  "title": "ConditionalOperation",
  "required": [
    "type"
  ]
}
GelfOperation

Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.

{}
+
type
string constant GelfOperation default GelfOperation
src_host_field
array string

Field containing host string

src_short_message_field
array string

Field containing short_message string

src_full_message_field
array string

Field containing full_message string

src_timestamp_field
array string

Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior.

src_level_field
array string

Field containing syslog level number

src_facility_field
array string

Field containing syslog facility string

src_line_number_field
array string

Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead.

src_file_field
array string

Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GelfOperation"
      ],
      "default": "GelfOperation"
    },
    "src_host_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing host string"
    },
    "src_short_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing short_message string"
    },
    "src_full_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing full_message string"
    },
    "src_timestamp_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
    },
    "src_level_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog level number"
    },
    "src_facility_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog facility string"
    },
    "src_line_number_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
    },
    "src_file_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
    }
  },
  "title": "GelfOperation",
  "required": [
    "type",
    "src_host_field",
    "src_short_message_field"
  ]
}
JsonKeyNameOperation

Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {"foo": "one", "bar": 2} will become {"foo__str": "one", "bar__long": 2}. The mapping is string:str, boolean:boolean, array:arr, number:long or __float. It also repalces "." with "_" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or "." in key names.

{}
+
type
string constant JsonKeyNameOperation default JsonKeyNameOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonKeyNameOperation"
      ],
      "default": "JsonKeyNameOperation"
    }
  },
  "title": "JsonKeyNameOperation",
  "required": [
    "type"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "operations": {
      "type": "array",
      "description": "List of operations to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/ForkOperationConfig"
        },
        {
          "$ref": "#/definitions/LowerCaseKeyOperationConfig"
        },
        {
          "$ref": "#/definitions/JsonRootNodeOperationConfig"
        },
        {
          "$ref": "#/definitions/SubstitutionOperationConfig"
        },
        {
          "$ref": "#/definitions/PartitionOperationConfig"
        },
        {
          "$ref": "#/definitions/ArraySplitOperationConfig"
        },
        {
          "$ref": "#/definitions/URLDecodeOperationConfig"
        },
        {
          "$ref": "#/definitions/DeleteFieldOperationConfig"
        },
        {
          "$ref": "#/definitions/DropArraysOperationConfig"
        },
        {
          "$ref": "#/definitions/TimeOperationConfig"
        },
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/GeoIpOperationConfig"
        },
        {
          "$ref": "#/definitions/FlattenOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameReplacementOperationConfig"
        },
        {
          "$ref": "#/definitions/ConditionalOperationConfig"
        },
        {
          "$ref": "#/definitions/GelfOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameOperationConfig"
        }
      ]
    }
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The fork operation allows nesting multiple operation pipelines within Bender. Each fork (pipeline) has its own operations and operates independently on a clone of the original event. If no filters are applied then this can result in multiple output events for each input event.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ForkOperation"
      ],
      "default": "ForkOperation"
    },
    "forks": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Fork"
      },
      "description": "List of forks."
    }
  },
  "title": "ForkOperation",
  "required": [
    "type"
  ]
}
LowerCaseKeyOperation

Provided a JSON object it will recursively lower case all fields.

{}
+
type
string constant LowerCaseKeyOperation default LowerCaseKeyOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively lower case all fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "LowerCaseKeyOperation"
      ],
      "default": "LowerCaseKeyOperation"
    }
  },
  "title": "LowerCaseKeyOperation",
  "required": [
    "type"
  ]
}
JsonRootNodeOperation

Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {"foo": {"bar": {"baz": 1}}} and specified path $.foo.bar the operation will produce {"baz": 1} as the new payload.

{}
+
type
string constant JsonRootNodeOperation default JsonRootNodeOperation
root_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonRootNodeOperation"
      ],
      "default": "JsonRootNodeOperation"
    },
    "root_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "JsonRootNodeOperation",
  "required": [
    "type",
    "root_path"
  ]
}
SubstitutionOperation

This operation allows substituting event fields with different sources such as other fields, static values, or metadata.

{}
+
type
string constant SubstitutionOperation default SubstitutionOperation
substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions to perform.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}
NestedSubstitution

The nested substitution helps build a Map object containing the result of other substitution.

{}
+
type
string constant NestedSubstitution default NestedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions that will build up the final Map object.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The nested substitution helps build a Map object containing the result of other substitution.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "NestedSubstitution"
      ],
      "default": "NestedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions that will build up the final Map object.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "NestedSubstitution",
  "required": [
    "type",
    "key"
  ]
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SubstitutionOperation"
      ],
      "default": "SubstitutionOperation"
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "SubstitutionOperation",
  "required": [
    "type",
    "substitutions"
  ]
}
PartitionOperation

Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath

{}
+
type
string constant PartitionOperation default PartitionOperation
partition_specs
array PartitionSpec

Configuration to specify object fields that are treated as partitions

PartitionSpec
{}
+
name
string

Value to use as the key for the partition.

sources
array string

Fields to use for the value of the partition.

interpreter
string enum STRING MILLISECONDS SECONDS STATIC default STRING

Interpreter to use on the partition value.

format
string

Java date format to use when using a time based interpreter.

string_format
string enum TOLOWER TOUPPER NONE default NONE

Basic string formatting.

seconds_to_round
integer [0;86400] default 0

Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Value to use as the key for the partition."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to use for the value of the partition."
    },
    "interpreter": {
      "type": "string",
      "default": "STRING",
      "enum": [
        "STRING",
        "MILLISECONDS",
        "SECONDS",
        "STATIC"
      ],
      "description": "Interpreter to use on the partition value."
    },
    "format": {
      "type": "string",
      "description": "Java date format to use when using a time based interpreter."
    },
    "string_format": {
      "type": "string",
      "default": "NONE",
      "enum": [
        "TOLOWER",
        "TOUPPER",
        "NONE"
      ],
      "description": "Basic string formatting."
    },
    "seconds_to_round": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
    }
  },
  "required": [
    "name",
    "interpreter"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PartitionOperation"
      ],
      "default": "PartitionOperation"
    },
    "partition_specs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PartitionSpec"
      },
      "description": "Configuration to specify object fields that are treated as partitions"
    }
  },
  "title": "PartitionOperation",
  "required": [
    "type"
  ]
}
JsonArraySplitOperation

Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{"foo": 1}, {"bar": 2}] will be turned into two seperate events with payloads of {"foo": 1} and {"bar": 2}.

{}
+
type
string constant JsonArraySplitOperation default JsonArraySplitOperation
path
string

Path to a JSON node which is an array. See https://github.com/jayway/JsonPath

fields_to_keep
array string

If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonArraySplitOperation"
      ],
      "default": "JsonArraySplitOperation"
    },
    "path": {
      "type": "string",
      "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
    },
    "fields_to_keep": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
    }
  },
  "title": "JsonArraySplitOperation",
  "required": [
    "type",
    "path"
  ]
}
UrlDecodeOperation

Performs a URL decode on the specified fields.

{}
+
type
string constant UrlDecodeOperation default UrlDecodeOperation
fields
array string

fields

times
integer [1;65535] default 1

Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Performs a URL decode on the specified fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlDecodeOperation"
      ],
      "default": "UrlDecodeOperation"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "fields"
    },
    "times": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 1,
      "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
    }
  },
  "title": "UrlDecodeOperation",
  "required": [
    "type",
    "fields"
  ]
}
DeleteFieldOperation

Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant DeleteFieldOperation default DeleteFieldOperation
key_field
string

Name of field key to be deleted.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DeleteFieldOperation"
      ],
      "default": "DeleteFieldOperation"
    },
    "key_field": {
      "type": "string",
      "description": "Name of field key to be deleted."
    }
  },
  "title": "DeleteFieldOperation",
  "required": [
    "type",
    "key_field"
  ]
}
JsonDropArraysOperation

Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html

{}
+
type
string constant JsonDropArraysOperation default JsonDropArraysOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonDropArraysOperation"
      ],
      "default": "JsonDropArraysOperation"
    }
  },
  "title": "JsonDropArraysOperation",
  "required": [
    "type"
  ]
}
TimeOperation

Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant TimeOperation default TimeOperation
time_field
string

Name of field to use as time field

time_field_type
string enum SECONDS MILLISECONDS ISO8601

How to interpret time field

{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "TimeOperation"
      ],
      "default": "TimeOperation"
    },
    "time_field": {
      "type": "string",
      "description": "Name of field to use as time field"
    },
    "time_field_type": {
      "type": "string",
      "enum": [
        "SECONDS",
        "MILLISECONDS",
        "ISO8601"
      ],
      "description": "How to interpret time field"
    }
  },
  "title": "TimeOperation",
  "required": [
    "type",
    "time_field",
    "time_field_type"
  ]
}
RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
GeoIpOperation

Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example

input = {"ip": "8.8.8.8"}

output = {"ip": "8.8.8.8", "geo_ip": {"location": {"lat": 37.751, "lon": -97.822}}}

Note 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.

Note 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.

{}
+
type
string constant GeoIpOperation default GeoIpOperation
src_field_name
string

Field containing an IP address string in the payload

dst_field_name
string default geo_ip

Field name to save the geo data to

geo_lite_db
string

S3 path to the GeoLite2 City database file. Prefix with s3://

geo_properties
array enum string
COUNTRY_NAME COUNTRY_ISO_CODE SUBDIVISION_NAME SUBDIVISION_ISO_CODE CITY_NAME POSTAL_CODE LOCATION

List of geo properties to include

fail_on_not_found
boolean default false

If ip lookup fails also fail the operation. Doing so will filter out the event.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GeoIpOperation"
      ],
      "default": "GeoIpOperation"
    },
    "src_field_name": {
      "type": "string",
      "description": "Field containing an IP address string in the payload"
    },
    "dst_field_name": {
      "type": "string",
      "default": "geo_ip",
      "description": "Field name to save the geo data to"
    },
    "geo_lite_db": {
      "type": "string",
      "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
    },
    "geo_properties": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "COUNTRY_NAME",
          "COUNTRY_ISO_CODE",
          "SUBDIVISION_NAME",
          "SUBDIVISION_ISO_CODE",
          "CITY_NAME",
          "POSTAL_CODE",
          "LOCATION"
        ]
      },
      "description": "List of geo properties to include"
    },
    "fail_on_not_found": {
      "type": "boolean",
      "default": false,
      "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
    }
  },
  "title": "GeoIpOperation",
  "required": [
    "type",
    "src_field_name",
    "dst_field_name",
    "geo_lite_db"
  ]
}
FlattenOperation

Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {"foo": {"bar": {"baz": 1}}} the operation will produce {"foo.bar.baz": 1} as the new payload.

{}
+
type
string constant FlattenOperation default FlattenOperation
separator
string default .

Separator to be used between nested key names (typically a dot(.))

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FlattenOperation"
      ],
      "default": "FlattenOperation"
    },
    "separator": {
      "type": "string",
      "default": ".",
      "description": "Separator to be used between nested key names (typically a dot(.))"
    }
  },
  "title": "FlattenOperation",
  "required": [
    "type"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
KeyNameReplacementOperation

Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.

{}
+
type
string constant KeyNameReplacementOperation default KeyNameReplacementOperation
replacement
string default

If a match is found then replace match with this value. Defaults to emptry string.

drop
boolean default false

If a match is found then drop the key/value.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KeyNameReplacementOperation"
      ],
      "default": "KeyNameReplacementOperation"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "replacement": {
      "type": "string",
      "default": "",
      "description": "If a match is found then replace match with this value. Defaults to emptry string."
    },
    "drop": {
      "type": "boolean",
      "default": false,
      "description": "If a match is found then drop the key/value."
    }
  },
  "title": "KeyNameReplacementOperation",
  "required": [
    "type",
    "regex"
  ]
}
ConditionalOperation

The conditional operation allows for 'if else' style branches in the flow of Bender operations. Conditions are evaluated in order of appearance and the first matching condition will receive the event.

{}
+
type
string constant ConditionalOperation default ConditionalOperation
conditions
array Condition

List of conditions and their operations.

Condition
{}
+
operations
array any of ForkOperation LowerCaseKeyOperation JsonRootNodeOperation SubstitutionOperation PartitionOperation JsonArraySplitOperation UrlDecodeOperation DeleteFieldOperation JsonDropArraysOperation TimeOperation RegexFilterOperation GeoIpOperation FlattenOperation BasicFilterOperation KeyNameReplacementOperation ConditionalOperation GelfOperation JsonKeyNameOperation

List of operations to perform.

ForkOperation

The fork operation allows nesting multiple operation pipelines within Bender. Each fork (pipeline) has its own operations and operates independently on a clone of the original event. If no filters are applied then this can result in multiple output events for each input event.

{}
+
type
string constant ForkOperation default ForkOperation
forks
array Fork

List of forks.

Fork
{}
+
operations
array any of ForkOperation LowerCaseKeyOperation JsonRootNodeOperation SubstitutionOperation PartitionOperation JsonArraySplitOperation UrlDecodeOperation DeleteFieldOperation JsonDropArraysOperation TimeOperation RegexFilterOperation GeoIpOperation FlattenOperation BasicFilterOperation KeyNameReplacementOperation ConditionalOperation GelfOperation JsonKeyNameOperation

List of operations to perform.

circular reference

{}
+
{
  "description": "_circular reference_"
}
LowerCaseKeyOperation

Provided a JSON object it will recursively lower case all fields.

{}
+
type
string constant LowerCaseKeyOperation default LowerCaseKeyOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively lower case all fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "LowerCaseKeyOperation"
      ],
      "default": "LowerCaseKeyOperation"
    }
  },
  "title": "LowerCaseKeyOperation",
  "required": [
    "type"
  ]
}
JsonRootNodeOperation

Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {"foo": {"bar": {"baz": 1}}} and specified path $.foo.bar the operation will produce {"baz": 1} as the new payload.

{}
+
type
string constant JsonRootNodeOperation default JsonRootNodeOperation
root_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonRootNodeOperation"
      ],
      "default": "JsonRootNodeOperation"
    },
    "root_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "JsonRootNodeOperation",
  "required": [
    "type",
    "root_path"
  ]
}
SubstitutionOperation

This operation allows substituting event fields with different sources such as other fields, static values, or metadata.

{}
+
type
string constant SubstitutionOperation default SubstitutionOperation
substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions to perform.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}
NestedSubstitution

The nested substitution helps build a Map object containing the result of other substitution.

{}
+
type
string constant NestedSubstitution default NestedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions that will build up the final Map object.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The nested substitution helps build a Map object containing the result of other substitution.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "NestedSubstitution"
      ],
      "default": "NestedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions that will build up the final Map object.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "NestedSubstitution",
  "required": [
    "type",
    "key"
  ]
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SubstitutionOperation"
      ],
      "default": "SubstitutionOperation"
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "SubstitutionOperation",
  "required": [
    "type",
    "substitutions"
  ]
}
PartitionOperation

Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath

{}
+
type
string constant PartitionOperation default PartitionOperation
partition_specs
array PartitionSpec

Configuration to specify object fields that are treated as partitions

PartitionSpec
{}
+
name
string

Value to use as the key for the partition.

sources
array string

Fields to use for the value of the partition.

interpreter
string enum STRING MILLISECONDS SECONDS STATIC default STRING

Interpreter to use on the partition value.

format
string

Java date format to use when using a time based interpreter.

string_format
string enum TOLOWER TOUPPER NONE default NONE

Basic string formatting.

seconds_to_round
integer [0;86400] default 0

Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Value to use as the key for the partition."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to use for the value of the partition."
    },
    "interpreter": {
      "type": "string",
      "default": "STRING",
      "enum": [
        "STRING",
        "MILLISECONDS",
        "SECONDS",
        "STATIC"
      ],
      "description": "Interpreter to use on the partition value."
    },
    "format": {
      "type": "string",
      "description": "Java date format to use when using a time based interpreter."
    },
    "string_format": {
      "type": "string",
      "default": "NONE",
      "enum": [
        "TOLOWER",
        "TOUPPER",
        "NONE"
      ],
      "description": "Basic string formatting."
    },
    "seconds_to_round": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
    }
  },
  "required": [
    "name",
    "interpreter"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PartitionOperation"
      ],
      "default": "PartitionOperation"
    },
    "partition_specs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PartitionSpec"
      },
      "description": "Configuration to specify object fields that are treated as partitions"
    }
  },
  "title": "PartitionOperation",
  "required": [
    "type"
  ]
}
JsonArraySplitOperation

Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{"foo": 1}, {"bar": 2}] will be turned into two seperate events with payloads of {"foo": 1} and {"bar": 2}.

{}
+
type
string constant JsonArraySplitOperation default JsonArraySplitOperation
path
string

Path to a JSON node which is an array. See https://github.com/jayway/JsonPath

fields_to_keep
array string

If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonArraySplitOperation"
      ],
      "default": "JsonArraySplitOperation"
    },
    "path": {
      "type": "string",
      "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
    },
    "fields_to_keep": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
    }
  },
  "title": "JsonArraySplitOperation",
  "required": [
    "type",
    "path"
  ]
}
UrlDecodeOperation

Performs a URL decode on the specified fields.

{}
+
type
string constant UrlDecodeOperation default UrlDecodeOperation
fields
array string

fields

times
integer [1;65535] default 1

Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Performs a URL decode on the specified fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlDecodeOperation"
      ],
      "default": "UrlDecodeOperation"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "fields"
    },
    "times": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 1,
      "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
    }
  },
  "title": "UrlDecodeOperation",
  "required": [
    "type",
    "fields"
  ]
}
DeleteFieldOperation

Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant DeleteFieldOperation default DeleteFieldOperation
key_field
string

Name of field key to be deleted.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DeleteFieldOperation"
      ],
      "default": "DeleteFieldOperation"
    },
    "key_field": {
      "type": "string",
      "description": "Name of field key to be deleted."
    }
  },
  "title": "DeleteFieldOperation",
  "required": [
    "type",
    "key_field"
  ]
}
JsonDropArraysOperation

Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html

{}
+
type
string constant JsonDropArraysOperation default JsonDropArraysOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonDropArraysOperation"
      ],
      "default": "JsonDropArraysOperation"
    }
  },
  "title": "JsonDropArraysOperation",
  "required": [
    "type"
  ]
}
TimeOperation

Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant TimeOperation default TimeOperation
time_field
string

Name of field to use as time field

time_field_type
string enum SECONDS MILLISECONDS ISO8601

How to interpret time field

{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "TimeOperation"
      ],
      "default": "TimeOperation"
    },
    "time_field": {
      "type": "string",
      "description": "Name of field to use as time field"
    },
    "time_field_type": {
      "type": "string",
      "enum": [
        "SECONDS",
        "MILLISECONDS",
        "ISO8601"
      ],
      "description": "How to interpret time field"
    }
  },
  "title": "TimeOperation",
  "required": [
    "type",
    "time_field",
    "time_field_type"
  ]
}
RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
GeoIpOperation

Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example

input = {"ip": "8.8.8.8"}

output = {"ip": "8.8.8.8", "geo_ip": {"location": {"lat": 37.751, "lon": -97.822}}}

Note 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.

Note 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.

{}
+
type
string constant GeoIpOperation default GeoIpOperation
src_field_name
string

Field containing an IP address string in the payload

dst_field_name
string default geo_ip

Field name to save the geo data to

geo_lite_db
string

S3 path to the GeoLite2 City database file. Prefix with s3://

geo_properties
array enum string
COUNTRY_NAME COUNTRY_ISO_CODE SUBDIVISION_NAME SUBDIVISION_ISO_CODE CITY_NAME POSTAL_CODE LOCATION

List of geo properties to include

fail_on_not_found
boolean default false

If ip lookup fails also fail the operation. Doing so will filter out the event.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GeoIpOperation"
      ],
      "default": "GeoIpOperation"
    },
    "src_field_name": {
      "type": "string",
      "description": "Field containing an IP address string in the payload"
    },
    "dst_field_name": {
      "type": "string",
      "default": "geo_ip",
      "description": "Field name to save the geo data to"
    },
    "geo_lite_db": {
      "type": "string",
      "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
    },
    "geo_properties": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "COUNTRY_NAME",
          "COUNTRY_ISO_CODE",
          "SUBDIVISION_NAME",
          "SUBDIVISION_ISO_CODE",
          "CITY_NAME",
          "POSTAL_CODE",
          "LOCATION"
        ]
      },
      "description": "List of geo properties to include"
    },
    "fail_on_not_found": {
      "type": "boolean",
      "default": false,
      "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
    }
  },
  "title": "GeoIpOperation",
  "required": [
    "type",
    "src_field_name",
    "dst_field_name",
    "geo_lite_db"
  ]
}
FlattenOperation

Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {"foo": {"bar": {"baz": 1}}} the operation will produce {"foo.bar.baz": 1} as the new payload.

{}
+
type
string constant FlattenOperation default FlattenOperation
separator
string default .

Separator to be used between nested key names (typically a dot(.))

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FlattenOperation"
      ],
      "default": "FlattenOperation"
    },
    "separator": {
      "type": "string",
      "default": ".",
      "description": "Separator to be used between nested key names (typically a dot(.))"
    }
  },
  "title": "FlattenOperation",
  "required": [
    "type"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
KeyNameReplacementOperation

Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.

{}
+
type
string constant KeyNameReplacementOperation default KeyNameReplacementOperation
replacement
string default

If a match is found then replace match with this value. Defaults to emptry string.

drop
boolean default false

If a match is found then drop the key/value.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KeyNameReplacementOperation"
      ],
      "default": "KeyNameReplacementOperation"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "replacement": {
      "type": "string",
      "default": "",
      "description": "If a match is found then replace match with this value. Defaults to emptry string."
    },
    "drop": {
      "type": "boolean",
      "default": false,
      "description": "If a match is found then drop the key/value."
    }
  },
  "title": "KeyNameReplacementOperation",
  "required": [
    "type",
    "regex"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
GelfOperation

Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.

{}
+
type
string constant GelfOperation default GelfOperation
src_host_field
array string

Field containing host string

src_short_message_field
array string

Field containing short_message string

src_full_message_field
array string

Field containing full_message string

src_timestamp_field
array string

Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior.

src_level_field
array string

Field containing syslog level number

src_facility_field
array string

Field containing syslog facility string

src_line_number_field
array string

Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead.

src_file_field
array string

Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GelfOperation"
      ],
      "default": "GelfOperation"
    },
    "src_host_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing host string"
    },
    "src_short_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing short_message string"
    },
    "src_full_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing full_message string"
    },
    "src_timestamp_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
    },
    "src_level_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog level number"
    },
    "src_facility_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog facility string"
    },
    "src_line_number_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
    },
    "src_file_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
    }
  },
  "title": "GelfOperation",
  "required": [
    "type",
    "src_host_field",
    "src_short_message_field"
  ]
}
JsonKeyNameOperation

Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {"foo": "one", "bar": 2} will become {"foo__str": "one", "bar__long": 2}. The mapping is string:str, boolean:boolean, array:arr, number:long or __float. It also repalces "." with "_" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or "." in key names.

{}
+
type
string constant JsonKeyNameOperation default JsonKeyNameOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonKeyNameOperation"
      ],
      "default": "JsonKeyNameOperation"
    }
  },
  "title": "JsonKeyNameOperation",
  "required": [
    "type"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "operations": {
      "type": "array",
      "description": "List of operations to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/ForkOperationConfig"
        },
        {
          "$ref": "#/definitions/LowerCaseKeyOperationConfig"
        },
        {
          "$ref": "#/definitions/JsonRootNodeOperationConfig"
        },
        {
          "$ref": "#/definitions/SubstitutionOperationConfig"
        },
        {
          "$ref": "#/definitions/PartitionOperationConfig"
        },
        {
          "$ref": "#/definitions/ArraySplitOperationConfig"
        },
        {
          "$ref": "#/definitions/URLDecodeOperationConfig"
        },
        {
          "$ref": "#/definitions/DeleteFieldOperationConfig"
        },
        {
          "$ref": "#/definitions/DropArraysOperationConfig"
        },
        {
          "$ref": "#/definitions/TimeOperationConfig"
        },
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/GeoIpOperationConfig"
        },
        {
          "$ref": "#/definitions/FlattenOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameReplacementOperationConfig"
        },
        {
          "$ref": "#/definitions/ConditionalOperationConfig"
        },
        {
          "$ref": "#/definitions/GelfOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameOperationConfig"
        }
      ]
    }
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The fork operation allows nesting multiple operation pipelines within Bender. Each fork (pipeline) has its own operations and operates independently on a clone of the original event. If no filters are applied then this can result in multiple output events for each input event.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ForkOperation"
      ],
      "default": "ForkOperation"
    },
    "forks": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Fork"
      },
      "description": "List of forks."
    }
  },
  "title": "ForkOperation",
  "required": [
    "type"
  ]
}
LowerCaseKeyOperation

Provided a JSON object it will recursively lower case all fields.

{}
+
type
string constant LowerCaseKeyOperation default LowerCaseKeyOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively lower case all fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "LowerCaseKeyOperation"
      ],
      "default": "LowerCaseKeyOperation"
    }
  },
  "title": "LowerCaseKeyOperation",
  "required": [
    "type"
  ]
}
JsonRootNodeOperation

Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {"foo": {"bar": {"baz": 1}}} and specified path $.foo.bar the operation will produce {"baz": 1} as the new payload.

{}
+
type
string constant JsonRootNodeOperation default JsonRootNodeOperation
root_path
string

Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonRootNodeOperation"
      ],
      "default": "JsonRootNodeOperation"
    },
    "root_path": {
      "type": "string",
      "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
    }
  },
  "title": "JsonRootNodeOperation",
  "required": [
    "type",
    "root_path"
  ]
}
SubstitutionOperation

This operation allows substituting event fields with different sources such as other fields, static values, or metadata.

{}
+
type
string constant SubstitutionOperation default SubstitutionOperation
substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions to perform.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}
NestedSubstitution

The nested substitution helps build a Map object containing the result of other substitution.

{}
+
type
string constant NestedSubstitution default NestedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

substitutions
array any of FieldSubstitution RegexSubstitution MetadataSubstitution NestedSubstitution FormattedSubstitution StaticSubstitution ContextSubstitution

List of substitutions that will build up the final Map object.

FieldSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant FieldSubstitution default FieldSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

remove_src_field
boolean default false

Removes the source field when performing the substitution. Effectively making this a move operation.

fail_src_not_found
boolean default true

Fail if source field is not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldSubstitution"
      ],
      "default": "FieldSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    }
  },
  "title": "FieldSubstitution",
  "required": [
    "type",
    "key",
    "src_fields"
  ]
}
RegexSubstitution

Substitutes event field value for another event field value. Note the source field and destination field can be the same.

{}
+
type
string constant RegexSubstitution default RegexSubstitution
fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

pattern
string
src_fields
array string

Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used.

fields
array RegexSubField

List of fields to create from matching regex groups.

RegexSubField
{}
+
regex_group_name
string

Regex group name identifying the field.

type
string enum STRING NUMBER BOOLEAN

Data type of match group field. If type coercion does not succeed then field is ignored.

key
string

Name or path of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "regex_group_name": {
      "type": "string",
      "description": "Regex group name identifying the field."
    },
    "type": {
      "type": "string",
      "enum": [
        "STRING",
        "NUMBER",
        "BOOLEAN"
      ],
      "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
    },
    "key": {
      "type": "string",
      "description": "Name or path of the new field."
    }
  },
  "required": [
    "regex_group_name",
    "type",
    "key"
  ]
}
remove_src_field
boolean default false

Removes the source field after applying this substitution.

fail_src_not_found
boolean default true

Fail if source fields do not match regex or are not found.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexSubstitution"
      ],
      "default": "RegexSubstitution"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "pattern": {
      "type": "string",
      "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
    },
    "fields": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RegexSubField"
      },
      "description": "List of fields to create from matching regex groups."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field after applying this substitution."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source fields do not match regex or are not found."
    }
  },
  "title": "RegexSubstitution",
  "required": [
    "type",
    "pattern",
    "src_fields",
    "fields"
  ]
}
MetadataSubstitution

Substitutes event field value for list of event metadata proprties.

{}
+
type
string constant MetadataSubstitution default MetadataSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of metadata fields to add. If non-specified then all are added.

excludes
array string

List of metadata fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of event metadata proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "MetadataSubstitution"
      ],
      "default": "MetadataSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of metadata fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "MetadataSubstitution",
  "required": [
    "type",
    "key"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "The nested substitution helps build a Map object containing the result of other substitution.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "NestedSubstitution"
      ],
      "default": "NestedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions that will build up the final Map object.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "NestedSubstitution",
  "required": [
    "type",
    "key"
  ]
}
FormattedSubstitution

Creates a new string using variable replacement.

{}
+
type
string constant FormattedSubstitution default FormattedSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

format
string

String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html

variables
array any of FieldVariable StaticVariable

List of variables used in string substitution. Index of variable relates to index in 'format' string.

FieldVariable
{}
+
type
string constant FieldVariable default FieldVariable
src_fields
array string

Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null.

fail_src_not_found
boolean default true

Fail if source field is not found.

remove_src_field
boolean default false

Removes the source field when performing the substitution.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FieldVariable"
      ],
      "default": "FieldVariable"
    },
    "src_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
    },
    "fail_src_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if source field is not found."
    },
    "remove_src_field": {
      "type": "boolean",
      "default": false,
      "description": "Removes the source field when performing the substitution."
    }
  },
  "title": "FieldVariable",
  "required": [
    "type",
    "src_fields"
  ]
}
StaticVariable
{}
+
type
string constant StaticVariable default StaticVariable
value
string

Value to substitute.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticVariable"
      ],
      "default": "StaticVariable"
    },
    "value": {
      "type": "string",
      "description": "Value to substitute."
    }
  },
  "title": "StaticVariable",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Creates a new string using variable replacement.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FormattedSubstitution"
      ],
      "default": "FormattedSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "format": {
      "type": "string",
      "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
    },
    "variables": {
      "type": "array",
      "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldVariable"
        },
        {
          "$ref": "#/definitions/StaticVariable"
        }
      ]
    }
  },
  "title": "FormattedSubstitution",
  "required": [
    "type",
    "key",
    "format",
    "variables"
  ]
}
StaticSubstitution

Substitutes event field value for a static value.

{}
+
type
string constant StaticSubstitution default StaticSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

value
string

Value of the new field.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for a static value.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StaticSubstitution"
      ],
      "default": "StaticSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "value": {
      "type": "string",
      "description": "Value of the new field."
    }
  },
  "title": "StaticSubstitution",
  "required": [
    "type",
    "key",
    "value"
  ]
}
ContextSubstitution

Substitutes event field value for list of lambda function context proprties.

{}
+
type
string constant ContextSubstitution default ContextSubstitution
key
string

Name of the new field

fail_dst_not_found
boolean default true

Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created.

includes
array string

List of context fields to add. If non-specified then all are added.

excludes
array string

List of context fields to exclude. If non-specified then none are excluded.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Substitutes event field value for list of lambda function context proprties.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ContextSubstitution"
      ],
      "default": "ContextSubstitution"
    },
    "key": {
      "type": "string",
      "description": "Name of the new field"
    },
    "fail_dst_not_found": {
      "type": "boolean",
      "default": true,
      "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
    },
    "includes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to add. If non-specified then all are added."
    },
    "excludes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of context fields to exclude. If non-specified then none are excluded."
    }
  },
  "title": "ContextSubstitution",
  "required": [
    "type",
    "key"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SubstitutionOperation"
      ],
      "default": "SubstitutionOperation"
    },
    "substitutions": {
      "type": "array",
      "description": "List of substitutions to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/FieldSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/RegexSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/MetadataSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/NestedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/FormattedSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/StaticSubstitutionConfig"
        },
        {
          "$ref": "#/definitions/ContextSubstitutionConfig"
        }
      ]
    }
  },
  "title": "SubstitutionOperation",
  "required": [
    "type",
    "substitutions"
  ]
}
PartitionOperation

Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath

{}
+
type
string constant PartitionOperation default PartitionOperation
partition_specs
array PartitionSpec

Configuration to specify object fields that are treated as partitions

PartitionSpec
{}
+
name
string

Value to use as the key for the partition.

sources
array string

Fields to use for the value of the partition.

interpreter
string enum STRING MILLISECONDS SECONDS STATIC default STRING

Interpreter to use on the partition value.

format
string

Java date format to use when using a time based interpreter.

string_format
string enum TOLOWER TOUPPER NONE default NONE

Basic string formatting.

seconds_to_round
integer [0;86400] default 0

Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Value to use as the key for the partition."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Fields to use for the value of the partition."
    },
    "interpreter": {
      "type": "string",
      "default": "STRING",
      "enum": [
        "STRING",
        "MILLISECONDS",
        "SECONDS",
        "STATIC"
      ],
      "description": "Interpreter to use on the partition value."
    },
    "format": {
      "type": "string",
      "description": "Java date format to use when using a time based interpreter."
    },
    "string_format": {
      "type": "string",
      "default": "NONE",
      "enum": [
        "TOLOWER",
        "TOUPPER",
        "NONE"
      ],
      "description": "Basic string formatting."
    },
    "seconds_to_round": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400,
      "default": 0,
      "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
    }
  },
  "required": [
    "name",
    "interpreter"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PartitionOperation"
      ],
      "default": "PartitionOperation"
    },
    "partition_specs": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/PartitionSpec"
      },
      "description": "Configuration to specify object fields that are treated as partitions"
    }
  },
  "title": "PartitionOperation",
  "required": [
    "type"
  ]
}
JsonArraySplitOperation

Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{"foo": 1}, {"bar": 2}] will be turned into two seperate events with payloads of {"foo": 1} and {"bar": 2}.

{}
+
type
string constant JsonArraySplitOperation default JsonArraySplitOperation
path
string

Path to a JSON node which is an array. See https://github.com/jayway/JsonPath

fields_to_keep
array string

If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonArraySplitOperation"
      ],
      "default": "JsonArraySplitOperation"
    },
    "path": {
      "type": "string",
      "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
    },
    "fields_to_keep": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
    }
  },
  "title": "JsonArraySplitOperation",
  "required": [
    "type",
    "path"
  ]
}
UrlDecodeOperation

Performs a URL decode on the specified fields.

{}
+
type
string constant UrlDecodeOperation default UrlDecodeOperation
fields
array string

fields

times
integer [1;65535] default 1

Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Performs a URL decode on the specified fields.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlDecodeOperation"
      ],
      "default": "UrlDecodeOperation"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "fields"
    },
    "times": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 1,
      "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
    }
  },
  "title": "UrlDecodeOperation",
  "required": [
    "type",
    "fields"
  ]
}
DeleteFieldOperation

Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant DeleteFieldOperation default DeleteFieldOperation
key_field
string

Name of field key to be deleted.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DeleteFieldOperation"
      ],
      "default": "DeleteFieldOperation"
    },
    "key_field": {
      "type": "string",
      "description": "Name of field key to be deleted."
    }
  },
  "title": "DeleteFieldOperation",
  "required": [
    "type",
    "key_field"
  ]
}
JsonDropArraysOperation

Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html

{}
+
type
string constant JsonDropArraysOperation default JsonDropArraysOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonDropArraysOperation"
      ],
      "default": "JsonDropArraysOperation"
    }
  },
  "title": "JsonDropArraysOperation",
  "required": [
    "type"
  ]
}
TimeOperation

Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath

{}
+
type
string constant TimeOperation default TimeOperation
time_field
string

Name of field to use as time field

time_field_type
string enum SECONDS MILLISECONDS ISO8601

How to interpret time field

{
  "type": "object",
  "additionalProperties": false,
  "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "TimeOperation"
      ],
      "default": "TimeOperation"
    },
    "time_field": {
      "type": "string",
      "description": "Name of field to use as time field"
    },
    "time_field_type": {
      "type": "string",
      "enum": [
        "SECONDS",
        "MILLISECONDS",
        "ISO8601"
      ],
      "description": "How to interpret time field"
    }
  },
  "title": "TimeOperation",
  "required": [
    "type",
    "time_field",
    "time_field_type"
  ]
}
RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
GeoIpOperation

Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example

input = {"ip": "8.8.8.8"}

output = {"ip": "8.8.8.8", "geo_ip": {"location": {"lat": 37.751, "lon": -97.822}}}

Note 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.

Note 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.

{}
+
type
string constant GeoIpOperation default GeoIpOperation
src_field_name
string

Field containing an IP address string in the payload

dst_field_name
string default geo_ip

Field name to save the geo data to

geo_lite_db
string

S3 path to the GeoLite2 City database file. Prefix with s3://

geo_properties
array enum string
COUNTRY_NAME COUNTRY_ISO_CODE SUBDIVISION_NAME SUBDIVISION_ISO_CODE CITY_NAME POSTAL_CODE LOCATION

List of geo properties to include

fail_on_not_found
boolean default false

If ip lookup fails also fail the operation. Doing so will filter out the event.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GeoIpOperation"
      ],
      "default": "GeoIpOperation"
    },
    "src_field_name": {
      "type": "string",
      "description": "Field containing an IP address string in the payload"
    },
    "dst_field_name": {
      "type": "string",
      "default": "geo_ip",
      "description": "Field name to save the geo data to"
    },
    "geo_lite_db": {
      "type": "string",
      "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
    },
    "geo_properties": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "COUNTRY_NAME",
          "COUNTRY_ISO_CODE",
          "SUBDIVISION_NAME",
          "SUBDIVISION_ISO_CODE",
          "CITY_NAME",
          "POSTAL_CODE",
          "LOCATION"
        ]
      },
      "description": "List of geo properties to include"
    },
    "fail_on_not_found": {
      "type": "boolean",
      "default": false,
      "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
    }
  },
  "title": "GeoIpOperation",
  "required": [
    "type",
    "src_field_name",
    "dst_field_name",
    "geo_lite_db"
  ]
}
FlattenOperation

Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {"foo": {"bar": {"baz": 1}}} the operation will produce {"foo.bar.baz": 1} as the new payload.

{}
+
type
string constant FlattenOperation default FlattenOperation
separator
string default .

Separator to be used between nested key names (typically a dot(.))

{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "FlattenOperation"
      ],
      "default": "FlattenOperation"
    },
    "separator": {
      "type": "string",
      "default": ".",
      "description": "Separator to be used between nested key names (typically a dot(.))"
    }
  },
  "title": "FlattenOperation",
  "required": [
    "type"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
KeyNameReplacementOperation

Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.

{}
+
type
string constant KeyNameReplacementOperation default KeyNameReplacementOperation
replacement
string default

If a match is found then replace match with this value. Defaults to emptry string.

drop
boolean default false

If a match is found then drop the key/value.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KeyNameReplacementOperation"
      ],
      "default": "KeyNameReplacementOperation"
    },
    "regex": {
      "type": "string",
      "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "replacement": {
      "type": "string",
      "default": "",
      "description": "If a match is found then replace match with this value. Defaults to emptry string."
    },
    "drop": {
      "type": "boolean",
      "default": false,
      "description": "If a match is found then drop the key/value."
    }
  },
  "title": "KeyNameReplacementOperation",
  "required": [
    "type",
    "regex"
  ]
}

circular reference

{}
+
{
  "description": "_circular reference_"
}
GelfOperation

Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.

{}
+
type
string constant GelfOperation default GelfOperation
src_host_field
array string

Field containing host string

src_short_message_field
array string

Field containing short_message string

src_full_message_field
array string

Field containing full_message string

src_timestamp_field
array string

Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior.

src_level_field
array string

Field containing syslog level number

src_facility_field
array string

Field containing syslog facility string

src_line_number_field
array string

Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead.

src_file_field
array string

Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GelfOperation"
      ],
      "default": "GelfOperation"
    },
    "src_host_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing host string"
    },
    "src_short_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing short_message string"
    },
    "src_full_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing full_message string"
    },
    "src_timestamp_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
    },
    "src_level_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog level number"
    },
    "src_facility_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog facility string"
    },
    "src_line_number_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
    },
    "src_file_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
    }
  },
  "title": "GelfOperation",
  "required": [
    "type",
    "src_host_field",
    "src_short_message_field"
  ]
}
JsonKeyNameOperation

Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {"foo": "one", "bar": 2} will become {"foo__str": "one", "bar__long": 2}. The mapping is string:str, boolean:boolean, array:arr, number:long or __float. It also repalces "." with "_" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or "." in key names.

{}
+
type
string constant JsonKeyNameOperation default JsonKeyNameOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonKeyNameOperation"
      ],
      "default": "JsonKeyNameOperation"
    }
  },
  "title": "JsonKeyNameOperation",
  "required": [
    "type"
  ]
}
condition
one of RegexFilterOperation BasicFilterOperation

Filter operation to evaluate events against.

RegexFilterOperation

This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\"data\": \"one\", \"type\": \"bar\"} and {\"data\": \"one\", \"type\": \"baz\"}. With config values: regex = \"(bar)\", path = \"$.type\", and exclude = true, after filtering, the stream will only hold {\"data\": \"one\", \"type\": \"baz\"}. If instead, exclude = false, the stream would only hold {\"data\": \"one\", \"type\": \"bar\"} after filtering.

{}
+
type
string constant RegexFilterOperation default RegexFilterOperation
regex
string

Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

path
string

JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath

exclude
boolean default true

If true, matches will be filtered out. If false, non-matches will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "RegexFilterOperation"
      ],
      "default": "RegexFilterOperation"
    },
    "regex": {
      "type": "string",
      "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
    },
    "path": {
      "type": "string",
      "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
    },
    "exclude": {
      "type": "boolean",
      "default": true,
      "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
    }
  },
  "title": "RegexFilterOperation",
  "required": [
    "type",
    "regex",
    "path"
  ]
}
BasicFilterOperation

If pass is set to false then events are filtered out.

{}
+
type
string constant BasicFilterOperation default BasicFilterOperation
pass
boolean default false

If 'false', event is filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "If pass is set to false then events are filtered out.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicFilterOperation"
      ],
      "default": "BasicFilterOperation"
    },
    "pass": {
      "type": "boolean",
      "default": false,
      "description": "If 'false', event is filtered out."
    }
  },
  "title": "BasicFilterOperation",
  "required": [
    "type"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "operations": {
      "type": "array",
      "description": "List of operations to perform.",
      "anyOf": [
        {
          "$ref": "#/definitions/ForkOperationConfig"
        },
        {
          "$ref": "#/definitions/LowerCaseKeyOperationConfig"
        },
        {
          "$ref": "#/definitions/JsonRootNodeOperationConfig"
        },
        {
          "$ref": "#/definitions/SubstitutionOperationConfig"
        },
        {
          "$ref": "#/definitions/PartitionOperationConfig"
        },
        {
          "$ref": "#/definitions/ArraySplitOperationConfig"
        },
        {
          "$ref": "#/definitions/URLDecodeOperationConfig"
        },
        {
          "$ref": "#/definitions/DeleteFieldOperationConfig"
        },
        {
          "$ref": "#/definitions/DropArraysOperationConfig"
        },
        {
          "$ref": "#/definitions/TimeOperationConfig"
        },
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/GeoIpOperationConfig"
        },
        {
          "$ref": "#/definitions/FlattenOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameReplacementOperationConfig"
        },
        {
          "$ref": "#/definitions/ConditionalOperationConfig"
        },
        {
          "$ref": "#/definitions/GelfOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameOperationConfig"
        }
      ]
    },
    "condition": {
      "oneOf": [
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        }
      ],
      "description": "Filter operation to evaluate events against."
    }
  },
  "required": [
    "condition"
  ]
}
filter_non_match
boolean default false

When true events that don't match any conditions will be filtered out.

{
  "type": "object",
  "additionalProperties": false,
  "description": "The conditional operation allows for 'if else' style branches in the flow of Bender operations. Conditions are evaluated in order of appearance and the first matching condition will receive the event.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ConditionalOperation"
      ],
      "default": "ConditionalOperation"
    },
    "conditions": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Condition"
      },
      "description": "List of conditions and their operations."
    },
    "filter_non_match": {
      "type": "boolean",
      "default": false,
      "description": "When true events that don't match any conditions will be filtered out."
    }
  },
  "title": "ConditionalOperation",
  "required": [
    "type"
  ]
}
GelfOperation

Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.

{}
+
type
string constant GelfOperation default GelfOperation
src_host_field
array string

Field containing host string

src_short_message_field
array string

Field containing short_message string

src_full_message_field
array string

Field containing full_message string

src_timestamp_field
array string

Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior.

src_level_field
array string

Field containing syslog level number

src_facility_field
array string

Field containing syslog facility string

src_line_number_field
array string

Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead.

src_file_field
array string

Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "GelfOperation"
      ],
      "default": "GelfOperation"
    },
    "src_host_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing host string"
    },
    "src_short_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing short_message string"
    },
    "src_full_message_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing full_message string"
    },
    "src_timestamp_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
    },
    "src_level_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog level number"
    },
    "src_facility_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing syslog facility string"
    },
    "src_line_number_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
    },
    "src_file_field": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
    }
  },
  "title": "GelfOperation",
  "required": [
    "type",
    "src_host_field",
    "src_short_message_field"
  ]
}
JsonKeyNameOperation

Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {"foo": "one", "bar": 2} will become {"foo__str": "one", "bar__long": 2}. The mapping is string:str, boolean:boolean, array:arr, number:long or __float. It also repalces "." with "_" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or "." in key names.

{}
+
type
string constant JsonKeyNameOperation default JsonKeyNameOperation
{
  "type": "object",
  "additionalProperties": false,
  "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "JsonKeyNameOperation"
      ],
      "default": "JsonKeyNameOperation"
    }
  },
  "title": "JsonKeyNameOperation",
  "required": [
    "type"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Source name"
    },
    "source_regex": {
      "type": "string",
      "default": ".*",
      "description": "Pattern to match source trigger against"
    },
    "regex_patterns": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Regex patterns to filter events by prior to deserialization"
    },
    "contains_strings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Filter events containing these Strings prior to deserialization"
    },
    "deserializer": {
      "oneOf": [
        {
          "$ref": "#/definitions/RegexDeserializerConfig"
        },
        {
          "$ref": "#/definitions/GenericJsonDeserializerConfig"
        }
      ],
      "description": "Deserializer configuration"
    },
    "operations": {
      "type": "array",
      "description": "Operation configuration",
      "anyOf": [
        {
          "$ref": "#/definitions/ForkOperationConfig"
        },
        {
          "$ref": "#/definitions/LowerCaseKeyOperationConfig"
        },
        {
          "$ref": "#/definitions/JsonRootNodeOperationConfig"
        },
        {
          "$ref": "#/definitions/SubstitutionOperationConfig"
        },
        {
          "$ref": "#/definitions/PartitionOperationConfig"
        },
        {
          "$ref": "#/definitions/ArraySplitOperationConfig"
        },
        {
          "$ref": "#/definitions/URLDecodeOperationConfig"
        },
        {
          "$ref": "#/definitions/DeleteFieldOperationConfig"
        },
        {
          "$ref": "#/definitions/DropArraysOperationConfig"
        },
        {
          "$ref": "#/definitions/TimeOperationConfig"
        },
        {
          "$ref": "#/definitions/RegexFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/GeoIpOperationConfig"
        },
        {
          "$ref": "#/definitions/FlattenOperationConfig"
        },
        {
          "$ref": "#/definitions/BasicFilterOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameReplacementOperationConfig"
        },
        {
          "$ref": "#/definitions/ConditionalOperationConfig"
        },
        {
          "$ref": "#/definitions/GelfOperationConfig"
        },
        {
          "$ref": "#/definitions/KeyNameOperationConfig"
        }
      ]
    }
  },
  "required": [
    "name"
  ]
}
wrapper
one of KinesisWrapper PassthroughWrapper BasicWrapper S3Wrapper

Wrapper configuration

KinesisWrapper

Adds information about kinesis stream which the event came from. Included is partition, sequence number, source arn, event source, function name, function version, arrival timestsamp (ms since epoch), processing time (ms), processing delay (ms), processing timestsamp (ms since epoch).

{}
+
type
string constant KinesisWrapper default KinesisWrapper
{
  "type": "object",
  "additionalProperties": false,
  "description": "Adds information about kinesis stream which the event came from. Included is partition, sequence number, source arn, event source, function name, function version, arrival timestsamp (ms since epoch), processing time (ms), processing delay (ms), processing timestsamp (ms since epoch).",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KinesisWrapper"
      ],
      "default": "KinesisWrapper"
    }
  },
  "title": "KinesisWrapper",
  "required": [
    "type"
  ]
}
PassthroughWrapper

A meta wrapper that performs no wrapping and passes the payload through.

{}
+
type
string constant PassthroughWrapper default PassthroughWrapper
{
  "type": "object",
  "additionalProperties": false,
  "description": "A meta wrapper that performs no wrapping and passes the payload through.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "PassthroughWrapper"
      ],
      "default": "PassthroughWrapper"
    }
  },
  "title": "PassthroughWrapper",
  "required": [
    "type"
  ]
}
BasicWrapper

Includes the original payload, sha1 hash of the original event and event timestamp.

{}
+
type
string constant BasicWrapper default BasicWrapper
{
  "type": "object",
  "additionalProperties": false,
  "description": "Includes the original payload, sha1 hash of the original event and event timestamp.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "BasicWrapper"
      ],
      "default": "BasicWrapper"
    }
  },
  "title": "BasicWrapper",
  "required": [
    "type"
  ]
}
S3Wrapper

Adds information about function name, function version, processing time (in ms), processing delay (in ms), processing timestsamp (ms since epoch), sha1 hash of the original event, and s3 key, bucket, and key version from the source S3file read. Only works with the S3Handler and SNSS3Handler.

{}
+
type
string constant S3Wrapper default S3Wrapper
{
  "type": "object",
  "additionalProperties": false,
  "description": "Adds information about function name, function version, processing time (in ms), processing delay (in ms), processing timestsamp (ms since epoch), sha1 hash of the original event, and s3 key, bucket, and key version from the source S3file read. Only works with the S3Handler and SNSS3Handler.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "S3Wrapper"
      ],
      "default": "S3Wrapper"
    }
  },
  "title": "S3Wrapper",
  "required": [
    "type"
  ]
}
serializer
one of Json

Serializer configuration

Json

Serializes events into JSON format.

{}
+
type
string constant Json default Json
field_naming_policy
string enum IDENTITY UPPER_CAMEL_CASE UPPER_CAMEL_CASE_WITH_SPACES LOWER_CASE_WITH_UNDERSCORES LOWER_CASE_WITH_DASHES LOWER_CASE_WITH_DOTS default LOWER_CASE_WITH_UNDERSCORES
{
  "type": "object",
  "additionalProperties": false,
  "description": "Serializes events into JSON format.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Json"
      ],
      "default": "Json"
    },
    "field_naming_policy": {
      "type": "string",
      "default": "LOWER_CASE_WITH_UNDERSCORES",
      "enum": [
        "IDENTITY",
        "UPPER_CAMEL_CASE",
        "UPPER_CAMEL_CASE_WITH_SPACES",
        "LOWER_CASE_WITH_UNDERSCORES",
        "LOWER_CASE_WITH_DASHES",
        "LOWER_CASE_WITH_DOTS"
      ],
      "description": "GSON field naming policy. See https://google.github.io/gson/apidocs/com/google/gson/FieldNamingPolicy.html"
    }
  },
  "title": "Json",
  "required": [
    "type"
  ]
}
transport
one of File S3 ElasticSearch Scalyr Gelf Stdout HTTP HTTP2 SumoLogic Splunk Firehose Datadog DevNull

Transport configuration

File

Writes events to a file on the local file system. Typically only used for testing and debugging.

{}
+
type
string constant File default File
threads
integer default 5

Number of concurrent transporters allowed

filename
string

Local filesystem file to write data to

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events to a file on the local file system. Typically only used for testing and debugging.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "File"
      ],
      "default": "File"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "filename": {
      "type": "string",
      "description": "Local filesystem file to write data to"
    }
  },
  "title": "File",
  "required": [
    "type",
    "filename"
  ]
}
S3

Writes batches of events to S3. The output filename will either be the unique function inocation request id as specified by Lambda or a hash of the input filename when using the S3 handler. Required IAM permissions are: s3:AbortMultipartUpload, s3:PutObject, s3:ListMultipartUploadParts, s3:ListBucketMultipartUploads

{}
+
type
string constant S3 default S3
threads
integer default 5

Number of concurrent transporters allowed

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region.

bucket_name
string

S3 bucket name.

base_path
string

Path to append to S3 keys.

use_compression
boolean default true

Compress files with bz2 compression.

compress_buffer
boolean default false

When using compression optionally compress buffered data as it is serialized. This is optimal for no or low cardinality partitioning. When writing high cardinality data this may result in OOMs due to high overhead of having a compressor for each partition.

max_buffer_size
integer [5242880;∞] default 6291456

Amount of serialized data to hold in memory before forcing a write to S3. It is important to note that this value is per partition and having too many or too large buffers will lead to OOMs. Also, S3 requires multi-part files have parts of more than 5mb. When using compression and NOT compressing buffers you must take compression ratio into account. Meaning that when compressed the contents of your buffer must be more than 5mb or the put to S3 will fail. Set this value accordingly high to account for compression.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes batches of events to S3. The output filename will either be the unique function inocation request id as specified by Lambda or a hash of the input filename when using the S3 handler. Required IAM permissions are: s3:AbortMultipartUpload, s3:PutObject, s3:ListMultipartUploadParts, s3:ListBucketMultipartUploads",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "S3"
      ],
      "default": "S3"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
    },
    "bucket_name": {
      "type": "string",
      "description": "S3 bucket name."
    },
    "base_path": {
      "type": "string",
      "description": "Path to append to S3 keys."
    },
    "use_compression": {
      "type": "boolean",
      "default": true,
      "description": "Compress files with bz2 compression."
    },
    "compress_buffer": {
      "type": "boolean",
      "default": false,
      "description": "When using compression optionally compress buffered data as it is serialized. This is optimal for no or low cardinality partitioning. When writing high cardinality data this may result in OOMs due to high overhead of having a compressor for each partition."
    },
    "max_buffer_size": {
      "type": "integer",
      "minimum": 5242880,
      "default": 6291456,
      "description": "Amount of serialized data to hold in memory before forcing a write to S3. It is important to note that this value is per partition and having too many or too large buffers will lead to OOMs. Also, S3 requires multi-part files have parts of more than 5mb. When using compression and NOT compressing buffers you must take compression ratio into account. Meaning that when compressed the contents of your buffer must be more than 5mb or the put to S3 will fail. Set this value accordingly high to account for compression."
    }
  },
  "title": "S3",
  "required": [
    "type",
    "bucket_name"
  ]
}
ElasticSearch

Writes to an ElasticSearch cluster. When using AWS hosted ES do not use gzip compression.

{}
+
type
string constant ElasticSearch default ElasticSearch
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

HTTP endpoint hostname.

port
integer [1;65535] default 9200

ElasticSearch HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Socket timeout on HTTP connection.

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
auth_config
one of UrlSigningAuth UserPassAuth

Authentication scheme.

UrlSigningAuth
{}
+
type
string constant UrlSigningAuth default UrlSigningAuth
region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1
service
string
http_interceptor
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UrlSigningAuth"
      ],
      "default": "UrlSigningAuth"
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ]
    },
    "service": {
      "type": "string"
    },
    "http_interceptor": {}
  },
  "title": "UrlSigningAuth",
  "required": [
    "type",
    "region",
    "service"
  ]
}
UserPassAuth
{}
+
type
string constant UserPassAuth default UserPassAuth
username
string
password
one of KmsValue StringValue
KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UserPassAuth"
      ],
      "default": "UserPassAuth"
    },
    "username": {
      "type": "string"
    },
    "password": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ]
    }
  },
  "title": "UserPassAuth",
  "required": [
    "type",
    "username",
    "password"
  ]
}
index
string

Index to write to.

document_type
string

ElasticSearch document type.

bulk_api_path
string default /_bulk

ElasticSearch bulk api path including leading slash '/'.

index_time_format
string

Java time format to append to index name.

routing_field_name
string default _routing

Name of the routing field. ElasticSearch 6+ changed the field name from _routing to routing.

http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
use_hashid
boolean default false

Use hash id generated by Bender as document id.

use_partitions_for_routing
boolean default false

Use partitions as a mechanism for routing records to Elasticsearch. Routing allows a document to be written to a specific shard within an index. Using routing can, if configured correctly, dramatically improve read and/or write performance when indexing or searching documents. However, this is largely based on your data, data source, and workload. For more details on routing consult:

https://www.elastic.co/blog/customizing-your-document-routing
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html

Partition keys and values will be concatenated by "=" and separated by "/". Ifyour partitions are part1=foo and part2=bar the Elasticsearch "_routing" field will have the value "part1=foo/part2=bar".

A typical routing strategy is to use the data source context associated with a function's invocation. For instance with Kinesis this can be the shard-id and with S3 the source file. This approach ensures a single function invocation writes to only one shard. However, to avoid hot spots, it's also advised that you have a secondary partitioning key with low cardinality. For example bucketing by 5 minute intervals in addition to using shard-id.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes to an ElasticSearch cluster. When using AWS hosted ES do not use gzip compression.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "ElasticSearch"
      ],
      "default": "ElasticSearch"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 9200,
      "description": "ElasticSearch HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Socket timeout on HTTP connection."
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "auth_config": {
      "oneOf": [
        {
          "$ref": "#/definitions/UrlSigningAuthConfig"
        },
        {
          "$ref": "#/definitions/BasicHttpAuthConfig"
        }
      ],
      "description": "Authentication scheme."
    },
    "index": {
      "type": "string",
      "description": "Index to write to."
    },
    "document_type": {
      "type": "string",
      "description": "ElasticSearch document type."
    },
    "bulk_api_path": {
      "type": "string",
      "default": "/_bulk",
      "description": "ElasticSearch bulk api path including leading slash '/'."
    },
    "index_time_format": {
      "type": "string",
      "description": "Java time format to append to index name."
    },
    "routing_field_name": {
      "type": "string",
      "default": "_routing",
      "description": "Name of the routing field. ElasticSearch 6+ changed the field name from `_routing` to `routing`."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "use_hashid": {
      "type": "boolean",
      "default": false,
      "description": "Use hash id generated by Bender as document id."
    },
    "use_partitions_for_routing": {
      "type": "boolean",
      "default": false,
      "description": "Use partitions as a mechanism for routing records to Elasticsearch. Routing allows a document to be written to a specific shard within an index. Using routing can, if configured correctly, dramatically improve read and/or write performance when indexing or searching documents. However, this is largely based on your data, data source, and workload. For more details on routing consult:\n\nhttps://www.elastic.co/blog/customizing-your-document-routing\nhttps://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html\n\nPartition keys and values will be concatenated by \"=\" and separated by \"/\". Ifyour partitions are part1=foo and part2=bar the Elasticsearch \"_routing\" field will have the value \"part1=foo/part2=bar\". \n\nA typical routing strategy is to use the data source context associated with a function's invocation. For instance with Kinesis this can be the shard-id and with S3 the source file. This approach ensures a single function invocation writes to only one shard. However, to avoid hot spots, it's also advised that you have a secondary partitioning key with low cardinality. For example bucketing by 5 minute intervals in addition to using shard-id."
    }
  },
  "title": "ElasticSearch",
  "required": [
    "type",
    "hostname",
    "index",
    "document_type"
  ]
}
Scalyr

Writes events to a Scalyr endpoint.

{}
+
type
string constant Scalyr default Scalyr
threads
integer default 5

Number of concurrent transporters allowed

hostname
string default www.scalyr.com

Scalyr HTTP endpoint hostname.

port
integer [1;65535] default 443

HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Socket timeout on HTTP connection.

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
token
one of KmsValue StringValue

Scalyr auth token.

KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
parser
string default json

Scalyr String Parser.

http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events to a Scalyr endpoint.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Scalyr"
      ],
      "default": "Scalyr"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "default": "www.scalyr.com",
      "description": "Scalyr HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 443,
      "description": "HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Socket timeout on HTTP connection."
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "token": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ],
      "description": "Scalyr auth token."
    },
    "parser": {
      "type": "string",
      "default": "json",
      "description": "Scalyr String Parser."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "title": "Scalyr",
  "required": [
    "type",
    "token"
  ]
}
Gelf

Writes logs into a Graylog TCP GELF Input

{}
+
type
string constant Gelf default Gelf
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

TCP endpoint hostname.

port
integer [1;65535]

TCP endpoint port.

use_ssl
boolean default true

Use SSL/TLS connections.

verify_ssl
boolean default true

Verify SSL/TLS certificates.

max_buffer_size
integer [1024;10485760] default 10240

Maximum size (in bytes) in memory before triggering a write.

retry_count
integer [0;10] default 0

Number of retries to make when a write failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;60000] default 30000

Socket timeout (in milliseconds) on TCP connection.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes logs into a Graylog TCP GELF Input",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Gelf"
      ],
      "default": "Gelf"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "TCP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "description": "TCP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": true,
      "description": "Use SSL/TLS connections."
    },
    "verify_ssl": {
      "type": "boolean",
      "default": true,
      "description": "Verify SSL/TLS certificates."
    },
    "max_buffer_size": {
      "type": "integer",
      "minimum": 1024,
      "maximum": 10485760,
      "default": 10240,
      "description": "Maximum size (in bytes) in memory before triggering a write."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a write failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 60000,
      "default": 30000,
      "description": "Socket timeout (in milliseconds) on TCP connection."
    }
  },
  "title": "Gelf",
  "required": [
    "type",
    "hostname",
    "port"
  ]
}
Stdout

Writes events out to the console for testing and debugging

{}
+
type
string constant Stdout default Stdout
threads
integer default 5

Number of concurrent transporters allowed

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events out to the console for testing and debugging",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Stdout"
      ],
      "default": "Stdout"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    }
  },
  "title": "Stdout",
  "required": [
    "type"
  ]
}
HTTP

HTTP transport that only supports HTTP1/1

{}
+
type
string constant HTTP default HTTP
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

HTTP endpoint hostname.

port
integer [1;65535] default 443

HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Socket timeout on HTTP connection.

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
path
string

HTTP endpoint path and query string including leading slash '/'.

separator
string

Separator used between serialized records.

basic_http_auth
one of UserPassAuth

Username and password used for use with http basic auth.

UserPassAuth
{}
+
type
string constant UserPassAuth default UserPassAuth
username
string
password
one of KmsValue StringValue
KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UserPassAuth"
      ],
      "default": "UserPassAuth"
    },
    "username": {
      "type": "string"
    },
    "password": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ]
    }
  },
  "title": "UserPassAuth",
  "required": [
    "type",
    "username",
    "password"
  ]
}
http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "HTTP transport that only supports HTTP1/1",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "HTTP"
      ],
      "default": "HTTP"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 443,
      "description": "HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Socket timeout on HTTP connection."
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "path": {
      "type": "string",
      "description": "HTTP endpoint path and query string including leading slash '/'."
    },
    "separator": {
      "type": "string",
      "description": "Separator used between serialized records."
    },
    "basic_http_auth": {
      "oneOf": [
        {
          "$ref": "#/definitions/BasicHttpAuthConfig"
        }
      ],
      "description": "Username and password used for use with http basic auth."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "title": "HTTP",
  "required": [
    "type",
    "hostname",
    "path"
  ]
}
HTTP2

HTTP transport that supports both HTTP/1.1 and HTTP/2. It will auto negotiate with the server.

{}
+
type
string constant HTTP2 default HTTP2
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

HTTP endpoint hostname.

port
integer [1;65535] default 443

HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Request timeout in milliseconds

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
path
string

HTTP endpoint path and query string including leading slash '/'.

separator
string

Separator used between serialized records.

basic_http_auth
one of UserPassAuth

Username and password used for use with http basic auth.

UserPassAuth
{}
+
type
string constant UserPassAuth default UserPassAuth
username
string
password
one of KmsValue StringValue
KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "UserPassAuth"
      ],
      "default": "UserPassAuth"
    },
    "username": {
      "type": "string"
    },
    "password": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ]
    }
  },
  "title": "UserPassAuth",
  "required": [
    "type",
    "username",
    "password"
  ]
}
http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "HTTP transport that supports both HTTP/1.1 and HTTP/2. It will auto negotiate with the server.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "HTTP2"
      ],
      "default": "HTTP2"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 443,
      "description": "HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Request timeout in milliseconds"
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "path": {
      "type": "string",
      "description": "HTTP endpoint path and query string including leading slash '/'."
    },
    "separator": {
      "type": "string",
      "description": "Separator used between serialized records."
    },
    "basic_http_auth": {
      "oneOf": [
        {
          "$ref": "#/definitions/BasicHttpAuthConfig"
        }
      ],
      "description": "Username and password used for use with http basic auth."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "title": "HTTP2",
  "required": [
    "type",
    "hostname",
    "path"
  ]
}
SumoLogic

Writes events to a SumoLogic endpoint.

{}
+
type
string constant SumoLogic default SumoLogic
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

HTTP endpoint hostname.

port
integer [1;65535] default 443

HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Socket timeout on HTTP connection.

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
auth_token
one of KmsValue StringValue

Sumo Logic auth token. This is suffix of the http source url starting after '/receiver/v1/http/'.

KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events to a SumoLogic endpoint.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "SumoLogic"
      ],
      "default": "SumoLogic"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 443,
      "description": "HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Socket timeout on HTTP connection."
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "auth_token": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ],
      "description": "Sumo Logic auth token. This is suffix of the http source url starting after '/receiver/v1/http/'."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "title": "SumoLogic",
  "required": [
    "type",
    "hostname",
    "auth_token"
  ]
}
Splunk

Writes events to a Splunk HEC endpoint.

{}
+
type
string constant Splunk default Splunk
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

HTTP endpoint hostname.

port
integer [1;65535] default 443

HTTP endpoint port.

use_ssl
boolean default false

Use SSL connections (certificates are not validated).

use_gzip
boolean default false

Use GZIP compression on HTTP calls.

batch_size
integer [1;100000] default 500

Maximum number of documents in api call.

retry_count
integer [0;10] default 0

Number of retries to make when a put failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;300000] default 40000

Socket timeout on HTTP connection.

http_headers
object map

HTTP headers to include.

HTTP headers to include.

{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "$ref": "#/definitions/KmsValueConfig"
      },
      {
        "$ref": "#/definitions/StringValueConfig"
      }
    ]
  },
  "description": "HTTP headers to include."
}
auth_token
one of KmsValue StringValue

Splunk auth token.

KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
index
string

Splunk data index.

http_string_headers
object map string
{}
+
additional
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events to a Splunk HEC endpoint.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Splunk"
      ],
      "default": "Splunk"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "HTTP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "default": 443,
      "description": "HTTP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": false,
      "description": "Use SSL connections (certificates are not validated)."
    },
    "use_gzip": {
      "type": "boolean",
      "default": false,
      "description": "Use GZIP compression on HTTP calls."
    },
    "batch_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000,
      "default": 500,
      "description": "Maximum number of documents in api call."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a put failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 300000,
      "default": 40000,
      "description": "Socket timeout on HTTP connection."
    },
    "http_headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "#/definitions/KmsValueConfig"
          },
          {
            "$ref": "#/definitions/StringValueConfig"
          }
        ]
      },
      "description": "HTTP headers to include."
    },
    "auth_token": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ],
      "description": "Splunk auth token."
    },
    "index": {
      "type": "string",
      "description": "Splunk data index."
    },
    "http_string_headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "title": "Splunk",
  "required": [
    "type",
    "hostname",
    "auth_token"
  ]
}
Firehose

Transports events to AWS Kinesis Firehose. This transport is agnostic of the data being sent. However there are important limits to consider. The maximum size of a single Firehose record can not exceed 1000kb and the maximum for a batch is 4mb. Events larger than 1000kb will not be split across multiple Records. The transport contains two types of buffers. In BATCH mode it will attempt to write multiple events into a single Firehose Record in order to minimize number of Records sent. In SIMPLE mode each serialized event is putinto a its own Record. Firehose sinks like ElasticSearch require each event be its own Firehose Record.Required IAM permissions are: firehose:DescribeDeliveryStream, firehose:ListDeliveryStreams, firehose:PutRecord, firehose:PutRecordBatch

{}
+
type
string constant Firehose default Firehose
threads
integer default 5

Number of concurrent transporters allowed

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region.

stream_name
string

Firehose stream name to publish to.

firehose_buffer
string enum BATCH SIMPLE default BATCH

Type of buffer to use. BATCH buffer combines records while SIMPLE does not. Use SIMPLE when your firehose writes to ElasticSearch.

append_newline
boolean default true

If a new line should be appended to records. This is typically what you will want unless you are writing binary data. Set to false when Firehose is writing into ElasticSearch.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transports events to AWS Kinesis Firehose. This transport is agnostic of the data being sent. However there are important limits to consider. The maximum size of a single Firehose record can not exceed 1000kb and the maximum for a batch is 4mb. Events larger than 1000kb will not be split across multiple Records. The transport contains two types of buffers. In BATCH mode it will attempt to write multiple events into a single Firehose Record in order to minimize number of Records sent. In SIMPLE mode each serialized event is putinto a its own Record. Firehose sinks like ElasticSearch require each event be its own Firehose Record.Required IAM permissions are: firehose:DescribeDeliveryStream, firehose:ListDeliveryStreams, firehose:PutRecord, firehose:PutRecordBatch",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Firehose"
      ],
      "default": "Firehose"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
    },
    "stream_name": {
      "type": "string",
      "description": "Firehose stream name to publish to."
    },
    "firehose_buffer": {
      "type": "string",
      "default": "BATCH",
      "enum": [
        "BATCH",
        "SIMPLE"
      ],
      "description": "Type of buffer to use. BATCH buffer combines records while SIMPLE does not. Use SIMPLE when your firehose writes to ElasticSearch."
    },
    "append_newline": {
      "type": "boolean",
      "default": true,
      "description": "If a new line should be appended to records. This is typically what you will want unless you are writing binary data. Set to false when Firehose is writing into ElasticSearch."
    }
  },
  "title": "Firehose",
  "required": [
    "type",
    "stream_name"
  ]
}
Datadog

Writes events to a Datadog endpoint.

{}
+
type
string constant Datadog default Datadog
threads
integer default 5

Number of concurrent transporters allowed

hostname
string

TCP endpoint hostname.

port
integer [1;65535]

TCP endpoint port.

use_ssl
boolean default true

Use SSL/TLS connections.

verify_ssl
boolean default true

Verify SSL/TLS certificates.

max_buffer_size
integer [1024;10485760] default 10240

Maximum size (in bytes) in memory before triggering a write.

retry_count
integer [0;10] default 0

Number of retries to make when a write failure occurs.

retry_delay
integer [1;60000] default 1000

Initial delay between retries. If more than one retries specified exponential backoff is used.

timeout
integer [1000;60000] default 30000

Socket timeout (in milliseconds) on TCP connection.

api_key
one of KmsValue StringValue

Datadog API key.

KmsValue
{}
+
type
string constant KmsValue default KmsValue
value
string

KMS encrypted value.

region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

AWS region associated with the KMS key used to encrypt the value.

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "KmsValue"
      ],
      "default": "KmsValue"
    },
    "value": {
      "type": "string",
      "description": "KMS encrypted value."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "AWS region associated with the KMS key used to encrypt the value."
    }
  },
  "title": "KmsValue",
  "required": [
    "type",
    "value",
    "region"
  ]
}
StringValue
{}
+
type
string constant StringValue default StringValue
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "StringValue"
      ],
      "default": "StringValue"
    },
    "value": {
      "type": "string"
    }
  },
  "title": "StringValue",
  "required": [
    "type",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes events to a Datadog endpoint.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Datadog"
      ],
      "default": "Datadog"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    },
    "hostname": {
      "type": "string",
      "description": "TCP endpoint hostname."
    },
    "port": {
      "type": "integer",
      "minimum": 1,
      "maximum": 65535,
      "description": "TCP endpoint port."
    },
    "use_ssl": {
      "type": "boolean",
      "default": true,
      "description": "Use SSL/TLS connections."
    },
    "verify_ssl": {
      "type": "boolean",
      "default": true,
      "description": "Verify SSL/TLS certificates."
    },
    "max_buffer_size": {
      "type": "integer",
      "minimum": 1024,
      "maximum": 10485760,
      "default": 10240,
      "description": "Maximum size (in bytes) in memory before triggering a write."
    },
    "retry_count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10,
      "default": 0,
      "description": "Number of retries to make when a write failure occurs."
    },
    "retry_delay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60000,
      "default": 1000,
      "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
    },
    "timeout": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 60000,
      "default": 30000,
      "description": "Socket timeout (in milliseconds) on TCP connection."
    },
    "api_key": {
      "oneOf": [
        {
          "$ref": "#/definitions/KmsValueConfig"
        },
        {
          "$ref": "#/definitions/StringValueConfig"
        }
      ],
      "description": "Datadog API key."
    }
  },
  "title": "Datadog",
  "required": [
    "type",
    "hostname",
    "port",
    "api_key"
  ]
}
DevNull

Transport for testing and development. Serialized events simply get cleared out of the transport buffer.

{}
+
type
string constant DevNull default DevNull
threads
integer default 5

Number of concurrent transporters allowed

{
  "type": "object",
  "additionalProperties": false,
  "description": "Transport for testing and development. Serialized events simply get cleared out of the transport buffer.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DevNull"
      ],
      "default": "DevNull"
    },
    "threads": {
      "type": "integer",
      "default": 5,
      "description": "Number of concurrent transporters allowed"
    }
  },
  "title": "DevNull",
  "required": [
    "type"
  ]
}
reporters
array any of Cloudwatch DataDog CloudWatchEmbeddedMetrics

List of reporter configurations

Cloudwatch

Writes metrics to Cloudwatch. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.

{}
+
type
string constant Cloudwatch default Cloudwatch
stat_filters
array StatFilter

List of filter to apply to stats. If a stat matches the filter it is excluded when being published.

StatFilter
{}
+
name
string

Name of the Stat to match against

report_zeros
boolean default true

Report zero-valued stats

tags
array Tag

Map of tag names and values to match

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the Stat to match against"
    },
    "report_zeros": {
      "type": "boolean",
      "default": true,
      "description": "Report zero-valued stats"
    },
    "tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Map of tag names and values to match"
    }
  },
  "required": [
    "name"
  ]
}
region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region.

namespace
string default Nextdoor/bender

Cloudwatch namespace to write metrics under.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes metrics to Cloudwatch. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "Cloudwatch"
      ],
      "default": "Cloudwatch"
    },
    "stat_filters": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/StatFilter"
      },
      "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
    },
    "namespace": {
      "type": "string",
      "default": "Nextdoor/bender",
      "description": "Cloudwatch namespace to write metrics under."
    }
  },
  "title": "Cloudwatch",
  "required": [
    "type"
  ]
}
DataDog

Writes metrics to standard out. To setup DataDog lambda integration see https://www.datadoghq.com/blog/monitoring-lambda-functions-datadog/.

{}
+
type
string constant DataDog default DataDog
stat_filters
array StatFilter

List of filter to apply to stats. If a stat matches the filter it is excluded when being published.

StatFilter
{}
+
name
string

Name of the Stat to match against

report_zeros
boolean default true

Report zero-valued stats

tags
array Tag

Map of tag names and values to match

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the Stat to match against"
    },
    "report_zeros": {
      "type": "boolean",
      "default": true,
      "description": "Report zero-valued stats"
    },
    "tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Map of tag names and values to match"
    }
  },
  "required": [
    "name"
  ]
}
prefix
string default lambda.bender

Prefix to append to metric names

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes metrics to standard out. To setup DataDog lambda integration see https://www.datadoghq.com/blog/monitoring-lambda-functions-datadog/.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "DataDog"
      ],
      "default": "DataDog"
    },
    "stat_filters": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/StatFilter"
      },
      "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
    },
    "prefix": {
      "type": "string",
      "default": "lambda.bender",
      "description": "Prefix to append to metric names"
    }
  },
  "title": "DataDog",
  "required": [
    "type"
  ]
}
CloudWatchEmbeddedMetrics

Writes metrics to Cloudwatch by printing to stdout. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.

{}
+
type
string constant CloudWatchEmbeddedMetrics default CloudWatchEmbeddedMetrics
stat_filters
array StatFilter

List of filter to apply to stats. If a stat matches the filter it is excluded when being published.

StatFilter
{}
+
name
string

Name of the Stat to match against

report_zeros
boolean default true

Report zero-valued stats

tags
array Tag

Map of tag names and values to match

Tag
{}
+
key
string
value
string
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "key": {
      "type": "string"
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "key",
    "value"
  ]
}
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the Stat to match against"
    },
    "report_zeros": {
      "type": "boolean",
      "default": true,
      "description": "Report zero-valued stats"
    },
    "tags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Tag"
      },
      "description": "Map of tag names and values to match"
    }
  },
  "required": [
    "name"
  ]
}
region
string enum GovCloud US_GOV_EAST_1 US_EAST_1 US_EAST_2 US_WEST_1 US_WEST_2 EU_WEST_1 EU_WEST_2 EU_WEST_3 EU_CENTRAL_1 EU_NORTH_1 AP_EAST_1 AP_SOUTH_1 AP_SOUTHEAST_1 AP_SOUTHEAST_2 AP_NORTHEAST_1 AP_NORTHEAST_2 SA_EAST_1 CN_NORTH_1 CN_NORTHWEST_1 CA_CENTRAL_1 ME_SOUTH_1

Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region.

namespace
string default Nextdoor/bender

Cloudwatch namespace to write metrics under.

{
  "type": "object",
  "additionalProperties": false,
  "description": "Writes metrics to Cloudwatch by printing to stdout. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "CloudWatchEmbeddedMetrics"
      ],
      "default": "CloudWatchEmbeddedMetrics"
    },
    "stat_filters": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/StatFilter"
      },
      "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
    },
    "region": {
      "type": "string",
      "enum": [
        "GovCloud",
        "US_GOV_EAST_1",
        "US_EAST_1",
        "US_EAST_2",
        "US_WEST_1",
        "US_WEST_2",
        "EU_WEST_1",
        "EU_WEST_2",
        "EU_WEST_3",
        "EU_CENTRAL_1",
        "EU_NORTH_1",
        "AP_EAST_1",
        "AP_SOUTH_1",
        "AP_SOUTHEAST_1",
        "AP_SOUTHEAST_2",
        "AP_NORTHEAST_1",
        "AP_NORTHEAST_2",
        "SA_EAST_1",
        "CN_NORTH_1",
        "CN_NORTHWEST_1",
        "CA_CENTRAL_1",
        "ME_SOUTH_1"
      ],
      "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
    },
    "namespace": {
      "type": "string",
      "default": "Nextdoor/bender",
      "description": "Cloudwatch namespace to write metrics under."
    }
  },
  "title": "CloudWatchEmbeddedMetrics",
  "required": [
    "type"
  ]
}
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Bender - Serverless ETL Framework",
  "type": "object",
  "additionalProperties": false,
  "description": "Bender provides an extendable Java framework for creating serverless  ETL functions on AWS Lambda.\nIt handles the complex plumbing and provides the interfaces necessary to build modules for all aspects of the ETL\nprocess. Check it out at https://github.com/nextdoor/bender.<br><br><h3>Specifying Configuration</h3><br><h4>S3 File</h4><br>Upload your configuration file to an S3 bucket and when creating your lambda function specify the environment\nvariable BENDER_CONFIG pointing to your configuration file in S3. For example BENDER_CONFIG=s3://example/bender.json.\nNote that your function will require sufficient IAM privileges to read from this file.<br><br><h4>Embedded File</h4><br>If using APEX to deploy your lambda function you can add your configuration file inside a config directory.\nSee https://github.com/Nextdoor/bender/tree/master/example_project for an example. When using this method name your\nconfiguration files corresponding to your lambda function aliases. Default is $LATEST.json<br><br><h3>Variable Substitution</h3><br>Your configuration file can contain variables which are substituted for lambda function \nenvironment variables. In your configuration wrap the environment with &lt;&gt; tags. \nFor example: <br><pre>{\"foo\": &lt;BAR&gt;}</pre>\n\nNote that if BENDER_SKIP_VALIDATE=true env var is set then Bender will not validate the configuration at runtime.\nUse this if you validate the configuration files with the CLI tool prior to deployment.",
  "properties": {
    "handler": {
      "oneOf": [
        {
          "$ref": "#/definitions/DynamodbHandlerConfig"
        },
        {
          "$ref": "#/definitions/S3HandlerConfig"
        },
        {
          "$ref": "#/definitions/SNSS3HandlerConfig"
        },
        {
          "$ref": "#/definitions/KinesisHandlerConfig"
        }
      ],
      "description": "Handler configuration"
    },
    "sources": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/SourceConfig"
      },
      "description": "Source configurations. This includes deserializer and operators."
    },
    "wrapper": {
      "oneOf": [
        {
          "$ref": "#/definitions/KinesisWrapperConfig"
        },
        {
          "$ref": "#/definitions/PassthroughWrapperConfig"
        },
        {
          "$ref": "#/definitions/BasicWrapperConfig"
        },
        {
          "$ref": "#/definitions/S3WrapperConfig"
        }
      ],
      "description": "Wrapper configuration"
    },
    "serializer": {
      "oneOf": [
        {
          "$ref": "#/definitions/JsonSerializerConfig"
        }
      ],
      "description": "Serializer configuration"
    },
    "transport": {
      "oneOf": [
        {
          "$ref": "#/definitions/FileTransportConfig"
        },
        {
          "$ref": "#/definitions/S3TransportConfig"
        },
        {
          "$ref": "#/definitions/ElasticSearchTransportConfig"
        },
        {
          "$ref": "#/definitions/ScalyrTransportConfig"
        },
        {
          "$ref": "#/definitions/GelfTransportConfig"
        },
        {
          "$ref": "#/definitions/StdoutTransportConfig"
        },
        {
          "$ref": "#/definitions/HttpTransportConfig"
        },
        {
          "$ref": "#/definitions/Http2TransportConfig"
        },
        {
          "$ref": "#/definitions/SumoLogicTransportConfig"
        },
        {
          "$ref": "#/definitions/SplunkTransportConfig"
        },
        {
          "$ref": "#/definitions/FirehoseTransportConfig"
        },
        {
          "$ref": "#/definitions/DatadogTransportConfig"
        },
        {
          "$ref": "#/definitions/DevNullTransportConfig"
        }
      ],
      "description": "Transport configuration"
    },
    "reporters": {
      "type": "array",
      "description": "List of reporter configurations",
      "anyOf": [
        {
          "$ref": "#/definitions/CloudwatchReporterConfig"
        },
        {
          "$ref": "#/definitions/DataDogReporterConfig"
        },
        {
          "$ref": "#/definitions/CloudWatchEmbeddedMetricsReporterConfig"
        }
      ]
    }
  },
  "definitions": {
    "DynamodbHandlerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "For use with DynamoDB stream triggers. Set the function handler to \"com.nextdoor.bender.handler.dynamodb.DynamodbHandler::handler\". The following IAM permissions are also required: dynamodb:DescribeStream, dynamodb:GetRecords, dynamodb:GetShardIterator, and dynamodb:ListStreams. DynamoDB stream events use AttributeValues (see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html) which uses data type as name, but such construct is converted to standard JSON by DynamodbHandler. For example, {\"value\":{\"N\":\"123\"}} becomes {\"value\":123}.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "DynamodbHandler"
          ],
          "default": "DynamodbHandler"
        },
        "fail_on_exception": {
          "type": "boolean",
          "default": true,
          "description": "If an uncaught exception occurs fail the function"
        },
        "include_function_tags": {
          "type": "boolean",
          "default": false,
          "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
        },
        "metric_tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
        },
        "queue_size": {
          "type": "integer",
          "default": 500,
          "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
        }
      },
      "title": "DynamodbHandler",
      "required": [
        "type"
      ]
    },
    "Tag": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "key",
        "value"
      ]
    },
    "S3HandlerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "For use with S3 Object creation Lambda triggers. You will also need to set the function handler to \"com.nextdoor.bender.handler.s3.S3Handler::handler\". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissoins to the S3 bucket to invoke your function.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "S3Handler"
          ],
          "default": "S3Handler"
        },
        "fail_on_exception": {
          "type": "boolean",
          "default": true,
          "description": "If an uncaught exception occurs fail the function"
        },
        "include_function_tags": {
          "type": "boolean",
          "default": false,
          "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
        },
        "metric_tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
        },
        "queue_size": {
          "type": "integer",
          "default": 500,
          "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
        },
        "sns_notification_arn": {
          "type": "string",
          "description": "SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish."
        },
        "log_s3_trigger": {
          "type": "boolean",
          "default": false,
          "description": "Logs the original S3 notification that triggered the function."
        }
      },
      "title": "S3Handler",
      "required": [
        "type"
      ]
    },
    "SNSS3HandlerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Similar to the S3Handler but reads SNS notifications which contain S3 Object creation events. This is may be required if you have multiple functions running against the same bucket. For more information about S3 SNS triggers see https://aws.amazon.com/blogs/compute/fanout-s3-event-notifications-to-multiple-endpoints/.You will need to set the function handler to \"com.nextdoor.bender.handler.s3.SNSS3Handler::handler\". The following IAM permissions are required: s3:GetObject and lambda:InvokeFunction. Note you will also need to provide permissions to S3 bucket to publish to SNS and SNS to invoke your function.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "SNSS3Handler"
          ],
          "default": "SNSS3Handler"
        },
        "fail_on_exception": {
          "type": "boolean",
          "default": true,
          "description": "If an uncaught exception occurs fail the function"
        },
        "include_function_tags": {
          "type": "boolean",
          "default": false,
          "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
        },
        "metric_tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
        },
        "queue_size": {
          "type": "integer",
          "default": 500,
          "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
        },
        "sns_notification_arn": {
          "type": "string",
          "description": "SNS Topic to publish function falures to. Do not use this for function retries. Instead use DLQs http://docs.aws.amazon.com/lambda/latest/dg/dlq.html. This requires IAM permission SNS:Publish."
        },
        "log_sns_trigger": {
          "type": "boolean",
          "default": false,
          "description": "Logs the original SNS notification that triggered the function."
        }
      },
      "title": "SNSS3Handler",
      "required": [
        "type"
      ]
    },
    "KinesisHandlerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "For use with Kinesis triggers. Set the function handler to \"com.nextdoor.bender.handler.kinesis.KinesisHandler::handler\". The following IAM permissions are also required: kinesis:DescribeStream, kinesis:ListStreams, kinesis:GetShardIterator, kinesis:GetRecords, and kinesis:ListTagsForStream.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "KinesisHandler"
          ],
          "default": "KinesisHandler"
        },
        "fail_on_exception": {
          "type": "boolean",
          "default": true,
          "description": "If an uncaught exception occurs fail the function"
        },
        "include_function_tags": {
          "type": "boolean",
          "default": false,
          "description": "Adds Lambda function resource tags to reporters' metrics. Note that the lambda:ListTags IAM permission is required."
        },
        "metric_tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "description": "Additional tags to add to reporters' metrics. Note Lambda function resource tags take precedence."
        },
        "queue_size": {
          "type": "integer",
          "default": 500,
          "description": "Maximum queue size used to buffer raw data prior to deserialization. This adds back pressure that ensures Bender does not read quicker than it can process and send to your desination (transport). Increasing the buffer will increase memory pressure and risk of OOM but will have the benefit of increasing throughput."
        },
        "add_kinesis_shard_to_partitions": {
          "type": "boolean",
          "default": false,
          "description": "Whether to add kinesis shardid to the event partitions list. The key is \"__shardid__\" and value will look like \"shardId-000000000000\". Note that partitioning must be either enabled or supported by the transport you use. Not all transporters support partitioning."
        },
        "decompress": {
          "type": "boolean",
          "default": false,
          "description": "If this flag is set to true, then the Kinesis handler will assume all incoming Kinesis record's data will be a gzip that needs to be decompressed before it's stored as a string in the KinesisInternalEvent. One example use case is how using a CloudWatch log subscription filter on Kinesis results in data being stored as a zip that is base64 encoded. The Kinesis Java SDK willtake care of decoding so this flag ensures the gzip is inflated."
        },
        "buffer_size": {
          "type": "integer",
          "description": "This sets the buffer size (default 1024) when Kinesis data is a gzip and needs to be expanded. This flag is only used if the getAssumeKinesisDataIsGzipped config is set as true."
        },
        "add_shardid_to_partitions": {
          "type": "boolean"
        }
      },
      "title": "KinesisHandler",
      "required": [
        "type"
      ]
    },
    "SourceConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Source name"
        },
        "source_regex": {
          "type": "string",
          "default": ".*",
          "description": "Pattern to match source trigger against"
        },
        "regex_patterns": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Regex patterns to filter events by prior to deserialization"
        },
        "contains_strings": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter events containing these Strings prior to deserialization"
        },
        "deserializer": {
          "oneOf": [
            {
              "$ref": "#/definitions/RegexDeserializerConfig"
            },
            {
              "$ref": "#/definitions/GenericJsonDeserializerConfig"
            }
          ],
          "description": "Deserializer configuration"
        },
        "operations": {
          "type": "array",
          "description": "Operation configuration",
          "anyOf": [
            {
              "$ref": "#/definitions/ForkOperationConfig"
            },
            {
              "$ref": "#/definitions/LowerCaseKeyOperationConfig"
            },
            {
              "$ref": "#/definitions/JsonRootNodeOperationConfig"
            },
            {
              "$ref": "#/definitions/SubstitutionOperationConfig"
            },
            {
              "$ref": "#/definitions/PartitionOperationConfig"
            },
            {
              "$ref": "#/definitions/ArraySplitOperationConfig"
            },
            {
              "$ref": "#/definitions/URLDecodeOperationConfig"
            },
            {
              "$ref": "#/definitions/DeleteFieldOperationConfig"
            },
            {
              "$ref": "#/definitions/DropArraysOperationConfig"
            },
            {
              "$ref": "#/definitions/TimeOperationConfig"
            },
            {
              "$ref": "#/definitions/RegexFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/GeoIpOperationConfig"
            },
            {
              "$ref": "#/definitions/FlattenOperationConfig"
            },
            {
              "$ref": "#/definitions/BasicFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameReplacementOperationConfig"
            },
            {
              "$ref": "#/definitions/ConditionalOperationConfig"
            },
            {
              "$ref": "#/definitions/GelfOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameOperationConfig"
            }
          ]
        }
      },
      "required": [
        "name"
      ]
    },
    "RegexDeserializerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Extracts fields from a line with regex groups. Note that number of groups in regex must match number of fields specified.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Regex"
          ],
          "default": "Regex"
        },
        "fields": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ReFieldConfig"
          },
          "description": "List of field names and their types"
        },
        "regex": {
          "type": "string",
          "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
        },
        "use_re2j": {
          "type": "boolean",
          "default": false,
          "description": "Use the faster but less flexible regex library. See https://github.com/google/re2j"
        }
      },
      "title": "Regex",
      "required": [
        "type",
        "fields",
        "regex"
      ]
    },
    "ReFieldConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name to give to field"
        },
        "type": {
          "type": "string",
          "enum": [
            "STRING",
            "NUMBER",
            "BOOLEAN"
          ],
          "description": "Data type of field"
        }
      },
      "required": [
        "name",
        "type"
      ]
    },
    "GenericJsonDeserializerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Deserializes JSON without performing schema validation.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "GenericJson"
          ],
          "default": "GenericJson"
        },
        "nested_field_configs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FieldConfig"
          },
          "description": "Configuration on how to interpret string fields which can also be deserialized as JSON. For example: {\"foo\": \"{\"bar\": \"baz\"}\"} will become {\"foo\": {\"bar\": \"baz\"}\"}."
        },
        "root_node_override_path": {
          "type": "string",
          "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
        }
      },
      "title": "GenericJson",
      "required": [
        "type"
      ]
    },
    "FieldConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "field": {
          "type": "string",
          "description": "String field which contains a JSON object."
        },
        "prefix_field": {
          "type": "string",
          "description": "Field to put any data which preceded JSON object."
        }
      },
      "required": [
        "field"
      ]
    },
    "ForkOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "The fork operation allows nesting multiple operation pipelines within Bender. Each fork (pipeline) has its own operations and operates independently on a clone of the original event. If no filters are applied then this can result in multiple output events for each input event.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ForkOperation"
          ],
          "default": "ForkOperation"
        },
        "forks": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Fork"
          },
          "description": "List of forks."
        }
      },
      "title": "ForkOperation",
      "required": [
        "type"
      ]
    },
    "Fork": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "operations": {
          "type": "array",
          "description": "List of operations to perform.",
          "anyOf": [
            {
              "$ref": "#/definitions/ForkOperationConfig"
            },
            {
              "$ref": "#/definitions/LowerCaseKeyOperationConfig"
            },
            {
              "$ref": "#/definitions/JsonRootNodeOperationConfig"
            },
            {
              "$ref": "#/definitions/SubstitutionOperationConfig"
            },
            {
              "$ref": "#/definitions/PartitionOperationConfig"
            },
            {
              "$ref": "#/definitions/ArraySplitOperationConfig"
            },
            {
              "$ref": "#/definitions/URLDecodeOperationConfig"
            },
            {
              "$ref": "#/definitions/DeleteFieldOperationConfig"
            },
            {
              "$ref": "#/definitions/DropArraysOperationConfig"
            },
            {
              "$ref": "#/definitions/TimeOperationConfig"
            },
            {
              "$ref": "#/definitions/RegexFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/GeoIpOperationConfig"
            },
            {
              "$ref": "#/definitions/FlattenOperationConfig"
            },
            {
              "$ref": "#/definitions/BasicFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameReplacementOperationConfig"
            },
            {
              "$ref": "#/definitions/ConditionalOperationConfig"
            },
            {
              "$ref": "#/definitions/GelfOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameOperationConfig"
            }
          ]
        }
      }
    },
    "LowerCaseKeyOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a JSON object it will recursively lower case all fields.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "LowerCaseKeyOperation"
          ],
          "default": "LowerCaseKeyOperation"
        }
      },
      "title": "LowerCaseKeyOperation",
      "required": [
        "type"
      ]
    },
    "JsonRootNodeOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a JSON object and a path within the object it will promote the path's element to the root position. For example if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} and specified path $.foo.bar the operation will produce {\"baz\": 1} as the new payload.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "JsonRootNodeOperation"
          ],
          "default": "JsonRootNodeOperation"
        },
        "root_path": {
          "type": "string",
          "description": "Path to a JSON node which is promoted to root node. See https://github.com/jayway/JsonPath"
        }
      },
      "title": "JsonRootNodeOperation",
      "required": [
        "type",
        "root_path"
      ]
    },
    "SubstitutionOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "This operation allows substituting event fields with different sources such as other fields, static values, or metadata.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "SubstitutionOperation"
          ],
          "default": "SubstitutionOperation"
        },
        "substitutions": {
          "type": "array",
          "description": "List of substitutions to perform.",
          "anyOf": [
            {
              "$ref": "#/definitions/FieldSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/RegexSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/MetadataSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/NestedSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/FormattedSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/StaticSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/ContextSubstitutionConfig"
            }
          ]
        }
      },
      "title": "SubstitutionOperation",
      "required": [
        "type",
        "substitutions"
      ]
    },
    "FieldSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FieldSubstitution"
          ],
          "default": "FieldSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "src_fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
        },
        "remove_src_field": {
          "type": "boolean",
          "default": false,
          "description": "Removes the source field when performing the substitution. Effectively making this a move operation."
        },
        "fail_src_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if source field is not found."
        }
      },
      "title": "FieldSubstitution",
      "required": [
        "type",
        "key",
        "src_fields"
      ]
    },
    "RegexSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Substitutes event field value for another event field value. Note the source field and destination field can be the same.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "RegexSubstitution"
          ],
          "default": "RegexSubstitution"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "pattern": {
          "type": "string",
          "description": "Regex pattern with match groups. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
        },
        "src_fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Source fields to pull value from and apply regex to. If multiple fields are provided the first non-null valued one is used."
        },
        "fields": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RegexSubField"
          },
          "description": "List of fields to create from matching regex groups."
        },
        "remove_src_field": {
          "type": "boolean",
          "default": false,
          "description": "Removes the source field after applying this substitution."
        },
        "fail_src_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if source fields do not match regex or are not found."
        }
      },
      "title": "RegexSubstitution",
      "required": [
        "type",
        "pattern",
        "src_fields",
        "fields"
      ]
    },
    "RegexSubField": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "regex_group_name": {
          "type": "string",
          "description": "Regex group name identifying the field."
        },
        "type": {
          "type": "string",
          "enum": [
            "STRING",
            "NUMBER",
            "BOOLEAN"
          ],
          "description": "Data type of match group field. If type coercion does not succeed then field is ignored."
        },
        "key": {
          "type": "string",
          "description": "Name or path of the new field."
        }
      },
      "required": [
        "regex_group_name",
        "type",
        "key"
      ]
    },
    "MetadataSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Substitutes event field value for list of event metadata proprties.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "MetadataSubstitution"
          ],
          "default": "MetadataSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "includes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of metadata fields to add. If non-specified then all are added."
        },
        "excludes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of metadata fields to exclude. If non-specified then none are excluded."
        }
      },
      "title": "MetadataSubstitution",
      "required": [
        "type",
        "key"
      ]
    },
    "NestedSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "The nested substitution helps build a Map object containing the result of other substitution.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "NestedSubstitution"
          ],
          "default": "NestedSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "substitutions": {
          "type": "array",
          "description": "List of substitutions that will build up the final Map object.",
          "anyOf": [
            {
              "$ref": "#/definitions/FieldSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/RegexSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/MetadataSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/NestedSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/FormattedSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/StaticSubstitutionConfig"
            },
            {
              "$ref": "#/definitions/ContextSubstitutionConfig"
            }
          ]
        }
      },
      "title": "NestedSubstitution",
      "required": [
        "type",
        "key"
      ]
    },
    "FormattedSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Creates a new string using variable replacement.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FormattedSubstitution"
          ],
          "default": "FormattedSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "format": {
          "type": "string",
          "description": "String with variable indices to substitue. See https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"
        },
        "variables": {
          "type": "array",
          "description": "List of variables used in string substitution. Index of variable relates to index in 'format' string.",
          "anyOf": [
            {
              "$ref": "#/definitions/FieldVariable"
            },
            {
              "$ref": "#/definitions/StaticVariable"
            }
          ]
        }
      },
      "title": "FormattedSubstitution",
      "required": [
        "type",
        "key",
        "format",
        "variables"
      ]
    },
    "FieldVariable": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FieldVariable"
          ],
          "default": "FieldVariable"
        },
        "src_fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Source fields to pull value from. If multiple fields are provided the first non-null valued one is used. Note that if no fields are found the value will be set to null."
        },
        "fail_src_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if source field is not found."
        },
        "remove_src_field": {
          "type": "boolean",
          "default": false,
          "description": "Removes the source field when performing the substitution."
        }
      },
      "title": "FieldVariable",
      "required": [
        "type",
        "src_fields"
      ]
    },
    "StaticVariable": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "StaticVariable"
          ],
          "default": "StaticVariable"
        },
        "value": {
          "type": "string",
          "description": "Value to substitute."
        }
      },
      "title": "StaticVariable",
      "required": [
        "type",
        "value"
      ]
    },
    "StaticSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Substitutes event field value for a static value.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "StaticSubstitution"
          ],
          "default": "StaticSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "value": {
          "type": "string",
          "description": "Value of the new field."
        }
      },
      "title": "StaticSubstitution",
      "required": [
        "type",
        "key",
        "value"
      ]
    },
    "ContextSubstitutionConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Substitutes event field value for list of lambda function context proprties.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ContextSubstitution"
          ],
          "default": "ContextSubstitution"
        },
        "key": {
          "type": "string",
          "description": "Name of the new field"
        },
        "fail_dst_not_found": {
          "type": "boolean",
          "default": true,
          "description": "Fail if destination field does not exist. This can be the case if attempting to insert into a nested destination which was not yet created."
        },
        "includes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of context fields to add. If non-specified then all are added."
        },
        "excludes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of context fields to exclude. If non-specified then none are excluded."
        }
      },
      "title": "ContextSubstitution",
      "required": [
        "type",
        "key"
      ]
    },
    "PartitionOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Sets the partition information for the Event using fields from the deserialized object. When using JSON use JsonPath format to specify fields. See https://github.com/jayway/JsonPath",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "PartitionOperation"
          ],
          "default": "PartitionOperation"
        },
        "partition_specs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PartitionSpec"
          },
          "description": "Configuration to specify object fields that are treated as partitions"
        }
      },
      "title": "PartitionOperation",
      "required": [
        "type"
      ]
    },
    "PartitionSpec": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Value to use as the key for the partition."
        },
        "sources": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Fields to use for the value of the partition."
        },
        "interpreter": {
          "type": "string",
          "default": "STRING",
          "enum": [
            "STRING",
            "MILLISECONDS",
            "SECONDS",
            "STATIC"
          ],
          "description": "Interpreter to use on the partition value."
        },
        "format": {
          "type": "string",
          "description": "Java date format to use when using a time based interpreter."
        },
        "string_format": {
          "type": "string",
          "default": "NONE",
          "enum": [
            "TOLOWER",
            "TOUPPER",
            "NONE"
          ],
          "description": "Basic string formatting."
        },
        "seconds_to_round": {
          "type": "integer",
          "minimum": 0,
          "maximum": 86400,
          "default": 0,
          "description": "Rounds time down to value prior to formatting. For example 300 would round down to nearest 5 minutes. If set to 0 then rounding is disabled."
        }
      },
      "required": [
        "name",
        "interpreter"
      ]
    },
    "ArraySplitOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a path to a JSON array it will produce new events with payloads coorepsonding to elements of the array. For example [{\"foo\": 1}, {\"bar\": 2}] will be turned into two seperate events with payloads of {\"foo\": 1} and {\"bar\": 2}.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "JsonArraySplitOperation"
          ],
          "default": "JsonArraySplitOperation"
        },
        "path": {
          "type": "string",
          "description": "Path to a JSON node which is an array. See https://github.com/jayway/JsonPath"
        },
        "fields_to_keep": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "If an array is found and split, this can specify additional fields to keep in the new JSON object to preserve common contexts, such as timestamps, accountId, etc."
        }
      },
      "title": "JsonArraySplitOperation",
      "required": [
        "type",
        "path"
      ]
    },
    "URLDecodeOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Performs a URL decode on the specified fields.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "UrlDecodeOperation"
          ],
          "default": "UrlDecodeOperation"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "fields"
        },
        "times": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 1,
          "description": "Number of times to perform URL decode on field. This is helpful if a field is encoded multiple times."
        }
      },
      "title": "UrlDecodeOperation",
      "required": [
        "type",
        "fields"
      ]
    },
    "DeleteFieldOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Deletes the inputted field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "DeleteFieldOperation"
          ],
          "default": "DeleteFieldOperation"
        },
        "key_field": {
          "type": "string",
          "description": "Name of field key to be deleted."
        }
      },
      "title": "DeleteFieldOperation",
      "required": [
        "type",
        "key_field"
      ]
    },
    "DropArraysOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a JSON object it will remove any keys which have array values. This is helpful for use with ElasticSearch which indexes arrays in a particular manner not conducive to exploration. See: https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "JsonDropArraysOperation"
          ],
          "default": "JsonDropArraysOperation"
        }
      },
      "title": "JsonDropArraysOperation",
      "required": [
        "type"
      ]
    },
    "TimeOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Sets the Event timestamp using the provided field in the deserialized object. When using JSON use JsonPath format to specify field. See https://github.com/jayway/JsonPath",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "TimeOperation"
          ],
          "default": "TimeOperation"
        },
        "time_field": {
          "type": "string",
          "description": "Name of field to use as time field"
        },
        "time_field_type": {
          "type": "string",
          "enum": [
            "SECONDS",
            "MILLISECONDS",
            "ISO8601"
          ],
          "description": "How to interpret time field"
        }
      },
      "title": "TimeOperation",
      "required": [
        "type",
        "time_field",
        "time_field_type"
      ]
    },
    "RegexFilterOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "This operation is used to remove certain events from the stream before continuing on to the destination. Each event is assessed by applying a JsonPath to its payload and matching the value against a regex Pattern. If exclude is true, events that match this criteria will be filtered out. If exclude is false, any events not matching this criteria will be filtered out. For example, say these two events are in the stream: {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} and {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. With config  values: regex = \\\"(bar)\\\", path = \\\"$.type\\\", and exclude = true, after filtering, the stream will only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"baz\\\"}. If instead, exclude = false, the stream would only hold {\\\"data\\\": \\\"one\\\", \\\"type\\\": \\\"bar\\\"} after filtering.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "RegexFilterOperation"
          ],
          "default": "RegexFilterOperation"
        },
        "regex": {
          "type": "string",
          "description": "Regex to be matched against JSON objects. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
        },
        "path": {
          "type": "string",
          "description": "JsonPath to the element to be matched against. See https://github.com/jayway/JsonPath"
        },
        "exclude": {
          "type": "boolean",
          "default": true,
          "description": "If true, matches will be filtered out. If false, non-matches will be filtered out."
        }
      },
      "title": "RegexFilterOperation",
      "required": [
        "type",
        "regex",
        "path"
      ]
    },
    "GeoIpOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Looks up geo location provided an IP address and adds a map field to the payload that optionally contains country_name, country_iso_code, subdivision_name, subdivision_iso_code, city_name, postal_code, and location. For example \n\n input = {\"ip\": \"8.8.8.8\"} \n\n output = {\"ip\": \"8.8.8.8\", \"geo_ip\": {\"location\": {\"lat\": 37.751, \"lon\": -97.822}}}\n\n\n\nNote 1: This operation requires the MaxMind GeoLite2 City Database. It is available at https://dev.maxmind.com/geoip/geoip2/geolite2/. After you download the database, extract the tarball and uploaded the .mmdb file to an S3 bucket accessible by your lambda function.\n\nNote 2: If your ip address field contains a comma separated list of ip addresses (ie forwarded web requests) the first address in the list is used. This is typically the source address.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "GeoIpOperation"
          ],
          "default": "GeoIpOperation"
        },
        "src_field_name": {
          "type": "string",
          "description": "Field containing an IP address string in the payload"
        },
        "dst_field_name": {
          "type": "string",
          "default": "geo_ip",
          "description": "Field name to save the geo data to"
        },
        "geo_lite_db": {
          "type": "string",
          "description": "S3 path to the GeoLite2 City database file. Prefix with s3://"
        },
        "geo_properties": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "COUNTRY_NAME",
              "COUNTRY_ISO_CODE",
              "SUBDIVISION_NAME",
              "SUBDIVISION_ISO_CODE",
              "CITY_NAME",
              "POSTAL_CODE",
              "LOCATION"
            ]
          },
          "description": "List of geo properties to include"
        },
        "fail_on_not_found": {
          "type": "boolean",
          "default": false,
          "description": "If ip lookup fails also fail the operation. Doing so will filter out the event."
        }
      },
      "title": "GeoIpOperation",
      "required": [
        "type",
        "src_field_name",
        "dst_field_name",
        "geo_lite_db"
      ]
    },
    "FlattenOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a deeply nested JSON Object, it will flatten out the object into keys with a specific separator (dot by default). For example, if the input is {\"foo\": {\"bar\": {\"baz\": 1}}} the operation will produce {\"foo.bar.baz\": 1} as the new payload.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FlattenOperation"
          ],
          "default": "FlattenOperation"
        },
        "separator": {
          "type": "string",
          "default": ".",
          "description": "Separator to be used between nested key names (typically a dot(.))"
        }
      },
      "title": "FlattenOperation",
      "required": [
        "type"
      ]
    },
    "BasicFilterOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "If pass is set to false then events are filtered out.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "BasicFilterOperation"
          ],
          "default": "BasicFilterOperation"
        },
        "pass": {
          "type": "boolean",
          "default": false,
          "description": "If 'false', event is filtered out."
        }
      },
      "title": "BasicFilterOperation",
      "required": [
        "type"
      ]
    },
    "KeyNameReplacementOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Uses a regex to find matching parts of a key name and replaces with value or drops the key/value if a match is found. This is typically used to sanitize key names.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "KeyNameReplacementOperation"
          ],
          "default": "KeyNameReplacementOperation"
        },
        "regex": {
          "type": "string",
          "description": "Java regex. See https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html"
        },
        "replacement": {
          "type": "string",
          "default": "",
          "description": "If a match is found then replace match with this value. Defaults to emptry string."
        },
        "drop": {
          "type": "boolean",
          "default": false,
          "description": "If a match is found then drop the key/value."
        }
      },
      "title": "KeyNameReplacementOperation",
      "required": [
        "type",
        "regex"
      ]
    },
    "ConditionalOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "The conditional operation allows for 'if else' style branches in the flow of Bender operations. Conditions are evaluated in order of appearance and the first matching condition will receive the event.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ConditionalOperation"
          ],
          "default": "ConditionalOperation"
        },
        "conditions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Condition"
          },
          "description": "List of conditions and their operations."
        },
        "filter_non_match": {
          "type": "boolean",
          "default": false,
          "description": "When true events that don't match any conditions will be filtered out."
        }
      },
      "title": "ConditionalOperation",
      "required": [
        "type"
      ]
    },
    "Condition": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "operations": {
          "type": "array",
          "description": "List of operations to perform.",
          "anyOf": [
            {
              "$ref": "#/definitions/ForkOperationConfig"
            },
            {
              "$ref": "#/definitions/LowerCaseKeyOperationConfig"
            },
            {
              "$ref": "#/definitions/JsonRootNodeOperationConfig"
            },
            {
              "$ref": "#/definitions/SubstitutionOperationConfig"
            },
            {
              "$ref": "#/definitions/PartitionOperationConfig"
            },
            {
              "$ref": "#/definitions/ArraySplitOperationConfig"
            },
            {
              "$ref": "#/definitions/URLDecodeOperationConfig"
            },
            {
              "$ref": "#/definitions/DeleteFieldOperationConfig"
            },
            {
              "$ref": "#/definitions/DropArraysOperationConfig"
            },
            {
              "$ref": "#/definitions/TimeOperationConfig"
            },
            {
              "$ref": "#/definitions/RegexFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/GeoIpOperationConfig"
            },
            {
              "$ref": "#/definitions/FlattenOperationConfig"
            },
            {
              "$ref": "#/definitions/BasicFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameReplacementOperationConfig"
            },
            {
              "$ref": "#/definitions/ConditionalOperationConfig"
            },
            {
              "$ref": "#/definitions/GelfOperationConfig"
            },
            {
              "$ref": "#/definitions/KeyNameOperationConfig"
            }
          ]
        },
        "condition": {
          "oneOf": [
            {
              "$ref": "#/definitions/RegexFilterOperationConfig"
            },
            {
              "$ref": "#/definitions/BasicFilterOperationConfig"
            }
          ],
          "description": "Filter operation to evaluate events against."
        }
      },
      "required": [
        "condition"
      ]
    },
    "GelfOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Transforms JSON input into a GELF message format (See http://docs.graylog.org/en/2.4/pages/gelf.html details). Note that when selecting source fields use the JsonPath notation https://github.com/json-path/JsonPath.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "GelfOperation"
          ],
          "default": "GelfOperation"
        },
        "src_host_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing host string"
        },
        "src_short_message_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing short_message string"
        },
        "src_full_message_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing full_message string"
        },
        "src_timestamp_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing epoch timestamp in seconds with optional ms as decimal. Source field must be in numeric form (not a string) or Graylog will reject the input. Alternatively, use the TimeOperation to detect your timestamp field and properly parse it, and the GelfOperation will automatically use that to set the timestamp field properly. Use this setting only to override that behavior."
        },
        "src_level_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing syslog level number"
        },
        "src_facility_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing syslog facility string"
        },
        "src_line_number_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing the line in a file that caused the error (decimal); optional, deprecated. Send as additional field instead."
        },
        "src_file_field": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Field containing the file (with path if you want) that caused the error (string); optional, deprecated. Send as additional field instead."
        }
      },
      "title": "GelfOperation",
      "required": [
        "type",
        "src_host_field",
        "src_short_message_field"
      ]
    },
    "KeyNameOperationConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Provided a JSON object it will recursively append the primitive type of the value to the key name. For example {\"foo\": \"one\", \"bar\": 2} will become {\"foo__str\": \"one\", \"bar__long\": 2}. The mapping is string:__str, boolean:__boolean, array:__arr, number:__long or __float. It also repalces \".\" with \"_\" in key names. This operation is particularily useful for modifying JSON which will be written to ElasticSearch which does not allow conflicting value types for keys or \".\" in key names.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "JsonKeyNameOperation"
          ],
          "default": "JsonKeyNameOperation"
        }
      },
      "title": "JsonKeyNameOperation",
      "required": [
        "type"
      ]
    },
    "KinesisWrapperConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Adds information about kinesis stream which the event came from. Included is partition, sequence number, source arn, event source, function name, function version, arrival timestsamp (ms since epoch), processing time (ms), processing delay (ms), processing timestsamp (ms since epoch).",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "KinesisWrapper"
          ],
          "default": "KinesisWrapper"
        }
      },
      "title": "KinesisWrapper",
      "required": [
        "type"
      ]
    },
    "PassthroughWrapperConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "A meta wrapper that performs no wrapping and passes the payload through.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "PassthroughWrapper"
          ],
          "default": "PassthroughWrapper"
        }
      },
      "title": "PassthroughWrapper",
      "required": [
        "type"
      ]
    },
    "BasicWrapperConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Includes the original payload, sha1 hash of the original event and event timestamp.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "BasicWrapper"
          ],
          "default": "BasicWrapper"
        }
      },
      "title": "BasicWrapper",
      "required": [
        "type"
      ]
    },
    "S3WrapperConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Adds information about function name, function version, processing time (in ms), processing delay (in ms), processing timestsamp (ms since epoch), sha1 hash of the original event, and s3 key, bucket, and key version from the source S3file read. Only works with the S3Handler and SNSS3Handler.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "S3Wrapper"
          ],
          "default": "S3Wrapper"
        }
      },
      "title": "S3Wrapper",
      "required": [
        "type"
      ]
    },
    "JsonSerializerConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Serializes events into JSON format.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Json"
          ],
          "default": "Json"
        },
        "field_naming_policy": {
          "type": "string",
          "default": "LOWER_CASE_WITH_UNDERSCORES",
          "enum": [
            "IDENTITY",
            "UPPER_CAMEL_CASE",
            "UPPER_CAMEL_CASE_WITH_SPACES",
            "LOWER_CASE_WITH_UNDERSCORES",
            "LOWER_CASE_WITH_DASHES",
            "LOWER_CASE_WITH_DOTS"
          ],
          "description": "GSON field naming policy. See https://google.github.io/gson/apidocs/com/google/gson/FieldNamingPolicy.html"
        }
      },
      "title": "Json",
      "required": [
        "type"
      ]
    },
    "FileTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events to a file on the local file system. Typically only used for testing and debugging.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "File"
          ],
          "default": "File"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "filename": {
          "type": "string",
          "description": "Local filesystem file to write data to"
        }
      },
      "title": "File",
      "required": [
        "type",
        "filename"
      ]
    },
    "S3TransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes batches of events to S3. The output filename will either be the unique function inocation request id as specified by Lambda or a hash of the input filename when using the S3 handler. Required IAM permissions are: s3:AbortMultipartUpload, s3:PutObject, s3:ListMultipartUploadParts, s3:ListBucketMultipartUploads",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "S3"
          ],
          "default": "S3"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ],
          "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
        },
        "bucket_name": {
          "type": "string",
          "description": "S3 bucket name."
        },
        "base_path": {
          "type": "string",
          "description": "Path to append to S3 keys."
        },
        "use_compression": {
          "type": "boolean",
          "default": true,
          "description": "Compress files with bz2 compression."
        },
        "compress_buffer": {
          "type": "boolean",
          "default": false,
          "description": "When using compression optionally compress buffered data as it is serialized. This is optimal for no or low cardinality partitioning. When writing high cardinality data this may result in OOMs due to high overhead of having a compressor for each partition."
        },
        "max_buffer_size": {
          "type": "integer",
          "minimum": 5242880,
          "default": 6291456,
          "description": "Amount of serialized data to hold in memory before forcing a write to S3. It is important to note that this value is per partition and having too many or too large buffers will lead to OOMs. Also, S3 requires multi-part files have parts of more than 5mb. When using compression and NOT compressing buffers you must take compression ratio into account. Meaning that when compressed the contents of your buffer must be more than 5mb or the put to S3 will fail. Set this value accordingly high to account for compression."
        }
      },
      "title": "S3",
      "required": [
        "type",
        "bucket_name"
      ]
    },
    "ElasticSearchTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes to an ElasticSearch cluster. When using AWS hosted ES do not use gzip compression.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ElasticSearch"
          ],
          "default": "ElasticSearch"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 9200,
          "description": "ElasticSearch HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Socket timeout on HTTP connection."
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "auth_config": {
          "oneOf": [
            {
              "$ref": "#/definitions/UrlSigningAuthConfig"
            },
            {
              "$ref": "#/definitions/BasicHttpAuthConfig"
            }
          ],
          "description": "Authentication scheme."
        },
        "index": {
          "type": "string",
          "description": "Index to write to."
        },
        "document_type": {
          "type": "string",
          "description": "ElasticSearch document type."
        },
        "bulk_api_path": {
          "type": "string",
          "default": "/_bulk",
          "description": "ElasticSearch bulk api path including leading slash '/'."
        },
        "index_time_format": {
          "type": "string",
          "description": "Java time format to append to index name."
        },
        "routing_field_name": {
          "type": "string",
          "default": "_routing",
          "description": "Name of the routing field. ElasticSearch 6+ changed the field name from `_routing` to `routing`."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "use_hashid": {
          "type": "boolean",
          "default": false,
          "description": "Use hash id generated by Bender as document id."
        },
        "use_partitions_for_routing": {
          "type": "boolean",
          "default": false,
          "description": "Use partitions as a mechanism for routing records to Elasticsearch. Routing allows a document to be written to a specific shard within an index. Using routing can, if configured correctly, dramatically improve read and/or write performance when indexing or searching documents. However, this is largely based on your data, data source, and workload. For more details on routing consult:\n\nhttps://www.elastic.co/blog/customizing-your-document-routing\nhttps://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html\n\nPartition keys and values will be concatenated by \"=\" and separated by \"/\". Ifyour partitions are part1=foo and part2=bar the Elasticsearch \"_routing\" field will have the value \"part1=foo/part2=bar\". \n\nA typical routing strategy is to use the data source context associated with a function's invocation. For instance with Kinesis this can be the shard-id and with S3 the source file. This approach ensures a single function invocation writes to only one shard. However, to avoid hot spots, it's also advised that you have a secondary partitioning key with low cardinality. For example bucketing by 5 minute intervals in addition to using shard-id."
        }
      },
      "title": "ElasticSearch",
      "required": [
        "type",
        "hostname",
        "index",
        "document_type"
      ]
    },
    "KmsValueConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "KmsValue"
          ],
          "default": "KmsValue"
        },
        "value": {
          "type": "string",
          "description": "KMS encrypted value."
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ],
          "description": "AWS region associated with the KMS key used to encrypt the value."
        }
      },
      "title": "KmsValue",
      "required": [
        "type",
        "value",
        "region"
      ]
    },
    "StringValueConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "StringValue"
          ],
          "default": "StringValue"
        },
        "value": {
          "type": "string"
        }
      },
      "title": "StringValue",
      "required": [
        "type",
        "value"
      ]
    },
    "UrlSigningAuthConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "UrlSigningAuth"
          ],
          "default": "UrlSigningAuth"
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ]
        },
        "service": {
          "type": "string"
        },
        "http_interceptor": {}
      },
      "title": "UrlSigningAuth",
      "required": [
        "type",
        "region",
        "service"
      ]
    },
    "BasicHttpAuthConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "UserPassAuth"
          ],
          "default": "UserPassAuth"
        },
        "username": {
          "type": "string"
        },
        "password": {
          "oneOf": [
            {
              "$ref": "#/definitions/KmsValueConfig"
            },
            {
              "$ref": "#/definitions/StringValueConfig"
            }
          ]
        }
      },
      "title": "UserPassAuth",
      "required": [
        "type",
        "username",
        "password"
      ]
    },
    "ScalyrTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events to a Scalyr endpoint.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Scalyr"
          ],
          "default": "Scalyr"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "default": "www.scalyr.com",
          "description": "Scalyr HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 443,
          "description": "HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Socket timeout on HTTP connection."
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "token": {
          "oneOf": [
            {
              "$ref": "#/definitions/KmsValueConfig"
            },
            {
              "$ref": "#/definitions/StringValueConfig"
            }
          ],
          "description": "Scalyr auth token."
        },
        "parser": {
          "type": "string",
          "default": "json",
          "description": "Scalyr String Parser."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "Scalyr",
      "required": [
        "type",
        "token"
      ]
    },
    "GelfTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes logs into a Graylog TCP GELF Input",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Gelf"
          ],
          "default": "Gelf"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "TCP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "description": "TCP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": true,
          "description": "Use SSL/TLS connections."
        },
        "verify_ssl": {
          "type": "boolean",
          "default": true,
          "description": "Verify SSL/TLS certificates."
        },
        "max_buffer_size": {
          "type": "integer",
          "minimum": 1024,
          "maximum": 10485760,
          "default": 10240,
          "description": "Maximum size (in bytes) in memory before triggering a write."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a write failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 60000,
          "default": 30000,
          "description": "Socket timeout (in milliseconds) on TCP connection."
        }
      },
      "title": "Gelf",
      "required": [
        "type",
        "hostname",
        "port"
      ]
    },
    "StdoutTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events out to the console for testing and debugging",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Stdout"
          ],
          "default": "Stdout"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        }
      },
      "title": "Stdout",
      "required": [
        "type"
      ]
    },
    "HttpTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "HTTP transport that only supports HTTP1/1",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "HTTP"
          ],
          "default": "HTTP"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 443,
          "description": "HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Socket timeout on HTTP connection."
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "path": {
          "type": "string",
          "description": "HTTP endpoint path and query string including leading slash '/'."
        },
        "separator": {
          "type": "string",
          "description": "Separator used between serialized records."
        },
        "basic_http_auth": {
          "oneOf": [
            {
              "$ref": "#/definitions/BasicHttpAuthConfig"
            }
          ],
          "description": "Username and password used for use with http basic auth."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "HTTP",
      "required": [
        "type",
        "hostname",
        "path"
      ]
    },
    "Http2TransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "HTTP transport that supports both HTTP/1.1 and HTTP/2. It will auto negotiate with the server.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "HTTP2"
          ],
          "default": "HTTP2"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 443,
          "description": "HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Request timeout in milliseconds"
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "path": {
          "type": "string",
          "description": "HTTP endpoint path and query string including leading slash '/'."
        },
        "separator": {
          "type": "string",
          "description": "Separator used between serialized records."
        },
        "basic_http_auth": {
          "oneOf": [
            {
              "$ref": "#/definitions/BasicHttpAuthConfig"
            }
          ],
          "description": "Username and password used for use with http basic auth."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "HTTP2",
      "required": [
        "type",
        "hostname",
        "path"
      ]
    },
    "SumoLogicTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events to a SumoLogic endpoint.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "SumoLogic"
          ],
          "default": "SumoLogic"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 443,
          "description": "HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Socket timeout on HTTP connection."
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "auth_token": {
          "oneOf": [
            {
              "$ref": "#/definitions/KmsValueConfig"
            },
            {
              "$ref": "#/definitions/StringValueConfig"
            }
          ],
          "description": "Sumo Logic auth token. This is suffix of the http source url starting after '/receiver/v1/http/'."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "SumoLogic",
      "required": [
        "type",
        "hostname",
        "auth_token"
      ]
    },
    "SplunkTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events to a Splunk HEC endpoint.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Splunk"
          ],
          "default": "Splunk"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "HTTP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 443,
          "description": "HTTP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": false,
          "description": "Use SSL connections (certificates are not validated)."
        },
        "use_gzip": {
          "type": "boolean",
          "default": false,
          "description": "Use GZIP compression on HTTP calls."
        },
        "batch_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100000,
          "default": 500,
          "description": "Maximum number of documents in api call."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a put failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 300000,
          "default": 40000,
          "description": "Socket timeout on HTTP connection."
        },
        "http_headers": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/KmsValueConfig"
              },
              {
                "$ref": "#/definitions/StringValueConfig"
              }
            ]
          },
          "description": "HTTP headers to include."
        },
        "auth_token": {
          "oneOf": [
            {
              "$ref": "#/definitions/KmsValueConfig"
            },
            {
              "$ref": "#/definitions/StringValueConfig"
            }
          ],
          "description": "Splunk auth token."
        },
        "index": {
          "type": "string",
          "description": "Splunk data index."
        },
        "http_string_headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "Splunk",
      "required": [
        "type",
        "hostname",
        "auth_token"
      ]
    },
    "FirehoseTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Transports events to AWS Kinesis Firehose. This transport is agnostic of the data being sent. However there are important limits to consider. The maximum size of a single Firehose record can not exceed 1000kb and the maximum for a batch is 4mb. Events larger than 1000kb will not be split across multiple Records. The transport contains two types of buffers. In BATCH mode it will attempt to write multiple events into a single Firehose Record in order to minimize number of Records sent. In SIMPLE mode each serialized event is putinto a its own Record. Firehose sinks like ElasticSearch require each event be its own Firehose Record.Required IAM permissions are: firehose:DescribeDeliveryStream, firehose:ListDeliveryStreams, firehose:PutRecord, firehose:PutRecordBatch",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Firehose"
          ],
          "default": "Firehose"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ],
          "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
        },
        "stream_name": {
          "type": "string",
          "description": "Firehose stream name to publish to."
        },
        "firehose_buffer": {
          "type": "string",
          "default": "BATCH",
          "enum": [
            "BATCH",
            "SIMPLE"
          ],
          "description": "Type of buffer to use. BATCH buffer combines records while SIMPLE does not. Use SIMPLE when your firehose writes to ElasticSearch."
        },
        "append_newline": {
          "type": "boolean",
          "default": true,
          "description": "If a new line should be appended to records. This is typically what you will want unless you are writing binary data. Set to false when Firehose is writing into ElasticSearch."
        }
      },
      "title": "Firehose",
      "required": [
        "type",
        "stream_name"
      ]
    },
    "DatadogTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes events to a Datadog endpoint.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Datadog"
          ],
          "default": "Datadog"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        },
        "hostname": {
          "type": "string",
          "description": "TCP endpoint hostname."
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "description": "TCP endpoint port."
        },
        "use_ssl": {
          "type": "boolean",
          "default": true,
          "description": "Use SSL/TLS connections."
        },
        "verify_ssl": {
          "type": "boolean",
          "default": true,
          "description": "Verify SSL/TLS certificates."
        },
        "max_buffer_size": {
          "type": "integer",
          "minimum": 1024,
          "maximum": 10485760,
          "default": 10240,
          "description": "Maximum size (in bytes) in memory before triggering a write."
        },
        "retry_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10,
          "default": 0,
          "description": "Number of retries to make when a write failure occurs."
        },
        "retry_delay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 60000,
          "default": 1000,
          "description": "Initial delay between retries. If more than one retries specified exponential backoff is used."
        },
        "timeout": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 60000,
          "default": 30000,
          "description": "Socket timeout (in milliseconds) on TCP connection."
        },
        "api_key": {
          "oneOf": [
            {
              "$ref": "#/definitions/KmsValueConfig"
            },
            {
              "$ref": "#/definitions/StringValueConfig"
            }
          ],
          "description": "Datadog API key."
        }
      },
      "title": "Datadog",
      "required": [
        "type",
        "hostname",
        "port",
        "api_key"
      ]
    },
    "DevNullTransportConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Transport for testing and development. Serialized events simply get cleared out of the transport buffer.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "DevNull"
          ],
          "default": "DevNull"
        },
        "threads": {
          "type": "integer",
          "default": 5,
          "description": "Number of concurrent transporters allowed"
        }
      },
      "title": "DevNull",
      "required": [
        "type"
      ]
    },
    "CloudwatchReporterConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes metrics to Cloudwatch. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Cloudwatch"
          ],
          "default": "Cloudwatch"
        },
        "stat_filters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StatFilter"
          },
          "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ],
          "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
        },
        "namespace": {
          "type": "string",
          "default": "Nextdoor/bender",
          "description": "Cloudwatch namespace to write metrics under."
        }
      },
      "title": "Cloudwatch",
      "required": [
        "type"
      ]
    },
    "StatFilter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the Stat to match against"
        },
        "report_zeros": {
          "type": "boolean",
          "default": true,
          "description": "Report zero-valued stats"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "description": "Map of tag names and values to match"
        }
      },
      "required": [
        "name"
      ]
    },
    "DataDogReporterConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes metrics to standard out. To setup DataDog lambda integration see https://www.datadoghq.com/blog/monitoring-lambda-functions-datadog/.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "DataDog"
          ],
          "default": "DataDog"
        },
        "stat_filters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StatFilter"
          },
          "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
        },
        "prefix": {
          "type": "string",
          "default": "lambda.bender",
          "description": "Prefix to append to metric names"
        }
      },
      "title": "DataDog",
      "required": [
        "type"
      ]
    },
    "CloudWatchEmbeddedMetricsReporterConfig": {
      "type": "object",
      "additionalProperties": false,
      "description": "Writes metrics to Cloudwatch by printing to stdout. It is important to consider costs when using this reporter see https://aws.amazon.com/cloudwatch/pricing/.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "CloudWatchEmbeddedMetrics"
          ],
          "default": "CloudWatchEmbeddedMetrics"
        },
        "stat_filters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StatFilter"
          },
          "description": "List of filter to apply to stats. If a stat matches the filter it is excluded when being published."
        },
        "region": {
          "type": "string",
          "enum": [
            "GovCloud",
            "US_GOV_EAST_1",
            "US_EAST_1",
            "US_EAST_2",
            "US_WEST_1",
            "US_WEST_2",
            "EU_WEST_1",
            "EU_WEST_2",
            "EU_WEST_3",
            "EU_CENTRAL_1",
            "EU_NORTH_1",
            "AP_EAST_1",
            "AP_SOUTH_1",
            "AP_SOUTHEAST_1",
            "AP_SOUTHEAST_2",
            "AP_NORTHEAST_1",
            "AP_NORTHEAST_2",
            "SA_EAST_1",
            "CN_NORTH_1",
            "CN_NORTHWEST_1",
            "CA_CENTRAL_1",
            "ME_SOUTH_1"
          ],
          "description": "Region of remote AWS service. Not required to be set if you are using a service within the Lambda's current region. Ensure a service is supported in the remote region."
        },
        "namespace": {
          "type": "string",
          "default": "Nextdoor/bender",
          "description": "Cloudwatch namespace to write metrics under."
        }
      },
      "title": "CloudWatchEmbeddedMetrics",
      "required": [
        "type"
      ]
    }
  },
  "__original": {
    "properties": {
      "handler": {
        "oneOf": [
          {
            "$ref": "#/definitions/DynamodbHandlerConfig"
          },
          {
            "$ref": "#/definitions/S3HandlerConfig"
          },
          {
            "$ref": "#/definitions/SNSS3HandlerConfig"
          },
          {
            "$ref": "#/definitions/KinesisHandlerConfig"
          }
        ],
        "description": "Handler configuration"
      },
      "sources": {
        "type": "array",
        "items": {
          "$ref": "#/definitions/SourceConfig"
        },
        "description": "Source configurations. This includes deserializer and operators."
      },
      "wrapper": {
        "oneOf": [
          {
            "$ref": "#/definitions/KinesisWrapperConfig"
          },
          {
            "$ref": "#/definitions/PassthroughWrapperConfig"
          },
          {
            "$ref": "#/definitions/BasicWrapperConfig"
          },
          {
            "$ref": "#/definitions/S3WrapperConfig"
          }
        ],
        "description": "Wrapper configuration"
      },
      "serializer": {
        "oneOf": [
          {
            "$ref": "#/definitions/JsonSerializerConfig"
          }
        ],
        "description": "Serializer configuration"
      },
      "transport": {
        "oneOf": [
          {
            "$ref": "#/definitions/FileTransportConfig"
          },
          {
            "$ref": "#/definitions/S3TransportConfig"
          },
          {
            "$ref": "#/definitions/ElasticSearchTransportConfig"
          },
          {
            "$ref": "#/definitions/ScalyrTransportConfig"
          },
          {
            "$ref": "#/definitions/GelfTransportConfig"
          },
          {
            "$ref": "#/definitions/StdoutTransportConfig"
          },
          {
            "$ref": "#/definitions/HttpTransportConfig"
          },
          {
            "$ref": "#/definitions/Http2TransportConfig"
          },
          {
            "$ref": "#/definitions/SumoLogicTransportConfig"
          },
          {
            "$ref": "#/definitions/SplunkTransportConfig"
          },
          {
            "$ref": "#/definitions/FirehoseTransportConfig"
          },
          {
            "$ref": "#/definitions/DatadogTransportConfig"
          },
          {
            "$ref": "#/definitions/DevNullTransportConfig"
          }
        ],
        "description": "Transport configuration"
      },
      "reporters": {
        "type": "array",
        "description": "List of reporter configurations",
        "anyOf": [
          {
            "$ref": "#/definitions/CloudwatchReporterConfig"
          },
          {
            "$ref": "#/definitions/DataDogReporterConfig"
          },
          {
            "$ref": "#/definitions/CloudWatchEmbeddedMetricsReporterConfig"
          }
        ]
      }
    }
  },
  "required": [],
  "__resolved": {
    "properties": {
      "handler": {
        "oneOf": [
          {
            "$ref": "#/definitions/DynamodbHandlerConfig"
          },
          {
            "$ref": "#/definitions/S3HandlerConfig"
          },
          {
            "$ref": "#/definitions/SNSS3HandlerConfig"
          },
          {
            "$ref": "#/definitions/KinesisHandlerConfig"
          }
        ],
        "description": "Handler configuration"
      },
      "sources": {
        "type": "array",
        "items": {
          "$ref": "#/definitions/SourceConfig"
        },
        "description": "Source configurations. This includes deserializer and operators."
      },
      "wrapper": {
        "oneOf": [
          {
            "$ref": "#/definitions/KinesisWrapperConfig"
          },
          {
            "$ref": "#/definitions/PassthroughWrapperConfig"
          },
          {
            "$ref": "#/definitions/BasicWrapperConfig"
          },
          {
            "$ref": "#/definitions/S3WrapperConfig"
          }
        ],
        "description": "Wrapper configuration"
      },
      "serializer": {
        "oneOf": [
          {
            "$ref": "#/definitions/JsonSerializerConfig"
          }
        ],
        "description": "Serializer configuration"
      },
      "transport": {
        "oneOf": [
          {
            "$ref": "#/definitions/FileTransportConfig"
          },
          {
            "$ref": "#/definitions/S3TransportConfig"
          },
          {
            "$ref": "#/definitions/ElasticSearchTransportConfig"
          },
          {
            "$ref": "#/definitions/ScalyrTransportConfig"
          },
          {
            "$ref": "#/definitions/GelfTransportConfig"
          },
          {
            "$ref": "#/definitions/StdoutTransportConfig"
          },
          {
            "$ref": "#/definitions/HttpTransportConfig"
          },
          {
            "$ref": "#/definitions/Http2TransportConfig"
          },
          {
            "$ref": "#/definitions/SumoLogicTransportConfig"
          },
          {
            "$ref": "#/definitions/SplunkTransportConfig"
          },
          {
            "$ref": "#/definitions/FirehoseTransportConfig"
          },
          {
            "$ref": "#/definitions/DatadogTransportConfig"
          },
          {
            "$ref": "#/definitions/DevNullTransportConfig"
          }
        ],
        "description": "Transport configuration"
      },
      "reporters": {
        "type": "array",
        "description": "List of reporter configurations",
        "anyOf": [
          {
            "$ref": "#/definitions/CloudwatchReporterConfig"
          },
          {
            "$ref": "#/definitions/DataDogReporterConfig"
          },
          {
            "$ref": "#/definitions/CloudWatchEmbeddedMetricsReporterConfig"
          }
        ]
      }
    },
    "required": [],
    "__mini": true,
    "id": "__mini-1"
  }
}