Filter pattern syntax for metric filters, subscription filters, and filter log events
Note
For information about how to query your log groups with the Amazon CloudWatch Logs Insights query language, see CloudWatch Logs Insights query syntax.
With CloudWatch Logs, you can use metric filters to transform log data into actionable metrics, subscription filters to route log events to other AWS services, and filter log events search for log events.
Filter patterns make up the syntax that metric filters, subscription filters, and filter log events use to match terms in log events. Terms can be words, exact phrases, or numeric values. Regular expressions (regex) can be used to create standalone filter patterns, or can be incorporated with JSON and space-delimited filter patterns.
Create filter patterns with the terms that you want to match. Filter patterns only return the log events that contain the terms you define. You can test filter patterns in the CloudWatch console.
Topics
Supported regular expressions (regex) syntax
When using regex to search and filter log data, you must surround your expressions with %
.
Filter patterns with regex can only include the following:
Alphanumeric characters – An alphanumeric character is a character that is either a letter (from A to Z or a to z) or a digit (from 0 to 9).
Supported symbol characters – These include: '
_
', '#
', '=
', '@
','/
', ';
', ',
', and '-
'. For example,%something!%
would be rejected since '!
' is not supported.Supported operators – These include: '
^
', '$
', '?
', '[
', ']
', '{
', '}
', '|
', '\
', '*
', '+
', and '.
'.
The (
and )
operators are not supported. You cannot use parentheses to define a subpattern.
Multi-byte characters are not supported.
Note
Quotas
There is a maximum of 5 filter patterns containing regex for each log group when creating metric filters or subscription filters.
There is a limit of 2 regex for each filter pattern when creating a delimited or JSON filter pattern for metric filters and subscription filters or when filtering log events.
Usage of supported operators
^
: Anchors the match to the beginning of a string. For example,%^[hc]at%
matches "hat" and "cat", but only at the beginning of a string.$
: Anchors the match to the end of a string. For example,%[hc]at$%
matches "hat" and "cat", but only at the end of a string.?
: Matches zero or more instances of the proceeding term. For example,%colou?r%
can match both "color" and "colour".[]
: Defines a character class. Matches the character list or character range contained within the brackets. For example,%[abc]%
matches "a", "b", or "c";%[a-z]%
matches any lowercase letter from "a" to "z"; and%[abcx-z]%
matches "a", "b", "c", "x", "y", or "z".{m, n}
: Matches the preceding term at least m and not more than n times. For example,%a{3,5}%
matches only "aaa", "aaaa", and "aaaaa".Note
Either m or n can be omitted if you chose not to define a minimum or maximum.
|
: Boolean "Or", which matches the term on either side of the vertical bar. For example,%gra|ey%
can match "gray" or "grey".Note
A term is as a single character or a repeating character class which uses one of the following operators:
?
,*
,+
, or{n,m}
.\
: Escape character, which allows you to use the literal meaning of an operator instead of its special meaning. For example,%\[.\]%
matches any single character surrounded by "[" and "]" since the brackets are escaped, such as "[a]", "[b]", "[7]", "[@]", "[]]", and "[ ]".Note
%10\.10\.0\.1%
is the correct way to create a regex to match the IP address 10.10.0.1.*
: Matches zero or more instances of the proceeding term. For example,%ab*c%
can match "ac", "abc", and "abbbc";%ab[0-9]*%
can match "ab", "ab0", and "ab129".+
: Matches one or more instances of the proceeding term. For example,%ab+c%
can match "abc", "abbc", and "abbbc", but not "ac"..
: Matches any single character. For example,%.at%
matches any three character string ending with "at", including "hat", "cat", "bat", "4at", "#at" and " at" (starting with a space).Note
When creating a regex to match IP addresses, it is important to escape the
.
operator. For example,%10.10.0.1%
can match "10010,051" which might not be the actual intended purpose of the expression.\d
,\D
: Matches a digit/non-digit character. For example,%\d%
is equivalent to%[0-9]%
and%\D%
is equivalent to%[^0-9]%
.Note
The uppercase operator denotes the inverse of its lowercase counterpart.
\s
,\S
: Matches a whitespace character/non-whitespace character.Note
The uppercase operator denotes the inverse of its lowercase counterpart. Whitespace characters include the tab (
\t
), space(\n
) characters.\w
,\W
: Matches an alphanumeric character/non-alphanumeric character. For example,%\w%
is equivalent to%[a-zA-Z_0-9]%
and%\W%
is equivalent to%[^a-zA-Z_0-9]%
.Note
The uppercase operator denotes the inverse of its lowercase counterpart.
\xhh
: Matches the ASCII mapping for a two-digit hexadecimal character.\x
is the escape sequence which indicates that the following characters represent the hexadecimal value for ASCII.hh
specifies the two hexadecimal digits (0-9 and A-F) which point to a character in the ASCII table.Note
You can use
\xhh
to match symbol characters that are not supported by the filter pattern. For example,%\x3A%
matches:
; and%\x28%
matches(
.
Using filter patterns to match terms with a regular expression (regex)
You can match terms in your log events using a regex pattern surrounded with %
(percentage signs before and after the regex pattern).
The following code snippet shows an example of a filter pattern that returns all log events consisting of AUTHORIZED keyword.
For a list of supported regular expressions, see Supported regular expressions.
%AUTHORIZED%
This filter pattern returns log event messages, such as the following:
[ERROR 401] UNAUTHORIZED REQUEST
[SUCCESS 200] AUTHORIZED REQUEST
Using filter patterns to match terms in unstructured log events
The following examples contain code snippets that show how you can use filter patterns to match terms in unstructured log events.
Note
Filter patterns are case sensitive. Enclose exact phrases and terms that include non-alphanumeric characters in double quotation marks ("").
Using filter patterns to match terms in JSON log events
The following describes how to write the syntax for filter patterns that match JSON terms containing strings and numeric values.
The following examples contain code snippets that show how filter patterns can match terms in a JSON log event.
Note
If you test an example filter pattern with the example JSON log event, you must enter the example JSON log on a single line.
JSON log event
{ "eventType": "UpdateTrail", "sourceIPAddress": "111.111.111.111", "arrayKey": [ "value", "another value" ], "objectList": [ { "name": "a", "id": 1 }, { "name": "b", "id": 2 } ], "SomeObject": null, "cluster.name": "c" }
You can use the logical operators AND ("&&") and OR ("||") in filter patterns to create compound expressions that match log events where two or more conditions are true. Compound expressions support the use of parentheses ("()") and the following standard order of operations: () > && > ||. The following examples contain code snippets that show how you can use filter patterns with compound expressions to match terms in a JSON object.
JSON object
{ "user": { "id": 1, "email": "John.Stiles@example.com" }, "users": [ { "id": 2, "email": "John.Doe@example.com" }, { "id": 3, "email": "Jane.Doe@example.com" } ], "actions": [ "GET", "PUT", "DELETE" ], "coordinates": [ [0, 1, 2], [4, 5, 6], [7, 8, 9] ] }
Using filter patterns to match terms in space-delimited log events
You can create filter patterns to match terms in space-delimited log events. The following provides an example space-delimited log event and describes how to write the syntax for filter patterns that match terms in the space-delimited log event.
Note
You can use any conditional regular expression when creating filter patterns to match terms in space-delimited log events. For a list of supported regular expressions, see Supported regular expressions.
You can use pattern matching to create space-delimited filter patterns that match terms in a specific order. Specify the order of your terms with indicators. Use w1 to represent your first term and w2 and so on to represent the order of your subsequent terms. Place commas (",") between your terms. The following examples contain code snippets that show how you can use pattern matching with space-delimited filter patterns.
Note
You can use any conditional regular expression when creating filter patterns to match terms in space-delimited log events. For a list of supported regular expressions, see Supported regular expressions.
Space-delimited log event
INFO 09/25/2014 12:00:00 GET /service/resource/67 1200 INFO 09/25/2014 12:00:01 POST /service/resource/67/part/111 1310 WARNING 09/25/2014 12:00:02 Invalid user request ERROR 09/25/2014 12:00:02 Failed to process request