2013年03月27日

標準入力・コマンド出力をパターン毎にカラリゼーションしてくれる Rainbow の使い方

アホ!みたいなスピードで更新されるログを目視で確認する、そんな事って無いでしょうか?
 
僕は時々あるんです。バックエンド・システムの切り替えで端末(Terminal)を開いてログをtail、もちろんgrepなども使って”概ね”問題無いかを確認するんですが、ミリ秒オーダーで処理を行うアプリケーションの場合には、テキストだけで直感的に問題の有無を判断するのは難しいものがあります。こんな時にカラー情報も使えれば表現の次元が増えるので事故・負担も少ないのに・・・。

rainbow

Rainbow はそんな僕・貴方を助けてくれるパータンにマッチしたテキストをカラリゼーションしてくれるCLIアプリケーションなのです。 

Rainbow のインストール


RainbowはPythonで記述されたアプリケーションでGitHubからダウンロード、インストール出来ます。

端末(Terminal)を開いて、gitコマンドでインストールするのが一番簡単。

$ git clone git://github.com/nicoulaj/rainbow.git
$ cd rainbow
$ sudo python setup.py install

gitが無いよ、という人はプロジェクト・ホームからブラウザを使ってzipファイルをダウンロード・解凍してからsetup.pyしましょう。

rainbow_01

そのまま、端末から$ rainbow --version と入力してバージョン情報が出力されたら準備完了。

$ rainbow --version
rainbow 2.5.0


Rainbow の使い方


Rainbowの書式は次の通り。

$ rainbow [カラリゼーション・オプション] -- 実行コマンド

実行コマンドは何時も貴方がLinux/Mac OSで愛用しているコマンドです。Rainbowのカラリゼーション・オプションは表1のようになります。

Color Foreground Background Toggle
RED -r PATTERN
( --red=PATTERN )
-R PATTERN
(--bred=PATTERN )
--start-red=PATTERN
(--reset-color=PATTERNで終端)
GREEN -g PATTERN
(--green=PATTERN)
-G PATTERN
(--bgreen=PATTERN)
--start-red=PATTERN
(--reset-color=PATTERNで終端)
YELLOW -y PATTERN
(--yellow=PATTERN)
-Y PATTERN
(--byellow=PATTERN)
--start-red=PATTERN
(--reset-color=PATTERNで終端)
BLUE -b PATTERN
(--blue=PATTERN)
-B PATTERN
(--bblue=PATTERN)
--start-red=PATTERN
(--reset-color=PATTERNで終端)
MAGENTA -m PATTERN
(--magenta=PATTERN)
-M PATTERN
(--bmagenta=PATTERN)
--start-red=PATTERN
(--reset-color=PATTERNで終端)
CYAN -c PATTERN
(--cyan=PATTERN)
-C PATTERN
(--bcyan=PATTERN)
--start-red=PATTERN
(--reset-color=PATTERNで終端)
表1.カラリゼーション・オプション

PATTERNは正規表現(多分、Pythonベース?)ですが、既存のサンプルを見て真似すれば難しくは無いですよ。

実はRainbowではテキスト色以外にも濃淡、隠すなどの表現も可能です。こちらのオプションは次の通り。

Other Option Toggle
BOLD(太字) --bold=PATTERN --start-bold=PATTERN
(--reset-intensity=PATTERNで終端)
FAINT(淡色) --faint=PATTERN --start-faint=PATTERN
(--reset-intensity=PATTERNで終端)
下線 --underline=PATTERN -
下線(2重) --underline-double=PATTERN -
隠す --hide=PATTERN -
表2.その他テキスト表現オプション

Rainbowはこれらの条件にマッチしたテキストをエスケープシーケンス(制御文字)を使って制御してくれるという訳なんです。

じゃあ、早速使ってみましょうか。僕はUbuntuですが、Macの方でも確認出来るように ps コマンドを次のようなオプションで実行してみます。

$ rainbow --faint='root.*' -- ps au

するとどうでしょう、何時もと違ってrootユーザのプロセスだけは淡い色で表示されるはずです。

rainbow_mac_top

続いて、ping コマンドをrainbow経由で実行してみましょう。

$ rainbow ping 8.8.8.8

すると、色がついて何時もよりも見やすくなるはずです。

rainbow_mac_ping

あれ、オプション指定無いのに何で?と思うかもしれません。これはrainbowのデフォルト・コンフィグが /usr/share/rainbow/configs/ に保存されていて、ここにあるものは自動で適用されるからなんです。

$ ls /usr/share/rainbow/configs/
df.cfg    host.cfg              jboss.cfg   mvn2.cfg  tomcat.cfg
diff.cfg  ifconfig.cfg          jonas.cfg   mvn3.cfg  top.cfg
env.cfg   java-stack-trace.cfg  md5sum.cfg  ping.cfg  traceroute.cfg

但し、ここにあるコンフィグはLinuxをターゲットにしたオプション設定になっているものが多く、Mac OSでは動かない場合もあります。例えば、topはUbuntuではOKですが、MacではNG(参考にはなるので一度目を通してみましょう)。

rainbow_02


さあ、具体的な使い方の話を続けます。次のコマンドではUbuntuのハードウェアに関するログを監視し、もし tail の標準出力に error というテキストが含まれていた場合には背景色を赤色でカラリゼーションしてくれます。

$ rainbow -R 'error' -- tail -f /var/log/dmesg

ほらね。

rainbow_03

慣れてきて複雑なオプションを使うようになったら設定ファイルとして保存しておきましょう。こちらは僕が作ってみたISC-DHCP-SERVERのログをカラリゼーションするrainbow設定ファイル。

[filters]
yellow: DHCPACK\s.*
bred: DHCPNACK\s.*
green: DHCPOFFER\s.*
faint: (DHCPDISCOVER|DHCPREQUEST)\s*.*

この設定には、DHCPACK、DHCPOFFERを比較的見やすいテキスト色で、DHCPNACKは重大な問題になる可能性があるので最も目立つように背景色を赤で、DHCPDISCOVER、DHCPREQUESTは淡い色でその他のメッセージの邪魔にならないようにする、という意図があります。

$ rainbow -f /path/to/dhcpd.cfg -- tail -f /var/log/dhcpd.log

こうすれば、1秒間に100行以上出力されるハイスピードなメッセージを見ていても正常・異常の判断が早い段階で・簡単に出来るようになるのです!

rainbow_04


それでは、また今度。



Posted by netbuffalo at 20:00│Comments(0)TrackBack(0)Linux | ユーティリティ


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4416042

コメントする

名前
URL
 
  絵文字