DEV Community

Cover image for Automated Report Generation with Amazon CloudWatch and Lambda - (Let's Build πŸ—οΈ Series)
awedis for AWS Community Builders

Posted on

9

Automated Report Generation with Amazon CloudWatch and Lambda - (Let's Build πŸ—οΈ Series)

Monitoring your stack is one of the most important skills, especially when your architecture is becoming larger and you have many different services being used.

In this article, we are going to see how we can generate automated reports using Amazon CloudWatch and AWS Lambda.

The main parts of this article:
1- About AWS Services
2- Technical Part (code)
3- Result
4- Conclusion

About AWS Services

1- AWS Lambda: Which holds the code and the business logic
2- AWS IAM: For all the permissions inside the AWS cloud
3- Amazon CloudWatch: Monitoring service, where we can get logs

Technical Part

Now let's see our Lambda function that queries CloudWatch metrics for a specified EC2 instance and generates a simple report.



import boto3
from datetime import datetime, timedelta

def generate_report():
    cloudwatch = boto3.client('cloudwatch')

    namespace = "AWS/Lambda"
    metric_name = "Invocations"
    lambda_name = "test-python"
    period = 300

    start_time = datetime(2024, 1, 21)
    end_time = datetime(2024, 1, 22)

    response = cloudwatch.get_metric_statistics(
        Namespace=namespace,
        MetricName=metric_name,
        Dimensions=[
            {
                'Name': 'FunctionName',
                'Value': lambda_name
            },
        ],
        StartTime=start_time,
        EndTime=end_time,
        Period=period,
        Statistics=[
            'Sum'
        ],
    )

    return response

def lambda_handler(event, context):
    report_data = generate_report()
    print(report_data)

    return {
        'statusCode': 200,
        'body': 'Report generated successfully.'
    }


Enter fullscreen mode Exit fullscreen mode

Make sure that your Lambda function has the following role enabled too cloudwatch:GetMetricStatistics

Result

First, let's see my Lambda invocations metrics:
Image description

Now, once we trigger the Lambda function that collects these metrics, we get the following result:



{
"Label":"Invocations",
"Datapoints":[
{
"Timestamp":datetime.datetime(2024,
1,
21,
16,
45,
"tzinfo=tzlocal())",
"Sum":3.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
16,
50,
"tzinfo=tzlocal())",
"Sum":1.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
16,
40,
"tzinfo=tzlocal())",
"Sum":4.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
20,
15,
"tzinfo=tzlocal())",
"Sum":3.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
16,
30,
"tzinfo=tzlocal())",
"Sum":3.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
20,
20,
"tzinfo=tzlocal())",
"Sum":1.0,
"Unit":"Count"
},
{
"Timestamp":datetime.datetime(2024,
1,
21,
16,
20,
"tzinfo=tzlocal())",
"Sum":1.0,
"Unit":"Count"
}
],
...
}
Enter fullscreen mode Exit fullscreen mode




Conclusion

Monitoring and always being aware of your application logs is one of the most important tasks of a DevOps Engineer. Using AWS Lambda and Amazon CloudWatch you can create very useful features that help you to increase your observability on your application. You can even create scheduled jobs to automate the metrics generation based on your needs.

If you did like my content, and want to see more, feel free to connect with me on ➑️ Awedis LinkedIn, happy to guide or help with anything that needs clarification πŸ˜ŠπŸ’

A developer toolkit for building lightning-fast dashboards into SaaS apps

A developer toolkit for building lightning-fast dashboards into SaaS apps

Embed in minutes, load in milliseconds, extend infinitely. Import any chart, connect to any database, embed anywhere. Scale elegantly, monitor effortlessly, CI/CD & version control.

Get early access

Top comments (0)

Best Practices for Running  Container WordPress on AWS (ECS, EFS, RDS, ELB) using CDK cover image

Best Practices for Running Container WordPress on AWS (ECS, EFS, RDS, ELB) using CDK

This post discusses the process of migrating a growing WordPress eShop business to AWS using AWS CDK for an easily scalable, high availability architecture. The detailed structure encompasses several pillars: Compute, Storage, Database, Cache, CDN, DNS, Security, and Backup.

Read full post