<ec2-name>
<key-pair-name>
sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i ./amazon-cloudwatch-agent.deb
sudo vi /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"disk": {
"measurement": ["used_percent"],
"metrics_collection_interval": 60,
"resources": ["/"]
},
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
}
}
}
}
:wq!
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
<ec2-name>
<key-pair-name>
sudo apt update -y
sudo apt install stress -y
stress --cpu 50 --timeout 5m
<ec2-name>
<lambda-function-name>
import boto3
import time
import random
logs_client = boto3.client('logs')
def lambda_handler(event, context):
log_group_name = 'TestLogGroup'
log_stream_name = 'TestLogStream'
# Create log group if it doesn't exist
try:
logs_client.create_log_group(logGroupName=log_group_name)
except logs_client.exceptions.ResourceAlreadyExistsException:
pass # Log group already exists
# Create log stream if it doesn't exist
try:
logs_client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
except logs_client.exceptions.ResourceAlreadyExistsException:
pass # Log stream already exists
# Sample data for log entries
http_methods = ['GET', 'POST', 'PUT', 'DELETE']
request_urls = [
'/home',
'/api/user',
'/login',
'/products',
'/checkout',
'/cart',
'/search?q=aws',
'/api/order/123',
'/api/product/567'
]
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15',
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15A5341f Safari/604.1',
'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.81 Mobile Safari/537.36'
]
status_codes = [200, 201, 400, 401, 403, 404, 500]
# Create log events
log_events = []
for i in range(20):
log_event = {
'timestamp': int(time.time() * 1000),
'message': (
f"{random.choice(http_methods)} "
f"{random.choice(request_urls)} "
f"{random.choice(status_codes)} "
f"{random.choice(user_agents)}"
)
}
log_events.append(log_event)
# Put log events
logs_client.put_log_events(
logGroupName=log_group_name,
logStreamName=log_stream_name,
logEvents=log_events
)
return {
'statusCode': 200,
'body': 'Successfully created log events.'
}
TestLogGry=oup
and within it you should find TestLogStream
fields @timestamp, @message
| parse @message /(?<http_method>\w+) (?<request_url>[^ ]+) (?<status_code>\d+) (?<user_agent>.+)/
| sort @timestamp desc
| limit 20
fields @timestamp, @message
| parse @message /(?<http_method>\w+) (?<request_url>[^ ]+) (?<status_code>\d+) (?<user_agent>.+)/
| filter status_code = 403
| sort @timestamp desc
fields @timestamp, @message
| parse @message /(?<http_method>\w+) (?<request_url>[^ ]+) (?<status_code>\d+) (?<user_agent>.+)/
| filter http_method in ["GET", "PUT"]
| stats count(*) as request_count by http_method
| sort request_count desc
<ec2-name>
## Install CloudWatch Agent
sudo yum install amazon-cloudwatch-agent
y
and entersudo vi /opt/aws/amazon-cloudwatch-agent/bin/cloudwatch-config.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/ping.log",
"log_group_name": "PingLogGroup",
"log_stream_name": "{instance_id}/ping.log",
"timestamp_format": "%b %d %H:%M:%S"
}
]
}
}
}
}
:wq!
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/cloudwatch-config.json
ping google.com | tee -a /ping.log
<ec2-name>
<key-pair-name>
<flow-log-name>
ping google.com
<unique-name>
## Launch an EC2 Instance
<ec2-name>
<key-pair-name>
## Create a VPC Flow Log for S3
<flow-log-to-s3-name>
ping google.com