はじめに
Djangoアプリケーションを本番環境で運用する際、ログ管理は重要な要素の1つです。AWSのCloudWatch Logsを活用すると、Djangoのログをクラウド上で一元管理し、リアルタイムで監視することが可能になります。本記事では、DjangoのログをAWS CloudWatchに送信し、効率的に監視・分析する方法を解説します。
AWS CloudWatchとは?
CloudWatchの特徴
AWS CloudWatchは、AWSのインフラやアプリケーションの監視・ログ管理を提供するサービスです。
- リアルタイムログ監視
- メトリクスとアラートの設定
- ログフィルタと検索機能
- AWSサービスとシームレスな統合
AWS CloudWatchのセットアップ
1. IAMロールの作成
DjangoアプリがCloudWatchにログを送信できるようにするため、適切なIAMロールを作成します。
- AWS IAMコンソールを開く
- 「ロールの作成」をクリック
- EC2 または ECS に適用するロールを選択
- 「AWS管理ポリシー」から「CloudWatchLogsFullAccess」をアタッチ
- ロールを作成し、ARNをメモする
2. CloudWatchロググループの作成
- AWS CloudWatchコンソールを開く
- 「ロググループ」セクションへ移動し、「新しいロググループの作成」ボタンをクリック
- 適当な名前(例:
django-app-logs
)を入力 - 保持期間を設定(デフォルトは無制限)
Djangoの設定
1. 必要なパッケージのインストール
CloudWatchにログを送信するために、AWS SDK boto3
をインストールします。
pip install boto3 watchtower
2. settings.py のログ設定
Djangoのsettings.py
を編集し、CloudWatchへログを送信する設定を追加します。
import os
import boto3
import watchtower
LOG_GROUP_NAME = 'django-app-logs'
AWS_REGION = 'us-east-1' # 適宜変更
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(asctime)s [%(levelname)s] %(message)s',
},
},
'handlers': {
'watchtower': {
'level': 'INFO',
'class': 'watchtower.CloudWatchLogHandler',
'log_group': LOG_GROUP_NAME,
'stream_name': os.getenv('DJANGO_ENV', 'development'),
'boto3_client': boto3.client('logs', region_name=AWS_REGION),
'formatter': 'verbose',
},
},
'loggers': {
'django': {
'handlers': ['watchtower'],
'level': 'INFO',
'propagate': True,
},
},
}
3. 環境変数の設定
EC2やFargateなどの環境でCloudWatchを利用する場合、IAMロールを適用し、Djangoアプリの環境変数を設定します。
export DJANGO_ENV=production
export AWS_REGION=us-east-1
4. ログの送信テスト
Djangoのシェルを起動し、ログがCloudWatchに送信されているか確認します。
import logging
logger = logging.getLogger('django')
logger.info("CloudWatchにログ送信テスト")
CloudWatch Logsのコンソールでdjango-app-logs
のロググループを開き、ログが記録されているか確認します。
CloudWatch Logs Insightsでログを分析
CloudWatch Logs Insightsを利用すると、ログデータをSQLのようにクエリで検索できます。
1. CloudWatch Logs Insightsを開く
- CloudWatchコンソールへ移動
- 「ログ Insights」をクリック
- 「ロググループ」を選択(例:django-app-logs)
- 以下のクエリを実行
fields @timestamp, @message
| sort @timestamp desc
| limit 20
まとめ
本記事では、AWS CloudWatchを活用してDjangoのログを管理する方法を解説しました。
- AWS CloudWatchのセットアップ(IAMロール、ロググループ作成)
- Djangoの設定(boto3とwatchtowerの導入)
- ログ送信の確認とCloudWatch Logs Insightsの活用
AWS CloudWatchを利用することで、Djangoアプリのログをリアルタイムで監視し、効率的なトラブルシューティングが可能になります。