• Recent blogs

    Unleashing the Power of AWS CloudWatch Log Queries: A Comprehensive Guide with Examples

    Unleashing the Power of AWS CloudWatch Log Queries: A Comprehensive Guide with Examples


    In the world of cloud computing, monitoring and analyzing logs are crucial for gaining insights into system behavior, detecting issues, and ensuring optimal performance. AWS CloudWatch Logs provides a powerful log management solution that enables you to collect, store, and analyze log data from various AWS services and custom applications. One of the key features of CloudWatch Logs is its powerful log query language, which allows you to extract valuable information from your log data. In this blog post, we will dive into AWS CloudWatch Log Queries, exploring its syntax, capabilities, and providing real-world examples to help you harness its full potential.

    Understanding CloudWatch Log Queries:

    CloudWatch Log Queries provide a flexible and intuitive way to search, filter, and aggregate log data. The query language is based on patterns and filters, allowing you to extract specific information from your logs based on your requirements. Whether you want to identify error patterns, track user activity, or analyze system performance, log queries can be a valuable tool in your monitoring arsenal.

    Syntax and Basic Concepts:

    CloudWatch Log Queries are written in a query language that consists of commands, functions, and operators. Let's explore some of the key concepts:

    1. Fields: Log data is organized into fields, which represent specific pieces of information within each log event. Fields can include timestamps, log levels, request IDs, and custom attributes.

    2. Operators: Operators allow you to compare and manipulate data within log events. Common operators include comparison operators (e.g., =, >, <), logical operators (e.g., AND, OR), and arithmetic operators (e.g., +, -, *, /).

    3. Functions: Functions perform operations on fields or values within log events. CloudWatch Logs provides a range of built-in functions, such as count, sum, avg, min, max, and regexMatch, among others.

    4. Patterns: Patterns are used to filter log events based on specific conditions. Patterns can include field names, comparison operators, and values. For example, you can filter events with a particular log level or events containing specific keywords.

    Example Log Queries:

    Let's explore some practical examples to demonstrate the power of CloudWatch Log Queries:

    1. Counting Log Events:

    Suppose you want to count the number of log events generated by an AWS Lambda function in the last hour. You can use the `stats` function to achieve this:


    stats count(*) by bin(1h)

    | filter @message like /MyLambdaFunction/


    This query counts all log events and groups them into hourly bins. The `filter` command narrows down the results to events containing the keyword "MyLambdaFunction."

    2. Analyzing HTTP Response Codes:

    To analyze the distribution of HTTP response codes in your application logs, you can use the `stats` function in conjunction with the `filter` and `fields` commands:


    fields @timestamp, @message

    | filter @message like /HTTP/

    | stats count(*) as Total, count(*) by @message


    This query extracts the timestamp and log message fields, filters events containing "HTTP," and then counts the occurrences of each response code.

    3. Identifying Errors:

    To identify error patterns in your logs, you can combine multiple filters and operators. Here's an example that looks for log events with the word "error" in the message field:


    filter @message like /error/

    | filter @timestamp > 1646716800

    | filter @logStream = 'production-logs'


    This query filters events with "error" in the message field, after a specific timestamp, and from a specific log stream.

    4. Find the 25 most recently added log events.

    fields @timestamp, @message | sort @timestamp desc | limit 25

    5. Get a list of log events that aren't exceptions.

    fields @message | filter @message not like /Exception/

    Queries for Lambda logs

    Create a latency report.

    filter @type = "REPORT" | stats avg(@duration), max(@duration), min(@duration) by bin(5m)

    Queries for Amazon VPC Flow Logs

    Find the top 15 packet transfers across hosts:

    stats sum(packets) as packetsTransferred by srcAddr, dstAddr | sort packetsTransferred desc | limit 15

    Find the top 15 byte transfers for hosts on a given subnet.

    filter isIpv4InSubnet(srcAddr, "") | stats sum(bytes) as bytesTransferred by dstAddr | sort bytesTransferred desc | limit 1

    Find out the source address, source port, destination  address and destination port from a given subnet CIDR.

    fields @timestamp, @message, @logStream, srcAddr, srcPort, dstAddr, dstPort

    | filter isIpv4InSubnet(srcAddr, "")

    | limit 15

    Find out the source address, source port, destination  address and destination port from a given two subnet CIDRs.

    fields @timestamp, @message, @logStream, srcAddr, srcPort, dstAddr, dstPort

    | filter isIpv4InSubnet(srcAddr, "") and isIpv4InSubnet (dstAddr, "")

    | limit 15


    AWS CloudWatch Log Queries provide a powerful mechanism for extracting valuable insights from your log data. By leveraging the query language's syntax and combining it with functions, operators, and filters, you can perform sophisticated log analysis to troubleshoot issues, optimize performance, and gain a deeper understanding of your systems. The examples provided in this blog post should serve as a starting point for your log querying endeavors. So, dive in, explore the documentation, and unleash the power of CloudWatch Log Queries to supercharge your monitoring and analysis capabilities.

    No comments