Djangoのログ管理:AWS CloudWatchを活用する【Django×AWS入門10】

はじめに

Djangoアプリケーションを本番環境で運用する際、ログ管理は重要な要素の1つです。AWSのCloudWatch Logsを活用すると、Djangoのログをクラウド上で一元管理し、リアルタイムで監視することが可能になります。本記事では、DjangoのログをAWS CloudWatchに送信し、効率的に監視・分析する方法を解説します。

AWS CloudWatchとは?

CloudWatchの特徴

AWS CloudWatchは、AWSのインフラやアプリケーションの監視・ログ管理を提供するサービスです。

  • リアルタイムログ監視
  • メトリクスとアラートの設定
  • ログフィルタと検索機能
  • AWSサービスとシームレスな統合

AWS CloudWatchのセットアップ

1. IAMロールの作成

DjangoアプリがCloudWatchにログを送信できるようにするため、適切なIAMロールを作成します。

  1. AWS IAMコンソールを開く
  2. 「ロールの作成」をクリック
  3. EC2 または ECS に適用するロールを選択
  4. 「AWS管理ポリシー」から「CloudWatchLogsFullAccess」をアタッチ
  5. ロールを作成し、ARNをメモする

2. CloudWatchロググループの作成

  1. AWS CloudWatchコンソールを開く
  2. 「ロググループ」セクションへ移動し、「新しいロググループの作成」ボタンをクリック
  3. 適当な名前(例:django-app-logs)を入力
  4. 保持期間を設定(デフォルトは無制限)

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を開く

  1. CloudWatchコンソールへ移動
  2. 「ログ Insights」をクリック
  3. 「ロググループ」を選択(例:django-app-logs)
  4. 以下のクエリを実行
fields @timestamp, @message
| sort @timestamp desc
| limit 20

まとめ

本記事では、AWS CloudWatchを活用してDjangoのログを管理する方法を解説しました。

  1. AWS CloudWatchのセットアップ(IAMロール、ロググループ作成)
  2. Djangoの設定(boto3とwatchtowerの導入)
  3. ログ送信の確認とCloudWatch Logs Insightsの活用

AWS CloudWatchを利用することで、Djangoアプリのログをリアルタイムで監視し、効率的なトラブルシューティングが可能になります。