カテゴリ: Flask 更新日: 2026/02/05

FlaskとFluentdを連携!ログ管理と可観測性を初心者向けに徹底解説

FlaskとFluentdを連携してログを外部へ収集する方法
FlaskとFluentdを連携してログを外部へ収集する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Flaskで作ったアプリが動いているときに、裏側で何が起きているか調べる方法はありますか?」

先生

「それは『ログ』を見ることですね。日記のように、システムがいつ何をしたかを記録に残す機能のことです。」

生徒

「ログをバラバラに保存すると大変そうです。まとめて管理する『Fluentd(フルエンデ)』というものがあると聞いたのですが…。」

先生

「その通り!FlaskとFluentdを組み合わせれば、ログを自動で集めて整理できます。一緒に設定方法を学びましょう!」

1. ログ管理と可観測性(オブザーバビリティ)とは?

1. ログ管理と可観測性(オブザーバビリティ)とは?
1. ログ管理と可観測性(オブザーバビリティ)とは?

プログラミングを始めたばかりの方にとって、「ログ」という言葉は少し難しく感じるかもしれません。簡単に言うと、ログとは「コンピュータが実行した活動の記録」のことです。例えば、ウェブサイトに誰かがアクセスしたときや、エラーが発生して動かなくなったとき、その証拠をテキスト形式で残しておきます。

そして最近よく耳にする「可観測性(かかんそくせい)」、英語でオブザーバビリティ(Observability)とは、「外から見て、中がどうなっているか手に取るようにわかる状態」にすることを指します。ログをきれいに整理して保存しておくことで、何かが起きたときに「どこで」「何が」原因だったのかをすぐに突き止められるようになります。これは、大きなシステムを運用する上で非常に大切な考え方です。

2. Fluentd(フルエンデ)ってどんな役割をするの?

2. Fluentd(フルエンデ)ってどんな役割をするの?
2. Fluentd(フルエンデ)ってどんな役割をするの?

Fluentdは、一言で言うと「データの郵便局」のような存在です。Flaskアプリから出力されたログを受け取り、それを別の場所(データベースやクラウドストレージなど)へ送り届ける役割を持っています。

通常、ログはパソコンの中のファイルに書き込まれますが、アプリが大きくなるとファイルを探すのが大変になります。Fluentdを使うと、いろいろな場所から発生するログを一箇所に集めて、整理整頓してから届けてくれるので、管理が劇的に楽になります。このように、データを集めて配送する仕組みを「データコレクタ」と呼びます。

3. Flaskでログを出力する基本の方法

3. Flaskでログを出力する基本の方法
3. Flaskでログを出力する基本の方法

まずは、Fluentdと連携する前に、Flaskだけでログを出す方法を知っておきましょう。Pythonには標準で「logging」という、ログを記録するための道具が入っています。これを使うと、「ここは正常に動いたよ」「ここは注意が必要だよ」といったメッセージを画面やファイルに出すことができます。

以下のコードは、Flaskを起動したときに「アプリが始まったよ!」というメッセージを記録する簡単な例です。


from flask import Flask
import logging

app = Flask(__name__)

# ログの設定をします(情報のレベルを「INFO」に設定)
logging.basicConfig(level=logging.INFO)

@app.route('/')
def hello():
    # ログにメッセージを書き込みます
    app.logger.info('トップページにアクセスがありました!')
    return 'こんにちは、Flaskの世界へ!'

if __name__ == '__main__':
    app.run()

このプログラムを実行してブラウザでアクセスすると、黒い画面(コンソール)にメッセージが表示されます。これがログの第一歩です。

4. FlaskとFluentdを繋ぐ「fluent-logger」の準備

4. FlaskとFluentdを繋ぐ「fluent-logger」の準備
4. FlaskとFluentdを繋ぐ「fluent-logger」の準備

FlaskからFluentdへログを送るには、「fluent-logger」という拡張機能(プラグインのようなもの)を使います。これを使うことで、Pythonのプログラムの中から直接Fluentdに向けてメッセージを投げることができるようになります。

まず、準備として「ライブラリ」という便利な部品をインストールする必要があります。パソコンのコマンドを入力する画面で、以下の命令を実行します。これにより、PythonがFluentdとお話しできるようになります。


pip install fluent-logger

これで、あなたのPython環境に「Fluentdへデータを送るための専用の糸」が通った状態になります。次に、この糸を使って実際にデータを送るプログラムを書いていきましょう。

5. Fluentdへログを送信するPythonコードの作成

5. Fluentdへログを送信するPythonコードの作成
5. Fluentdへログを送信するPythonコードの作成

準備ができたら、実際にFlaskからFluentdへログを送信してみましょう。ここでは、アクセスがあるたびに、その情報をFluentdへ飛ばす設定にします。Fluentdは通常「ポート番号 24224」という専用の窓口で待機しているので、そこを指定します。


from flask import Flask
from fluent import sender
from fluent import event

app = Flask(__name__)

# Fluentdの送り先を設定します
# 'flask' はタグ名(ラベル)で、24224番の窓口へ送ります
logger = sender.FluentSender('flask', host='localhost', port=24224)

@app.route('/log-test')
def log_test():
    # 辞書形式(ラベルと値のセット)でログを送ります
    # これがFluentdに送られる「荷物」の中身です
    log_data = {
        'status': 'success',
        'message': 'Fluentdへの送信テストです',
        'user': 'beginner_user'
    }
    
    # 'app.log' という名前をつけてFluentdに送信!
    logger.emit('app.log', log_data)
    
    return 'Fluentdにログを送ったよ!'

if __name__ == '__main__':
    app.run()

このコードでは、logger.emitという命令を使って、作成したデータをFluentdへ送信しています。まるでスマホからメッセージを送るように簡単にログが送信できます。

6. Fluentd側の設定ファイル(fluent.conf)の書き方

6. Fluentd側の設定ファイル(fluent.conf)の書き方
6. Fluentd側の設定ファイル(fluent.conf)の書き方

ログを送る側(Flask)の設定ができたら、次は受け取る側(Fluentd)の設定が必要です。Fluentdには「fluent.conf」という設定ファイルがあり、ここに「どこから受け取って、どこに出力するか」というルールを書きます。

初心者の方でも分かりやすいように、受け取ったログをそのまま画面(標準出力)に表示する設定を紹介します。これをFluentdに読み込ませることで、Flaskからのメッセージが届いているか確認できます。


# 24224番ポートでログを待ち受ける設定
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

# 受け取ったログを画面に表示する設定
<match flask.**>
  @type stdout
</match>

「source」が入り口、「match」が出口を意味しています。このように、入り口と出口をパズルのように組み合わせるのがFluentdの特徴です。

7. エラー発生時に自動でログを送る工夫

7. エラー発生時に自動でログを送る工夫
7. エラー発生時に自動でログを送る工夫

手動でログを送るだけでなく、何かトラブル(エラー)が起きたときに自動で記録してくれると助かりますよね。Flaskには「エラーハンドラ」という機能があり、これを使えばアプリがクラッシュしたときの詳細な情報をFluentdに記録できます。

エラーが発生した際に「何が起きたか」をキャッチして送信するコードを見てみましょう。


from flask import Flask
from fluent import sender

app = Flask(__name__)
logger = sender.FluentSender('flask_error', host='localhost', port=24224)

# 500エラー(サーバー内部の故障)が起きたときに動く関数
@app.errorhandler(500)
def server_error(e):
    # エラーの内容をFluentdに送る
    logger.emit('critical', {
        'error_type': 'Internal Server Error',
        'detail': str(e)
    })
    return "ごめんなさい、エラーが起きました。", 500

@app.route('/error')
def cause_error():
    # わざとエラーを起こしてみる
    return 1 / 0

if __name__ == '__main__':
    app.run()

このように設定しておけば、プログラミングの間違いでアプリが止まっても、後からFluentdに溜まったログを見て原因を修正することができます。これはまさに「可観測性」を高めるためのテクニックです。

8. 構造化ログで後からの検索を便利にする

8. 構造化ログで後からの検索を便利にする
8. 構造化ログで後からの検索を便利にする

ただの長い文章としてログを残すのではなく、意味のある形に整理して残すことを「構造化ログ」と呼びます。例えば、「2023年1月1日にエラーが起きた」と文章で書くよりも、「日付: 2023-01-01, 状態: エラー」と分けて書く方が、後で検索するときに便利です。

Fluentdは「JSON(ジェイソン)」という、コンピュータが読みやすい形式でデータを扱うのが得意です。Flaskから送るときも、先ほどのコードのように「名前と値のペア(辞書形式)」にすることで、後で特定のユーザーだけのログを探したり、エラーの回数を数えたりするのがとても簡単になります。これが、プロの現場でログ管理が重視される大きな理由です。

9. ログを外部のサービスへ転送して見える化する

9. ログを外部のサービスへ転送して見える化する
9. ログを外部のサービスへ転送して見える化する

Fluentdの本当の凄さは、集めたログをさらに別のサービスへ送れることです。例えば、Google Cloudの「Cloud Logging」や、Amazonの「CloudWatch」、あるいは「Elasticsearch」といった強力なツールにログを転送できます。

これらのサービスを使えば、文字ばかりのログを綺麗なグラフにしたり、スマホに通知を送ったりすることも可能です。Fluentdは、Flaskという小さな世界から、広いインターネットの管理システムへと橋渡しをしてくれる大切な架け橋なのです。初心者の皆さんも、まずは自分のパソコン内でログが飛ぶ様子を確認することから始めて、少しずつこの便利な仕組みに慣れていってくださいね。

カテゴリの一覧へ
新着記事
New1
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New3
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
New4
Flask
FlaskのURLルールとは?ルーティングの基本と動的URLの作り方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説