サーバーのログディレクトリ、/var/log/以下には、OSや様々なアプリのログが書き込まれます。
その情報の中には、脆弱性の対応のヒントなど、たくさんの情報が隠れています。
今の時代、Elasticsearch など、分析して、予測する賢いツールがたくさんあります。
今回は、昔からある、「LogWatch」をインストールします。
LogWatchインストール
# yum install logwatch ============================================================================================================================= Package Arch Version Repository Size ============================================================================================================================= Installing: logwatch noarch 7.4.0-35.20130522svn140.el7_5 base 403 k Installing for dependencies: perl-Date-Manip noarch 6.41-2.el7 base 1.2 M perl-Sys-CPU x86_64 0.54-4.el7 base 14 k perl-Sys-MemInfo x86_64 0.91-7.el7 base 15 k Transaction Summary =============================================================================================================================
LogWatch 7.4 が入りました。
LogWatch設定
/usr/share/logwatch/default.conf/logwatch.conf
のファイルが基本であり、
この中身を変更するということではなく
/etc/logwatch/conf/logwatch.conf
に設定変更したい情報を記入します。
基本情報が上書きされます。
# vi /etc/logwatch/conf/logwatch.conf MailTo = (送付先メールアドレス) Detail = Low
Lowの他に、Mid、High
もしくは、0~10までの数字を指定します。
High(もしくは、数字が大きい方)が、「詳しく」、解析してくれます。
LogWatchテスト
# logwatch --output mail
で、テスト的にメールが送られてきます。
--------------------- clam-update Begin ------------------------ No updates detected in the log for the freshclam daemon (the ClamAV update process). If the freshclam daemon is not running, you may need to restart it. Other options: A. If you no longer wish to run freshclam, deleting the log file (default is freshclam.log) will suppress this error message.
ログの中に上記のようなメッセージが入ってきました。
「Clam-AV」(無料ウィルスチェックソフト)のログを調べたが、アップデートされていないみたいだよ。どうする?
と・・・
「A」は、「freshclam.log」を削除すれば、もう、メッセージは、出ない・・・と・・・
つまり、Clam-AVはは、使わない・・・。ということ・・・
実際に、一時期、テストしていましたが、このLinuxでは、Clamを動かしていません。
# cd /var/log/clamav # rm freshclam.log rm: remove regular file ‘freshclam.log’? y
と、ログを削除します。
LogWatchの趣旨
LogWatchは、1日に1回、「前の日」のログをチェック(解析)してくれます。
かつては、1時間に1回、リアルタイム的なログをチェックしていました。
「怪しい行(もしくは、普段見ない行)」を知らせてくれるものでした。
1時間毎にチェックして、1時間の間に、記録されたログをチェックしてくれます。
1時間以上前にチェックしたものは、省いてくれました。
今のバージョンの、LogWatchは、前の日のデータをチェック(解析)するが、「デフォルト」のようです。
今の時代、ログではないですが、死活監視などは、
定番の
Zabbix
AWSだと、Amazon CloudWatch、
Mackerel(マカレル)
などのツールを使ってやるのが、いいかと思います。
LogWatch、実際に役に立ったのは・・・・
実際に役だったのは、オンプレの時代だと、
ディスク故障
ですね。焦りますね・・・
クラウド時代になり、この「焦り」は少なくなりました・・・いい、時代になりましたw
今の時代でも、MySQLが落ちた情報やDosアタックの情報などが有用でしょうか・・・
一つのツールだけに頼らず、様々なツールを組み合わせるのもいいかと思います。
logwatchが「うるさい」という方・・・ (2020/08/26追記)
logwatchを運用していると、「**Unmatched Entries**」
というところに、たくさんの情報が出てくる事があります。
この情報、「うるさい」「うざい」「多い」など、感じられるかと思います。
logwatchは、「普段とは、違う情報を知らせてくれる」
という趣旨があるかと思います。
「**Unmatched Entries**」の中で、「これは、通常運転の情報だよ」
というのを「省く」(除外する)事ができます。
/etc/logwatch/conf/ignore.conf
に、正規表現を使って書きます。
個人的に運用しているメールサーバーでは、dovecotのログが出てきます。
これを無視する場合
dovecot: imap.*: Logged out dovecot: lda.*sieve:.*stored mail into mailbox.*INBOX dovecot: lda.*sieve:.*stored mail into mailbox.*Junk
というように書きます。「.*」は、「改行以外にマッチ」です。
テストは、
# grep 'dovecot: imap.*: Logged out' /var/log/maillog
という感じで、チェックします。
この出力が、logwatchで、出力される、「うざい」情報と一致すれば、次回の出力からは、除外されます。
ログがチェックされない!(2020/08/30追記)
logwatchでは、初期設定のままであれば、「昨日」のログ、1日分をまとめて送ってくれます。
しかし、「昨日のDovecot関係のログが集計されていない!」
という事があります。
これは、「集計対象のファイル」を、「今のファイル」にしているためです。
「Dovecot」は、通常、「/var/log/maillog」に書き出されます。
logwatchは、この「/var/log/maillog」をチェックします。
しかし、「logrotate」の機能により、ある時点で、「/var/log/maillog」のファイルが、
「/var/log/maillog-YYYYMMDD」というファイルに置き換わります。
そして、新たな「/var/log/maillog」が生成され、ログが「/var/log/maillog」に書き込まれていきます。
logwatchの機能で、
「–archives」(コマンドライン)
「Archives」(logwatch.confに書き込む場合)
というオプションがあり、「/var/log/maillog」だけではなく、「/var/log/maillog-YYYYMMDD」もチェックしてくれます。
「ログがチェックされない!」といった場合、このオプションをつけてみましょう。
サーバー負荷が、多少は多くなるので、コマンドラインからチェックをしたほうがいいのかもしれません。
指定した日時をチェックしたい(2020/08/30追記)
logwatchの初期設定では、リポートは、1日1回です。
もっと、短い間隔でチェックしたい場合は・・・
「–range」オプションを使います。
--range today --range yesterday --range '4 hours ago for that hour' --range '-3 days' --range 'since 2 hours ago for those hours' --range 'between -10 days and -2 days' --range 'Apr 15, 2005' --range 'first Monday in May' --range 'between 4/23/2005 and 4/30/2005' --range '2005/05/03 10:24:17 for that second'
というオプションがあります。
初期設定では、「yesterday」です。
--range '4 hours ago for that hour'
を設定すると、4時間前からの1時間。
9:30に実行すると、4時間前の5時の0分から1時間のログをチェック。
となります。
--range 'since 2 hours ago for those hours'
上記では、2時間前の0分から、今まで。
9:30に実行すると、7:00から今まで。
という指定ができます。
あるサービスだけ、短時間の間隔(リアルタイムな感じ)でチェックしたい(2020/08/30追記)
Kernelのメッセージで、1時間毎にチェックしたい。
といった場合、
logwatch --service Kernel --range '1 hours ago for that hour' --archives
と「 –service Kernel」と、サービス名をします。
通常のlogwatchは、今まで通り、1日1回で、サーバーに対して重要な部分として、Kernelを1時間毎にチェック
という要望の場合、
crontabで、
そして、
1 * * * * /usr/sbin/logwatch --service Kernel --output mail --range 'since 1 hours ago for those hours' --archives
と設定すると、いいのかと思います。