Gunicornのログを管理する方法【ログの出力やローテーションなど】
2024年7月14日
こんにちは!
今回の記事では、Gunicornのログを管理する方法について解説します。
Gunicornは、PythonのWSGI HTTPサーバーであり、特にDjangoやFlaskといったフレームワークと組み合わせて使用されることが多いです。
Webアプリケーションを運用する上で重要なのがログの管理です。
今回の記事では、Gunicornのログ管理に焦点を当て、ログの設定方法やローテーションなど、ログ管理に必要な設定を解説します!
そもそもGunicornが何なのかについては、こちらの記事で詳しく解説しています。
【関連】FlaskやDjangoで使われるGunicornとは何か?
Gunicornの標準のログ出力
まずは、Gunicornの標準のログ出力についてみてみましょう。
GunicornでWebアプリケーションが起動するまでの準備を行います。
以下のコマンドを実行して、Gunicornをインストールします。今回は簡単にWebアプリが実装できるflaskを使います。
pip install flask gunicorn
app.pyには、以下のように記述します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run()
Gunicornの起動は、以下のコマンドを実行します。
gunicorn app:app
myappはPythonモジュール、appはWSGIアプリケーションオブジェクトです。
Gunicornはデフォルトで標準出力にログを出力します。標準出力とは、以下のようにコンソール上にログが出ることです。
開発環境の場合は、上記でも大丈夫です。
しかし、プロダクション環境ではより詳細なログ管理が求められます。例えば、上記の場合はコンソールを抜けた場合はログが見れません。プロダクションは、ログファイルなどに保存する必要があります。
ログファイルに出力する
Gunicornコマンドでは、さまざまなログオプションを提供しています。ログをファイルに出力する場合も、引数で設定します。
–access-logfile
アクセスログの出力先を指定する場合は、「–access-logfile」オプションを指定します。以下のように実行します。
gunicorn myapp:app --access-logfile access.log
–error-logfile
エラーログの出力先ファイルを指定する場合は、「–error-logfile」オプションを指定します。以下のように実行します。
gunicorn myapp:app --error-logfile error.log
もちろん、アクセスログとエラーログの設定を同時にすることも可能です。
gunicorn myapp:app --access-logfile access.log --error-logfile error.log
このようにログファイルの設定を行います。
Gunicornでログレベルの指定
ログレベルとは、ログメッセージの重要度や緊急度を示す分類のことです。
ログレベルを適切に設定することで、システムやアプリケーションの運用状況を効率的に監視・管理できます。
ログレベルの一覧
ログレベルには、以下のようなものがあります。
レベル | 説明 | 例 |
---|---|---|
DEBUG | 最も詳細な情報を含むログレベル。主に開発やデバッグ時に使用される。 | 変数の状態、詳細な処理フローの追跡 |
INFO | 通常の動作や重要なイベントに関する情報。システムが正常に動作していることを示す。 | ユーザーのログイン成功、サービスの起動 |
WARNING | 潜在的な問題や注意が必要な状況。システム動作に重大な影響を及ぼさない。 | ディスク空き容量が少ない、非推奨のAPIの使用 |
ERROR | システムやアプリケーションの一部が正常に動作していないことを示す。 | データベース接続失敗、ファイル書き込みエラー |
CRITICAL | システム全体の動作に深刻な影響を及ぼす問題。緊急の対応が必要。 | メモリ不足によるシステム停止、重大なセキュリティエラー |
開発環境では、DEBUGレベル以上のログを出力して、本番環境では、WARNINGもしくはERROR以上のログを出力することが一般的です。しかし、システムの運用状況に応じて適切なログレベルを出力しましょう。
Gunicornでログレベルを変更する
Gunicornでログレベルを変更する場合は、「–log-level」オプションを使用します。たとえば、ログレベルをinfoに変更する場合は、以下のように実行します。
gunicorn app:app --log-level info
ログのローテーション
Gunicornのログファイルが大きくなりすぎるのを防ぐために、ログローテーションを設定することが重要です。
ログローテーションとは?
ログローテーションとは、ログファイルのサイズが一定の閾値に達したり、一定の期間が経過したりしたときに、新しいログファイルを生成して古いログファイルを保存または削除するプロセスです。
これにより、ログファイルのサイズが肥大化するのを防ぎ、システムのパフォーマンスを維持しやすくなります。
ログローテーションの設定
ログローテーションを実現するためには、logrotateを使用します。これは、Linuxのツールです。
/etc/logrotate.d/gunicornファイルを作成し、以下の内容を追加します。
/var/log/gunicorn/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 www-data www-data
sharedscripts
postrotate
[ -f /var/run/gunicorn.pid ] && kill -USR1 `cat /var/run/gunicorn.pid`
endscript
}
上記の設定では、/var/log/gunicorn/ディレクトリ内の全ての.log
ファイルをローテーションします。つまり、gunicornコマンドの実行時に、ログファイルの場所を/var/log/gunicorn/ディレクトリに指定しておく必要があります。
また、ログファイルが毎日ローテーションされ、7つまでの古いログファイルが圧縮されて保存されます。
ログローテーションの詳細については、インフラ学習サイトInfraAcademyの【Linux中級講座5システムログ】にて詳しく解説されています。
コマンドを動かして実践的に学ぶ – InfraAcademy(インフラアカデミー)
まとめ
今回の記事では、Gunicornのログの設定方法などについて詳しく解説しました。
ログファイルの出力方法や、ログレベルの設定、ログローテーションなどログ管理に必要な項目を解説しました。
ログの管理はWebアプリケーションを運用する上で大切な業務です。今回の記事が何かのお役に立てれば幸いです。
ここまでお読みいただきありがとうございました。
Pythonの基礎から応用まで学べる
Python WebAcademy
Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
Pythonの学習を始めるインフラの学習はInfraAcademy
おすすめの記事