それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ログをgrep してリアルタイム確認する確実な方法(tailf/tail -f と組み合わせ

tailf の結果をgrep してxargs したい場合

grep するだけなら問題ない。これは期待どおりに動く

tail -f   a.log  | grep name

grep が pipeの間に入ると厄介だ

tail -f a.log | grep name | grep type

この場合は正しく動作しない、中間に挟まったgrepがIOをバッファリングしてしまうので、最後のgrepまで即時にログが届かない

grep した結果をさらにパイプをしたいときにあれれ?となる。

ライン単位でバッファリングするようにする。

--line-buffered

コレをつけてバッファリングを行ごとにする。ただしこれはgrepそのもののパフォーマンスを劣化させるらしい(IO待ちのことでしょうね・・・何をどうして劣化するのかman には書いてなかったので気にしないことにしても良いような気が)

grep がバッファリングしてしまうので、確実に即時に反映されない。とくに コマンドの の間にgrep を挟み込みするときに厄介になる。

とくにtailf のような blocking io で ログが到着するまで、ブロックされるようなコマンドには特に威力を発揮する。

BSD/Linuxどちらも問題なく使えるようだ。

ログを監視して Slackに投げる方法で使いました。 →

http://takuya-1st.hatenablog.jp/entry/2017/05/11/073000

参考資料

リアルタイムに「tail -f」をgrepする方法 - Qiita