filtというツールを作りました
これはなに
まずは以下のスクリーンキャストをご覧ください
tail -F /path/to/access.log のようなログの流れを止めてはgrepをして、止めてはgrepのコマンドを変更してしています。
その間、実は裏では実際のストリームは止めていません。
つまり、ストリームのパイプ先に まずfiltを指定しておく ことで、ストリーム自体は止めずに、パイプ先のコマンドを 後で何度でも 変更できます。
grepやsedやawkが下手なので何度も試行したい
私はgrepやsedやawkなどのコマンドを一発で指定できるほど練度が高くないので、コマンドを組み立てるために何度も Ctrl+C
でキャンセルしては再実行の繰り返しをしていました。
最近は stern や Harvest などでKubernetesのPodのログを流すことをもあるのですが、ログが流れ出すまでちょっと時間がかかります。それに対して毎回キャンセルして再度コマンド組み直しというのは結構ストレスです。
filt
を使ってこの試行錯誤の敷居を下げることで、手早くコマンドを組み立てられるし、カジュアルにコマンドを組み立て直すこともできます。
そして、「まずはログを流しておく」「いろいろフィルタしてログをみる」というログを見る良い習慣にもつながると考えました。
使い方
MacでのインストールはHomebrewが利用可能です。
$ brew install k1LoW/tap/filt
filt
コマンドが使えるようになったら、あとは、tail -F などのストリームにパイプでつなげるだけです。
$ tail -F /var/log/nginx/access.log | filt
上記のように直接パイプで filt
を指定するのがオススメです。
流れているログに対して「grepでフィルタリングしたいな」と思ったら Enter
か Ctrl+C
を押します。すると、ログの流れが止まりプロンプトが出て入力待ち状態にになります。
そのプロンプトに grep -v GET
などのコマンドを入れて Enter
を押すと、今度は tail -F /var/log/nginx/access.log | grep -v GET
でフィルタリングされたログをが流れます。
もう一度フィルタするコマンド入れ替えたいときは、またEnter
か Ctrl+C
を押すことでログの流れが止まりプロンプトが出てきます。
これの繰り返しです。
tail -F
なストリーム自体を終了したいときはプロンプトが出ているときに exit
と入力して Enter
を押すか、 Ctrl+C
を押してください。
filtを作ってから
私が「まずはログを流しておく」ようになりました。
「 Ctrl+C
を押したらまた最初からログが流れてくるのを待たないといけないのか」というような心理的な障壁もないので、カジュアルにコマンドを組み立てなおして、「今欲しい情報だけが流す」ようになりました(それまでは目で一生懸命眺めることがあった)。
以前作ったevryなども指定できます。
結構、開発体験が変わるのでおすすめです。是非使ってみてください。