Send EC2 Application Logs to AWS CloudWatch using Boto3 in Python
In this tutorial, we will show you how to send application logs to AWS CloudWatch using Boto3 in Python.
Follow these steps, to implement this solution:
- Installing Boto3:
- Sending Logs to AWS CloudWatch:
Boto3 is a Software Development Kit for Python, maintained by Amazon Web Services. Install the latest version of Boto3 S3 SDK using the following command:
pip install boto3
The following is a Python code for sending application logs to AWS CloudWatch:
import boto3
import time
import json
client = boto3.client('logs', region_name='us-east-1', aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=ACCESS_SECRET)
def send_log(log_group_name, log_stream_name, log_message):
#Getting last sequence token
response = client.describe_log_streams(logGroupName=log_group_name,
logStreamNamePrefix=log_stream_name)
log_event = {
'logGroupName': log_group_name,
'logStreamName': log_stream_name,
'logEvents': [
{
'timestamp': int(round(time.time() * 1000)),
'message': log_message
},
],
}
#Adding last sequence token to log event before sending logs if it exists
if 'uploadSequenceToken' in response['logStreams'][0]:
log_event.update(
{'sequenceToken': response['logStreams'][0]['uploadSequenceToken']})
print("logs to send : ", log_event)
response = client.put_log_events(**log_event)
time.sleep(1)
print("Response : ", response)
#Create log group and log stream from AWS Console and replace the name below
LOG_GROUP_NAME = "test-log-group"
LOG_STREAM_NAME = "test-log-stream"
log_message = json.dumps({"message": "This is a sample log"})
send_log(LOG_GROUP_NAME, LOG_STREAM_NAME, log_message)