44242


ログ監視コマンドに「tail -F」を使用しており、これを「less」へ移行できないか考えております。

現在は、ログファイルがローテートしても完全にエラーを監視したいため、このようにsh化しております。

[code]

    tail -F log.log |grep 'Error\|ERROR\|エラー\|異常'
    
[/code]

また、エラーが多発した際はtmuxの検索機能を利用しているので、検索も使いたいです。

これらの機能をlessへ落とし込み、最終的にsh化を目指すと以下の実現可能な問題と、そうではない問題が挙げられると思います。

**実現可能**

  1. 「tail -F 」でlogファイルを流すことができる
  2. 検索機能はlessにあるのでtmuxに依存する必要はない
  3. 「tail -F 」は「less --follow-name」でローテートに対応できる
  4. 「|grep 'Error\|ERROR\|エラー\|異常'」のような機能は「&」を入力したらできそう？？

**問題点**

  1. 「|grep 'Error\|ERROR\|エラー\|異常'」ができたとしても、lessを起動してから叩かなければならない？
  2. 最終的にsh化することができない？

「tail -F|grep」の運用でも良いのですが、最近は「less」の方が良いと聞いたので、実現可能かどうか教えていただいたいです。


CC BY-SA 4.0
2018-05-25T02:05:30.403
44236
2018-05-25T07:33:52.713
2018-05-25T02:43:03.707
19110
28656
question
linux
tail -F & grepをlessへ移行できるか


grep に `--line-buffred` オプションをつけてフィルタした結果を `less` で表示してはどうでしょう。

`tail -F log.log | egrep --line-buffered -e 'Error|ERROR|エラー|異常' | less`


CC BY-SA 4.0
2018-05-25T03:13:39.947
44242
2018-05-25T03:13:39.947
5008
44236
answer


コマンドの追加インストールは必要ですが、代替案を紹介しておきます。

* * *

**multitail**
というコマンドがあり、本来の使い方としては「複数のファイルに対して同時に`tail`出来る」のがウリですが、もちろん単一のファイルに対しても実行可能です。

<https://www.vanheusden.com/multitail/>

その他の特徴として、正規表現を使ったフィルタリングやハイライトも可能です。

[code]

    $ multitail --retry -e "error|Error" -f tail.log
    
[/code]

オプションについては`--retry`が`tail -F`相当、`-e "パターン"`で正規表現にマッチした行のみ表示されます。

コマンドのインストールはソースコードから行うか、メジャーなディストリビューションであればパッケージが用意されている場合もあるようです(CentOSならepel経由)。

* * *

なお、コメント欄で環境再構築時の懸念をされていますが、`tail`や`grep`をシステムに入れないのは個人的にあり得ないと思います。


CC BY-SA 4.0
2018-05-25T07:33:52.713
44252
2018-05-25T07:33:52.713
3060
44236
answer