エラーメッセージを表示するすべての.logを単一のログにコンパイルします。

エラーメッセージを表示するすべての.logを単一のログにコンパイルします。

/var/opt/log_loc1、/var/opt/log_loc2、/var/opt/log_loc3のさまざまなcronジョブから生成された多くのログがあります。各ログを表示するのではなく、エラーメッセージを含むすべてのログで新しいログファイルを入力するようにcronジョブをスケジュールする方法はありますか?

デフォルトでは、「all_logs_%Y_%m_%d」という名前の新しいログファイルをすべてのログ名とエラーで埋めたいと思います。毎日新しいall_logs_%Y_%m_%dがあります。

例:これは/var/opt/log_loc1にある私のログファイルのリストです。

  1. InsertSales_2019_08_19.log
  2. PurgeHistory_2019_08_19.log
  3. 11_2019_08_19.logのインポート
  4. ImportSales_2019_08_19.log
  5. 22_2019_08_20.logのインポート
  6. 33_2019_08_20.logのインポート
  7. InsertSales_2019_08_20.log
  8. PurgeHistory_2019_08_20.log
  9. 11_2019_08_20.logのインポート
  10. ImportSales_2019_08_20.log
  11. 22_2019_08_21.logのインポート
  12. 33_2019_08_21.logのインポート
  13. InsertSales_2019_08_21.log
  14. PurgeHistory_2019_08_21.log

*質問が不完全な場合はお詫び申し上げます。

答え1

どうですかfind? 、私が考えることができる最も簡単な方法は、これを使用することです。多分少し粗雑になるかもしれませんが、作業を完了する必要があります。

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

すべてのログファイル(すべての日付)のみをフィルタリングするのか、今日からのみフィルタリングするのかわかりません。日付をフィルタリングする必要がある場合は、オプションを使用するか、-mtimeフィルタリングオプションのみfind「トリック」を使用できます(-name例:昨日)。ログ

find /var/opt/ -type f -name "*_`date --date yesterday '+%Y_%m_%d'`.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

これが役に立つかどうかはわかりません...別の不明な点は、ログファイルにどのような構文がありますか?アルファベット順や数字順で検索できないため、結局find汚れたファイルになります。一般的に(そして教義でなければならない)、ログは%Y%m%d_%H:%Mまたは同様のもので始まります。この場合、次のようにsort出力できます。find

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} \; sort -no total.log

この方法を試してみました/var/logが、効果があるようですが、前述したようにこれは粗雑な方法です。

お役に立てば幸いです。

find、およびページでsort使用したオプションの詳細を確認できます。grepman

関連情報