3 Ways to Keep CloudWatch Logs Cost Under Control

Listen to this Post

Featured Image
CloudWatch Logs costs can often exceed the expenses of running core AWS services like API Gateway, Lambda, and DynamoDB. Here are three effective strategies to control these costs while maintaining observability.

1. Use AWS Powertools Logging Buffering

AWS Powertools for Lambda provides a Logger utility that supports log buffering, reducing the number of write operations to CloudWatch.

Example (TypeScript):

import { Logger } from '@aws-lambda-powertools/logger';

const logger = new Logger({
logLevel: 'INFO',
serviceName: 'my-service',
});

export const handler = async (event: any) => {
logger.info('Processing event...'); // Buffered logs
// Business logic
logger.flush(); // Explicitly flush if needed
};

🔗 AWS Powertools Logger Docs

  1. Set Log Storage Class to Infrequent Access
    CloudWatch Logs supports Infrequent Access (IA) storage, which reduces costs but disables:

    • Metric filters
    • Subscription filters
    • Embedded Metric Format (EMF)

AWS CLI Command:

aws logs put-retention-policy --log-group-name "/aws/lambda/my-function" --retention-in-days 365 --storage-class INFREQUENT_ACCESS

3. Optimize Log Ingestion

Log ingestion costs dominate over storage. Best practices:

  • Log sparingly (avoid debug logs in production).
  • Use structured logging (one consolidated log per transaction).
  • Conditional log flushing (emit debug logs only on errors).

Example (Python):

import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
try:
 Business logic
logger.info({"status": "success", "data": event})
except Exception as e:
logger.error({"status": "error", "error": str(e)})

You Should Know:

Additional Cost-Saving Commands & Techniques

1. Delete Unnecessary Log Groups:

aws logs delete-log-group --log-group-name "/aws/lambda/old-function"

2. Adjust Retention Periods:

aws logs put-retention-policy --log-group-name "/aws/lambda/my-function" --retention-in-days 7

3. Export Logs to S3 (Cheaper Storage):

aws logs create-export-task --task-name "ExportToS3" --log-group-name "/aws/lambda/my-function" --from 1625097600000 --to 1625184000000 --destination "my-s3-bucket" --destination-prefix "logs/"

4. Use CloudWatch Logs Insights Efficiently:

fields @timestamp, @message
filter @message like /ERROR/
sort @timestamp desc
limit 20

What Undercode Say:

CloudWatch Logs costs can spiral if left unchecked. By combining log buffering, Infrequent Access storage, and selective logging, you can drastically reduce expenses. Additionally, automating log cleanup and leveraging S3 for archival further optimizes costs. Always monitor your logging strategy and adjust retention policies based on compliance needs.

Expected Output:

  • Reduced CloudWatch Logs billing.
  • Maintained observability with minimal overhead.
  • Automated log management using AWS CLI and Powertools.

🔗 Further Reading:

References:

Reported By: Theburningmonk 3 – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅

Join Our Cyber World:

💬 Whatsapp | 💬 Telegram