BackEnd

Docker上のLaravelのログをFluentdに出力する

投稿日:

はじめに

こんにちは。前回に続いてログの扱いをあれこれ調べてました。今回はログ集約をやってみたくてFluentdについてです。Docker上に構築したLaravelだとどうやるのかを調べています。

環境

  • PHP 7.3.6
  • Laravel 5.8.29

Fluentdについて

冒頭にもあるように、ログ集約のためのミドルウェアで、Ruby製OSSです。サーバ上ではnginx,Apache,MySQL,Redis,postfixなど様々なミドルウェアと、その上に構築・実装したアプリケーションが都度ログを吐き出しています。通常はあちこちに散ってるログを一括して受けつけ、任意の形式・場所にまとめて出力してくれるのがFluentdです。
もう少し短く言うと「ログの入出力を一本化するミドルウェア」になるでしょうか。

今まで関わったプロジェクトのサーバで「なんかログ集めるやつが動いてる」という雑な認識しかしておらず、自分で構築やチューニングした経験はありませんでした。

目的

  • DockerでFluentdを動作させたい
  • Laravelのアプリから吐き出したログをFluentdで受け付けたい

nginxのログをFluentdに出力する記事はすぐ見つかったんですが、Laravelのログはどうすれば?というのが見当たらなかったので、入門がてら調べてみたのが今回の記事になります。

Fluentd本体はdocker-composeで導入

公式がイメージを用意してくれていますので、docker-compose.ymlに記述すれば使えるようになります。
以下、nginx+PHP-FPM+MariaDB+Fluentd全ての設定を記述したファイルです。それぞれ説明を後述します(全項目はさすがに説明しきれませんが…)。

fluentd

Fluentdの最新は1.6系ですが、stableとlatestは1.3系です。基本はAlpine Linuxで、別途debian版もあります。
以下、fluentdビルド用のDockerfileです。イメージからコンテナを作るだけでなく、コンテナ内であれこれしたい場合は build で指定したパスにDockerfileを置きます。
apk add --update でパッケージ全体を更新した後で、 apk add --update --no-cache でパッケージを個別にインストールしています。bashはコンテナ内でCUIを操作しないのであれば不要です。
tzdataはApline Linuxのデフォルトが UTC+0 なので、日本のタイムゾーンに合わせるためです。

以下、 FLUENTD_CONF で指定して差し替えているFluentdの設定ファイルです。 source でFluentdへの入力、 match で出力を制御しています。
各オプションについてはまだ理解しきれていませんが、こちらを参考にさせてもらい、作成しました。

db

データベースのコンテナです。今回はDBログには触れてないのと、docker-compose.ymlに書いてある以上のことはしていないため、割愛します。

app

PHP-FPMが稼働するコンテナです。Fluentd導入に際して特別なことはしていませんが、ビルド用のDockerfileは以下のとおりです。
docker-compose up -d の後、コンテナの中で composer create-project --prefer-dist laravel/laravel testapp を実行してLaravelをインストールしています。

web

nginxコンテナです。 logging セクション以下でログドライバとしてfluentdを指定し、ログの出力先とタグを指定しています。
タグはFluentdの基本機能で、受け付けたログの出し分けに使います。本筋から外れるのと、私がまだきちんと理解しきれていないので、参考ページの紹介に留めます…
今回の主旨はLaravelのログ出力ですが、nginxのログも以下のように出力しています(見やすく整形)。

LaravelからログをFluentdに出力する

パッケージ導入

Laravelデフォルトでは storage/logs 以下にログファイルがデイリーで生成されていきます。
また、LaravelはロガーとしてMonologを使用しており、Monolog用のログハンドラがパッケージとして公開されていますので、有り難く使わせていただきます。

PHPコード例

Laravelからは以下のように出力します。5.6以降は config/logging.php に記述することでもっとスマートに書けるかなと思うのですが、一応動くコードです。

これでFluent側のログには以下のように出力されます。
見やすいように改行を入れてますが、実際は1行です。
なお出力先は前述したFluentdの設定ファイル(my_fluentd.conf)の match docker.** 内で指定したパスになります。

さいごに

昔から知ってはいたFluentdですが、いざ触ってみると自由度が高く、出力先としてS3やBigQueryを選べたり、夢が広がります。引き続き学習して使いこなせるようになりたいです。

おすすめ書籍

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 PHPフレームワーク Laravel入門

blog-page_footer_336




blog-page_footer_336




-BackEnd
-, ,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

laravel logo

PHPで画像編集~Intervention Image~

1 はじめに2 やる事3 インストール4 画像読み込み5 文字列の追加6 編集した画像の保存7 実際のコード8 他に使う機会がありそうな編集8.1 モザイク8.2 ぼやけ8.3 リサイズ9 さいご10 ...

laravel logo

Deployerで複数の環境やサーバにデプロイするには

1 はじめに2 hosts.ymlファイルの作成3 プロダクション・ステージング環境を分ける3.1 ymlファイルの記載3.2 デプロイコマンド4 複数台のサーバに同時リリースする4.1 ymlファイ ...

rails

Railsの低レベルキャッシュを使ってみた

1 はじめに1.1 環境2 ドキュメント3 準備3.1 configの確認3.2 キャッシュストア4 使ってみる4.1 #read、#write、#delete4.2 #fetch4.3 オプション4 ...

laravel logo

LaravelのHttp Facade

1 はじめに2 基本定な使い方2.1 get2.2 post3 タイムアウト4 リトライ5 マルチパートリクエスト6 エラー処理7 さいごに8 おすすめ書籍 はじめに 現在関わっている案件でHttpク ...

laravel logo

LaravelでのDB操作の基礎

1 はじめに2 Eloquent2.1 モデルの定義2.2 モデルの取得2.3 モデルの追加2.4 モデルの更新2.5 モデルの削除2.6 クエリスコープ3 マイグレーション3.1 マイグレーションフ ...

フォロー

blog-page_side_responsive

2019年7月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。