multitailを使ってログを見やすくする

2023/03/15に公開

この記事は?

開発サーバーや本番サーバーにおいて、xxxx.logファイルやyyyy.errファイルなどを監視する際にログファイルを色付けすることによってログを見やすくしたりするツールや設定方法を紹介します。この記事内で紹介するツールについてはMultitailになります。

Multitailとは?

Multitailはtailコマンドのような振る舞いをし、さらに複数のウィンドウに分割したり、複数のファイルを1つのウィンドウに統合して表示することができます。

このツールを使ってさらにどんなことができるのか気になった方はこちらのページを見てみてください。

インストール

Homebrew

$brew install multitail

Ubuntu(apt)

$apt update
$apt install multitail

色付けの設定

Multitailのツールをインストールするとmultitail.confという名前の設定ファイルを同時にインストールされます。こちらの設定ファイルに追記することで独自の色付けを定義することができます。

設定ファイルはそれぞれのパッケージツールによって異なります。

  • Homebrew /usr/local/etc/multitail.conf
  • Ubuntu /etc/multitail.conf
multitail.conf
...
# Custom Color Scheme
colorscheme:nginx
cs_re:,yellow,bold:(GET|POST|PATCH|PUT|DELETE)
cs_re:green:^.*status:2[0-9][0-9].*$
cs_re:green:^.*status:3[0-9][0-9].*
cs_re:yellow:^.*4[0-9][0-9].*$
cs_re:red:^.*5[0-9][0-9].*$

上記ファイルを保存した状態で、下記のコマンドでログを表示してみます。
$multitail -cS nginx /var/log/www/acccess.log

すると、画像のようにログファイルに色付けが行われます。20x系のHTTPステータスの行は緑、40x系のHTTPステータスの行は黄色、50x系のHTTPステータスの行は赤色に色付けされています。
また、リクエストメソッドの背景色を黄色で色付けされています。


※画像の一部をマスクしてあります。
改めて、同じログファイルを見比べてみます。

Before ↔ After


一行一行詳細にみなくてもどの行に着目すべきなのか直ぐに判断することができるようになりました!

同じようにPHPで発生するエラーやログに対しても同様に色付けの設定を行います。

multitail.conf
...
# colorscheme:nginx
# 省略

colorscheme:php
cs_re:green:^.* 20[0-9] .*$
cs_re:green:^.* 30[0-9] .*$
cs_re:yellow:^.* 40[0-9] .*$
cs_re:yellow:^.*(PHP Warning|PHP Stack trace|PHP +[0-9]+\.).*$
cs_re:red:^.* 50[0-9] .*$
cs_re:red:^.*No such file or directory.*$
cs_re:red,,reverse:^.*(error|ERROR|failed).*$
mcsre_s:,,underline:^.*((PHP Warning|PHP Stack trace|PHP +[0-9]+\.).*$)
mcsre:,blue,bold:Line: [0-9]+
mcsre:,blue,bold:[a-zA-Z0-9]+\.(php|tpl)\([0-9]+\)
mcsre:,blue,bold:[a-zA-Z0-9]+\.(php|tpl) on line [0-9]+

下記コマンドでlogファイルとerrファイルを一つのファイルに統合して表示するようにします。
$multitail -cS php --mergeall /var/log/www/xxxx.log -cS php /var/log/www/xxxx.err

上記設定値で下記のように表示されます。エラーメッセージの中でも特に注力すべき箇所の背景色を変更することで、より目立たせることができます。

※画像の一部をマスクしてあります。

色付け設定の指定方法

上記で記載した設定ファイルの指定方法を解説します。
色付けには基本的にcs_re cs_re_s mcsre mcsre_sの4つを用いて指定します。 また、正規表現を用いる場合、\d\s`の指定は有効にならない場合があるので、その場合は別の表現に置き換える必要があります。

multitail.conf
cs_re:<color>:<regular expression>
ex) cs_re:red:^.* ERROR .*$
ex) cs_re:red,white,reverse:^.* ERROR .*$ # 文字色(赤)、背景(白)、色反転

# 特定の箇所にのみ色付けを行いたい
cs_re_s:<color>:<regular expression>
ex) cs_re_s:red:^.* (ERROR) .*$ # ()で囲まれたERROR文字のみ色付け
ex) cs_re_s:red,white,reverse:^.* (ERROR) .*$ # 文字色(赤)、背景(白)、色反転

# 一度設定された設定を上書きする
mcsre:color:regexp
ex) mcsre:red:^.* ERROR .*$

Discussion