"journald": { "collect_list": [ { "units": ["gunicorn.service"], "log_group_name": "/prod/daphne" } ]
}
"journald": { "collect_list": [ { "units": ["gunicorn.service"], "log_group_name": "/prod/daphne" } ]
}
"journald": { "collect_list": [ { "units": ["gunicorn.service"], "log_group_name": "/prod/daphne" } ]
}
E! Invalid Json input schema.
Under path : /logs/logs_collected | Error : Additional property journald is not allowed
E! Invalid Json input schema.
Under path : /logs/logs_collected | Error : Additional property journald is not allowed
E! Invalid Json input schema.
Under path : /logs/logs_collected | Error : Additional property journald is not allowed
curl -s http://169.254.169.254/latest/meta-data/iam/info | python3 -m json.tool
curl -s http://169.254.169.254/latest/meta-data/iam/info | python3 -m json.tool
curl -s http://169.254.169.254/latest/meta-data/iam/info | python3 -m json.tool
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
sudo mkdir -p /var/log/app
sudo touch /var/log/app/daphne.log /var/log/app/celery.log
sudo chown ubuntu:www-data /var/log/app/daphne.log /var/log/app/celery.log
sudo chmod 644 /var/log/app/daphne.log /var/log/app/celery.log
sudo mkdir -p /var/log/app
sudo touch /var/log/app/daphne.log /var/log/app/celery.log
sudo chown ubuntu:www-data /var/log/app/daphne.log /var/log/app/celery.log
sudo chmod 644 /var/log/app/daphne.log /var/log/app/celery.log
sudo mkdir -p /var/log/app
sudo touch /var/log/app/daphne.log /var/log/app/celery.log
sudo chown ubuntu:www-data /var/log/app/daphne.log /var/log/app/celery.log
sudo chmod 644 /var/log/app/daphne.log /var/log/app/celery.log
sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json > /dev/null << 'EOF'
{ "agent": { "run_as_user": "cwagent" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/app/daphne.log", "log_group_name": "/prod/daphne", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/app/celery.log", "log_group_name": "/prod/celery", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/access.log", "log_group_name": "/prod/nginx-access", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/error.log", "log_group_name": "/prod/nginx-error", "log_stream_name": "{instance_id}", "retention_in_days": 7 } ] } }, "force_flush_interval": 5 }
}
EOF
sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json > /dev/null << 'EOF'
{ "agent": { "run_as_user": "cwagent" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/app/daphne.log", "log_group_name": "/prod/daphne", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/app/celery.log", "log_group_name": "/prod/celery", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/access.log", "log_group_name": "/prod/nginx-access", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/error.log", "log_group_name": "/prod/nginx-error", "log_stream_name": "{instance_id}", "retention_in_days": 7 } ] } }, "force_flush_interval": 5 }
}
EOF
sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json > /dev/null << 'EOF'
{ "agent": { "run_as_user": "cwagent" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/app/daphne.log", "log_group_name": "/prod/daphne", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/app/celery.log", "log_group_name": "/prod/celery", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/access.log", "log_group_name": "/prod/nginx-access", "log_stream_name": "{instance_id}", "retention_in_days": 7 }, { "file_path": "/var/log/nginx/error.log", "log_group_name": "/prod/nginx-error", "log_stream_name": "{instance_id}", "retention_in_days": 7 } ] } }, "force_flush_interval": 5 }
}
EOF
sudo tee /etc/systemd/system/daphne-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe gunicorn journald logs to file
After=gunicorn.service
BindsTo=gunicorn.service [Service]
ExecStart=/bin/bash -c "journalctl -u gunicorn.service -f --no-pager -o short-iso >> /var/log/app/daphne.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/daphne-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe gunicorn journald logs to file
After=gunicorn.service
BindsTo=gunicorn.service [Service]
ExecStart=/bin/bash -c "journalctl -u gunicorn.service -f --no-pager -o short-iso >> /var/log/app/daphne.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/daphne-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe gunicorn journald logs to file
After=gunicorn.service
BindsTo=gunicorn.service [Service]
ExecStart=/bin/bash -c "journalctl -u gunicorn.service -f --no-pager -o short-iso >> /var/log/app/daphne.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/celery-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe celery journald logs to file
After=celery.service
BindsTo=celery.service [Service]
ExecStart=/bin/bash -c "journalctl -u celery.service -f --no-pager -o short-iso >> /var/log/app/celery.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/celery-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe celery journald logs to file
After=celery.service
BindsTo=celery.service [Service]
ExecStart=/bin/bash -c "journalctl -u celery.service -f --no-pager -o short-iso >> /var/log/app/celery.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/celery-log-pipe.service > /dev/null << 'EOF'
[Unit]
Description=Pipe celery journald logs to file
After=celery.service
BindsTo=celery.service [Service]
ExecStart=/bin/bash -c "journalctl -u celery.service -f --no-pager -o short-iso >> /var/log/app/celery.log"
Restart=always
RestartSec=3
User=ubuntu [Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable daphne-log-pipe.service celery-log-pipe.service
sudo systemctl start daphne-log-pipe.service celery-log-pipe.service
sudo systemctl daemon-reload
sudo systemctl enable daphne-log-pipe.service celery-log-pipe.service
sudo systemctl start daphne-log-pipe.service celery-log-pipe.service
sudo systemctl daemon-reload
sudo systemctl enable daphne-log-pipe.service celery-log-pipe.service
sudo systemctl start daphne-log-pipe.service celery-log-pipe.service
sleep 10 && tail -5 /var/log/app/daphne.log && tail -5 /var/log/app/celery.log
sleep 10 && tail -5 /var/log/app/daphne.log && tail -5 /var/log/app/celery.log
sleep 10 && tail -5 /var/log/app/daphne.log && tail -5 /var/log/app/celery.log
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ -a fetch-config \ -m ec2 \ -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \ -s
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ -a fetch-config \ -m ec2 \ -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \ -s
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ -a fetch-config \ -m ec2 \ -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \ -s
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
{ "status": "running", "starttime": "2026-04-13T05:39:11+00:00", "configstatus": "configured", "version": "1.300064.1b1344"
}
{ "status": "running", "starttime": "2026-04-13T05:39:11+00:00", "configstatus": "configured", "version": "1.300064.1b1344"
}
{ "status": "running", "starttime": "2026-04-13T05:39:11+00:00", "configstatus": "configured", "version": "1.300064.1b1344"
}
aws logs filter-log-events \ --log-group-name /prod/daphne \ --region us-west-2 \ --limit 5 \ --output table \ --query 'events[*].message'
aws logs filter-log-events \ --log-group-name /prod/daphne \ --region us-west-2 \ --limit 5 \ --output table \ --query 'events[*].message'
aws logs filter-log-events \ --log-group-name /prod/daphne \ --region us-west-2 \ --limit 5 \ --output table \ --query 'events[*].message'
StandardOutput=append:/var/log/app/daphne.log
StandardError=append:/var/log/app/daphne.log
StandardOutput=append:/var/log/app/daphne.log
StandardError=append:/var/log/app/daphne.log
StandardOutput=append:/var/log/app/daphne.log
StandardError=append:/var/log/app/daphne.log
sudo systemctl stop daphne-log-pipe.service celery-log-pipe.service
sudo systemctl disable daphne-log-pipe.service celery-log-pipe.service
sudo rm /etc/systemd/system/daphne-log-pipe.service
sudo rm /etc/systemd/system/celery-log-pipe.service
sudo systemctl daemon-reload
sudo systemctl stop daphne-log-pipe.service celery-log-pipe.service
sudo systemctl disable daphne-log-pipe.service celery-log-pipe.service
sudo rm /etc/systemd/system/daphne-log-pipe.service
sudo rm /etc/systemd/system/celery-log-pipe.service
sudo systemctl daemon-reload
sudo systemctl stop daphne-log-pipe.service celery-log-pipe.service
sudo systemctl disable daphne-log-pipe.service celery-log-pipe.service
sudo rm /etc/systemd/system/daphne-log-pipe.service
sudo rm /etc/systemd/system/celery-log-pipe.service
sudo systemctl daemon-reload
fields @timestamp, @message
| filter @message like /api\/auth\/login/
| filter @message like "403"
| stats count() by bin(5m)
fields @timestamp, @message
| filter @message like /api\/auth\/login/
| filter @message like "403"
| stats count() by bin(5m)
fields @timestamp, @message
| filter @message like /api\/auth\/login/
| filter @message like "403"
| stats count() by bin(5m)