web-dev-qa-db-ja.com

python(Django)を使用したAWS Elastic Beanstalkロギング

AWS Elastic Beanstalkでアプリケーションログをどのように管理しますか?アプリケーションログをどのファイルに書き込むのですか?開発環境で次のLogging設定を使用していますが、AWSにデプロイすると機能しません。

前もって感謝します!

DEBUG_LOG_DIR = BASE_DIR + "/Django_debug.log"
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    # How to format the output
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    # Log handlers (where to go)
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'Django.utils.log.NullHandler',
        },
        'log_file': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': DEBUG_LOG_DIR,
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'Django.utils.log.AdminEmailHandler',
        },
    },
    # Loggers (where does the log come from)
    'loggers': {
        'repackager': {
            'handlers': ['console', 'log_file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'Django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'Django.db.backends': {
            'handlers': ['console', 'log_file'],
            'level': 'WARN',
            'propagate': False,
        },
        '': {
            'handlers': ['console', 'log_file'],
            'level': 'DEBUG',
        },
    }
}
25
user1126167

わかりました、それを行う方法を見つけました。

最初にssh経由でec2マシンに接続し、次に/ var/logにapp_logsという名前のフォルダーをrootユーザーで作成します。

mkdir /var/log/app_logs

その後、私は次のことをしました:

cd /var/log/
chmod g+s app_logs/
setfacl -d -m g::rw app_logs/
chown wsgi:wsgi app_logs/

これにより、このフォルダーで作成されたすべてのファイルが所有者としてwsgiを持ち、ファイルが属するグループに対して書き込み可能になります。 Django appによって作成されたログファイルには所有者および所有者グループとしてrootが含まれているが、アプリケーションはwsgiユーザーを介して実行されていることに気づいたためです。

最後に、DEBUG_LOG_DIRを/var/log/app_logs/Django_debug.logに変更しました

11
user1126167

同じような問題がありましたが、Elastic Beanstalkでしたので、アプリの.ebextensionsフォルダーに設定ファイル(例:applogs.config)を作成しました。これにより、app-logsフォルダーがまだ存在しない場合は作成され、アプリがログを書き込むことができるようにファイルの権限と所有者が設定されます。

commands:
  00_create_dir:
    command: mkdir -p /var/log/app-logs
  01_change_permissions:
    command: chmod g+s /var/log/app-logs
  02_change_owner:
    command: chown wsgi:wsgi /var/log/app-logs

最後に、Django設定で:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/log/app-logs/Django.log',
        },
    },
    'loggers': {
        'Django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

さらに、Webを使用してbeanstalkログからログにアクセスできるようにする場合は、これを.ebextensionsのファイルに追加します。

files:
  "/opt/elasticbeanstalk/tasks/taillogs.d/Django.conf":
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/log/app-logs/Django.log
28
Steve Dunlop

Beanstalkの設定を必要としない簡単な方法があります。

Django[〜#〜] logging [〜#〜]の設定で、ファイル '/ opt/python/log/{log_file_name}'。ログは、「Logs」の下のbeanstalk環境メニューからアクセスできます。

LOGGING = {
    ...,
    'handlers': {
        'logfile': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/opt/python/log/{log_file_name}',
        },
    },
    'loggers': {
        'debugger': {
            'level': 'DEBUG',
            'handlers': ['logfile'],
        'propagate': False,
    },
}

この場所は、次のドキュメントに記載されています。

https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/using-features.logging.html#health-logs-instancelocation

5
bewestphal

Linuxパーミッションの初心者として、それが機能するまでに少し時間がかかりました。上記の回答を要約すると、次のことが最終的に私にとってうまくいきました:

logging.config

commands:
  00_create_dir:
    command: mkdir -p /var/log/app-logs
  01_change_permissions:
    command: chmod g+s /var/log/app-logs
  02_change_default_owner:
    command: setfacl -d -m g::rw /var/log/app-logs
  03_change_owner:
    command: chown wsgi:wsgi /var/log/app-logs

settings.py

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
    'file': {
        'level': 'DEBUG',
        'class': 'logging.FileHandler',
        'filename': '/var/log/app-logs/Django.log',
    },
},
'loggers': {
    'Django': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
},
}

これにより、「ebログ」を使用する個別のセクションとして、またはBeanstalk環境内のセクション「ログ」としてログを表示できます。

0
Greg Holst