multitailを使ってログを見やすくする
この記事は?
開発サーバーや本番サーバーにおいて、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
...
# 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で発生するエラーやログに対しても同様に色付けの設定を行います。
...
# 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`の指定は有効にならない場合があるので、その場合は別の表現に置き換える必要があります。
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