忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【CentOS6】ログ監視ツール

logwatch

logwatchは定期的にログのサマリーをメールで送ってくれるツールです。

導入することで、日々大量に吐かれるログから必要な情報だけをサマリーしてくれるため、ログの監視がぐっと楽になると思います。

インストール

$  yum search logwatch
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                                                       | 4.7 kB     00:00     
 * base: ftp.iij.ad.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.iij.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.iij.ad.jp
base                                                                                                                                                | 3.7 kB     00:00     
epel                                                                                                                                                | 4.3 kB     00:00     
epel/primary_db                                                                                                                                     | 5.8 MB     00:03     
extras                                                                                                                                              | 3.4 kB     00:00     
rpmforge                                                                                                                                            | 1.9 kB     00:00     
updates                                                                                                                                             | 3.4 kB     00:00     
========================================================================== N/S Matched: logwatch ==========================================================================
dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting
hostapd-logwatch.x86_64 : Logwatch scripts for hostapd
fwlogwatch.x86_64 : Firewall log analyzer, report generator and realtime response agent
logwatch.noarch : A log file analysis program

  Name and summary matches only, use "search all" for everything.
$ yum install -y log watch
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: mirrors.hustunique.com
 * extras: ftp.iij.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.iij.ad.jp
パッケージ log は利用できません。
パッケージ watch は利用できません。
エラー: 何もしません
$ yum install -y logwatch
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: mirrors.hustunique.com
 * extras: ftp.iij.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package logwatch.noarch 0:7.3.6-52.el6 will be インストール
--> 依存性の処理をしています: perl(strict) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: perl(POSIX) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: perl(Getopt::Long) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: perl(File::Temp) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: perl(Exporter) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: perl(Date::Manip) のパッケージ: logwatch-7.3.6-52.el6.noarch
--> 依存性の処理をしています: /usr/bin/perl のパッケージ: logwatch-7.3.6-52.el6.noarch
--> トランザクションの確認を実行しています。
---> Package perl.x86_64 4:5.10.1-141.el6_7.1 will be インストール
--> 依存性の処理をしています: perl-libs = 4:5.10.1-141.el6_7.1 のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
--> 依存性の処理をしています: perl-libs のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
--> 依存性の処理をしています: perl(version) のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
--> 依存性の処理をしています: perl(Pod::Simple) のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
--> 依存性の処理をしています: perl(Module::Pluggable) のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
--> 依存性の処理をしています: libperl.so()(64bit) のパッケージ: 4:perl-5.10.1-141.el6_7.1.x86_64
---> Package perl-Date-Manip.noarch 0:6.24-1.el6 will be インストール
--> 依存性の処理をしています: perl(YAML::Syck) のパッケージ: perl-Date-Manip-6.24-1.el6.noarch
--> トランザクションの確認を実行しています。
---> Package perl-Module-Pluggable.x86_64 1:3.90-141.el6_7.1 will be インストール
---> Package perl-Pod-Simple.x86_64 1:3.13-141.el6_7.1 will be インストール
--> 依存性の処理をしています: perl(Pod::Escapes) >= 1.04 のパッケージ: 1:perl-Pod-Simple-3.13-141.el6_7.1.x86_64
---> Package perl-YAML-Syck.x86_64 0:1.07-4.el6 will be インストール
---> Package perl-libs.x86_64 4:5.10.1-141.el6_7.1 will be インストール
---> Package perl-version.x86_64 3:0.77-141.el6_7.1 will be インストール
--> トランザクションの確認を実行しています。
---> Package perl-Pod-Escapes.x86_64 1:1.04-141.el6_7.1 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

===========================================================================================================================================================================
 パッケージ                                      アーキテクチャ                   バージョン                                       リポジトリー                       容量
===========================================================================================================================================================================
インストールしています:
 logwatch                                        noarch                           7.3.6-52.el6                                     base                              302 k
依存性関連でのインストールをします。:
 perl                                            x86_64                           4:5.10.1-141.el6_7.1                             updates                            10 M
 perl-Date-Manip                                 noarch                           6.24-1.el6                                       base                              1.4 M
 perl-Module-Pluggable                           x86_64                           1:3.90-141.el6_7.1                               updates                            40 k
 perl-Pod-Escapes                                x86_64                           1:1.04-141.el6_7.1                               updates                            33 k
 perl-Pod-Simple                                 x86_64                           1:3.13-141.el6_7.1                               updates                           213 k
 perl-YAML-Syck                                  x86_64                           1.07-4.el6                                       base                               75 k
 perl-libs                                       x86_64                           4:5.10.1-141.el6_7.1                             updates                           579 k
 perl-version                                    x86_64                           3:0.77-141.el6_7.1                               updates                            52 k

トランザクションの要約
===========================================================================================================================================================================
インストール         9 パッケージ

総ダウンロード容量: 13 M
インストール済み容量: 47 M
パッケージをダウンロードしています:
(1/9): logwatch-7.3.6-52.el6.noarch.rpm                                                                                                             | 302 kB     00:00     
(2/9): perl-5.10.1-141.el6_7.1.x86_64.rpm                                                                                                           |  10 MB     00:03     
(3/9): perl-Date-Manip-6.24-1.el6.noarch.rpm                                                                                                        | 1.4 MB     00:01     
(4/9): perl-Module-Pluggable-3.90-141.el6_7.1.x86_64.rpm                                                                                            |  40 kB     00:00     
(5/9): perl-Pod-Escapes-1.04-141.el6_7.1.x86_64.rpm                                                                                                 |  33 kB     00:00     
(6/9): perl-Pod-Simple-3.13-141.el6_7.1.x86_64.rpm                                                                                                  | 213 kB     00:00     
(7/9): perl-YAML-Syck-1.07-4.el6.x86_64.rpm                                                                                                         |  75 kB     00:00     
(8/9): perl-libs-5.10.1-141.el6_7.1.x86_64.rpm                                                                                                      | 579 kB     00:00     
(9/9): perl-version-0.77-141.el6_7.1.x86_64.rpm                                                                                                     |  52 kB     00:00     
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                       1.4 MB/s |  13 MB     00:09     
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : 1:perl-Pod-Escapes-1.04-141.el6_7.1.x86_64                                                                                                 1/9 
  インストールしています  : 1:perl-Module-Pluggable-3.90-141.el6_7.1.x86_64                                                                                            2/9 
  インストールしています  : 3:perl-version-0.77-141.el6_7.1.x86_64                                                                                                     3/9 
  インストールしています  : 4:perl-libs-5.10.1-141.el6_7.1.x86_64                                                                                                      4/9 
  インストールしています  : 1:perl-Pod-Simple-3.13-141.el6_7.1.x86_64                                                                                                  5/9 
  インストールしています  : 4:perl-5.10.1-141.el6_7.1.x86_64                                                                                                           6/9 
  インストールしています  : perl-YAML-Syck-1.07-4.el6.x86_64                                                                                                           7/9 
  インストールしています  : perl-Date-Manip-6.24-1.el6.noarch                                                                                                          8/9 
  インストールしています  : logwatch-7.3.6-52.el6.noarch                                                                                                               9/9 
  Verifying               : 1:perl-Pod-Simple-3.13-141.el6_7.1.x86_64                                                                                                  1/9 
  Verifying               : 1:perl-Pod-Escapes-1.04-141.el6_7.1.x86_64                                                                                                 2/9 
  Verifying               : perl-Date-Manip-6.24-1.el6.noarch                                                                                                          3/9 
  Verifying               : logwatch-7.3.6-52.el6.noarch                                                                                                               4/9 
  Verifying               : 1:perl-Module-Pluggable-3.90-141.el6_7.1.x86_64                                                                                            5/9 
  Verifying               : perl-YAML-Syck-1.07-4.el6.x86_64                                                                                                           6/9 
  Verifying               : 3:perl-version-0.77-141.el6_7.1.x86_64                                                                                                     7/9 
  Verifying               : 4:perl-libs-5.10.1-141.el6_7.1.x86_64                                                                                                      8/9 
  Verifying               : 4:perl-5.10.1-141.el6_7.1.x86_64                                                                                                           9/9 

インストール:
  logwatch.noarch 0:7.3.6-52.el6                                                                                                                                           

依存性関連をインストールしました:
  perl.x86_64 4:5.10.1-141.el6_7.1          perl-Date-Manip.noarch 0:6.24-1.el6 perl-Module-Pluggable.x86_64 1:3.90-141.el6_7.1 perl-Pod-Escapes.x86_64 1:1.04-141.el6_7.1
  perl-Pod-Simple.x86_64 1:3.13-141.el6_7.1 perl-YAML-Syck.x86_64 0:1.07-4.el6  perl-libs.x86_64 4:5.10.1-141.el6_7.1           perl-version.x86_64 3:0.77-141.el6_7.1    

完了しました!

設定

デフォルトの設定ファイルは

/usr/share/logwatch/default.conf/logwatch.conf

で、独自に設定を変えたい場合は以下ファイルを変更する。

/etc/logwatch/conf/logwatch.conf

ちなみに、デフォルトから変更したい項目だけ記述しておけば良いです。

自分の場合は以下を変えました。

# デフォルトだとrootだが、gmail宛に飛ばすように変更
MailTo = sample@gmail.com

# デフォルトのメールクライアントのsendmailからmailxに変更
mailer = "mailx -t"

基本的な運用はcronでの日次実行(logwatchインストール時に/etc/cron.daily/0logwatchが作成される)になる。

なお、テストなどのために即時実行したい場合はlogwatchコマンドを叩けばよい。

$ logwatch 
You have old files in your logwatch tmpdir (/var/cache/logwatch):
    logwatch.dbppTw6E
    logwatch.sAUaElla
The directories listed above were most likely created by a
logwatch run that failed to complete successfully.  If so, you
may delete these directories.

Ignoring header field "MIME-Version: 1.0"
Ignoring header field "Content-Transfer-Encoding: 7bit"
Ignoring header field "Content-Type: text/plain; charset="iso-8859-1""

そして、以下のようなサマリがメールで飛んでくる。

 ################### Logwatch 7.3.6 (05/19/07) #################### 
        Processing Initiated: Fri Feb 26 03:27:03 2016
        Date Range Processed: yesterday
                              ( 2016-Feb-25 )
                              Period is day.
      Detail Level of Output: 0
              Type of Output: unformatted
           Logfiles for Host: localhost.localdomain
  ################################################################## 
 
 --------------------- clam-update Begin ------------------------ 

 Last ClamAV update process started at Thu Feb 25 03:43:01 2016
 
 Last Status:
    main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
    Downloading daily-21407.cdiff [100%]
    Downloading daily-21408.cdiff [100%]
    Downloading daily-21409.cdiff [100%]
    Downloading daily-21410.cdiff [100%]
    daily.cld updated (version: 21410, sigs: 1854558, f-level: 63, builder: neo)
    bytecode.cvd is up to date (version: 271, sigs: 47, f-level: 63, builder: anvilleg)
    Database updated (4278830 signatures) from database.clamav.net (IP: 27.96.54.66)
 
 ---------------------- clam-update End ------------------------- 

 
 --------------------- pam_unix Begin ------------------------ 

 sshd:
    Authentication Failures:
       unknown (xxxxxxxxxxx.xxx.ftth.sample.com): 1 Time(s)
    Invalid Users:
       Unknown Account: 1 Time(s)
 
 su-l:
    Sessions Opened:
       hoge -> root: 5 Time(s)
 
 
 ---------------------- pam_unix End ------------------------- 

 
 --------------------- Postfix Begin ------------------------ 

    5.380M  Bytes accepted                         5,641,489
    8.114K  Bytes delivered                            8,309
 ========   ================================================
 
       22   Accepted                                 100.00%
 --------   ------------------------------------------------
       22   Total                                    100.00%
 ========   ================================================
 
        1   Removed from queue    
        3   Delivered             
       21   Deferred              
      310   Deferrals             
 
     1220   Connection failure (outbound) 
 
 
 
 ---------------------- Postfix End ------------------------- 

 
 --------------------- SSHD Begin ------------------------ 

 
 Illegal users from:
    XXX.XXX.XXX.XXX (xxxxxxxxxxx.xxx.ftth.sample.com): 1 time
 
 Users logging in through sshd:
    hoge:
       XXX.XXX.XXX.XXX (xxxxxxxxxxx.xxx.ftth.sample.com): 4 times
       XXX.XXX.XXX.XXX (xxxxxxxxxxx.xxx.ftth.sample.com): 1 time
 
 
 Received disconnect:
    11: disconnected by user : 5 Time(s)
 
 ---------------------- SSHD End ------------------------- 

 
 --------------------- yum Begin ------------------------ 

 
 Packages Installed:
    1:perl-Pod-Simple-3.13-141.el6_7.1.x86_64
    4:perl-libs-5.10.1-141.el6_7.1.x86_64
    perl-YAML-Syck-1.07-4.el6.x86_64
    1:perl-Module-Pluggable-3.90-141.el6_7.1.x86_64
    logwatch-7.3.6-52.el6.noarch
    1:perl-Pod-Escapes-1.04-141.el6_7.1.x86_64
    4:perl-5.10.1-141.el6_7.1.x86_64
    perl-Date-Manip-6.24-1.el6.noarch
    3:perl-version-0.77-141.el6_7.1.x86_64
 
 ---------------------- yum End ------------------------- 

 
 --------------------- Disk Space Begin ------------------------ 

 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/VolGroup-lv_root
                        50G  1.3G   46G   3% /
 /dev/sda1             477M   57M  395M  13% /boot
 /dev/mapper/VolGroup-lv_home
                       240G   60M  228G   1% /home
 
 
 ---------------------- Disk Space End ------------------------- 

 
 ###################### Logwatch End ######################### 

特に、Linuxのpam認証に関する「pam_unix」やssh認証に関する「SSHD」セキュリティに関する重要な情報なので、有用ですね。

参考

第29回 「logwatch によるログの収集」

Logwatchでサーバ監視レポート - エーエイチレフ linuxサーバー技術情報

swatch

任意のログをリアルタイムにチェックしたり、メッセージのパターンを検知してメールを投げたりできるツールです。

インストール

前提として、EPELリポジトリの登録が必要です。

【CentOS6】サードパーティリポジトリの追加 - 忘備録

yum install -y swatch
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
epel/metalink                                                                          | 5.1 kB     00:00     
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.iij.ad.jp
base                                                                                   | 3.7 kB     00:00     
epel                                                                                   | 4.3 kB     00:00     
extras                                                                                 | 3.4 kB     00:00     
rpmforge                                                                               | 1.9 kB     00:00     
updates                                                                                | 3.4 kB     00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package swatch.noarch 0:3.2.3-7.el6 will be インストール
--> 依存性の処理をしています: perl(Time::HiRes) のパッケージ: swatch-3.2.3-7.el6.noarch
--> 依存性の処理をしています: perl(Date::Parse) のパッケージ: swatch-3.2.3-7.el6.noarch
--> 依存性の処理をしています: perl(Date::Format) のパッケージ: swatch-3.2.3-7.el6.noarch
--> 依存性の処理をしています: perl(Date::Calc) のパッケージ: swatch-3.2.3-7.el6.noarch
--> トランザクションの確認を実行しています。
---> Package perl-Date-Calc.noarch 0:6.3-2.el6 will be インストール
--> 依存性の処理をしています: perl(Bit::Vector) >= 7.1 のパッケージ: perl-Date-Calc-6.3-2.el6.noarch
--> 依存性の処理をしています: perl(Carp::Clan) のパッケージ: perl-Date-Calc-6.3-2.el6.noarch
--> 依存性の処理をしています: perl(Bit::Vector) のパッケージ: perl-Date-Calc-6.3-2.el6.noarch
---> Package perl-Time-HiRes.x86_64 4:1.9721-141.el6_7.1 will be インストール
---> Package perl-TimeDate.noarch 1:1.16-13.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package perl-Bit-Vector.x86_64 0:7.1-2.el6 will be インストール
---> Package perl-Carp-Clan.noarch 0:6.03-2.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

==============================================================================================================
 パッケージ                  アーキテクチャ     バージョン                          リポジトリー         容量
==============================================================================================================
インストールしています:
 swatch                      noarch             3.2.3-7.el6                         epel                 49 k
依存性関連でのインストールをします。:
 perl-Bit-Vector             x86_64             7.1-2.el6                           base                169 k
 perl-Carp-Clan              noarch             6.03-2.el6                          base                 25 k
 perl-Date-Calc              noarch             6.3-2.el6                           base                210 k
 perl-Time-HiRes             x86_64             4:1.9721-141.el6_7.1                updates              49 k
 perl-TimeDate               noarch             1:1.16-13.el6                       base                 37 k

トランザクションの要約
==============================================================================================================
インストール         6 パッケージ

総ダウンロード容量: 539 k
インストール済み容量: 1.4 M
パッケージをダウンロードしています:
(1/6): perl-Bit-Vector-7.1-2.el6.x86_64.rpm                                            | 169 kB     00:00     
(2/6): perl-Carp-Clan-6.03-2.el6.noarch.rpm                                            |  25 kB     00:00     
(3/6): perl-Date-Calc-6.3-2.el6.noarch.rpm                                             | 210 kB     00:00     
(4/6): perl-Time-HiRes-1.9721-141.el6_7.1.x86_64.rpm                                   |  49 kB     00:00     
(5/6): perl-TimeDate-1.16-13.el6.noarch.rpm                                            |  37 kB     00:01     
(6/6): swatch-3.2.3-7.el6.noarch.rpm                                                   |  49 kB     00:00     
--------------------------------------------------------------------------------------------------------------
合計                                                                          144 kB/s | 539 kB     00:03     
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : perl-Carp-Clan-6.03-2.el6.noarch                                              1/6 
  インストールしています  : perl-Bit-Vector-7.1-2.el6.x86_64                                              2/6 
  インストールしています  : perl-Date-Calc-6.3-2.el6.noarch                                               3/6 
  インストールしています  : 4:perl-Time-HiRes-1.9721-141.el6_7.1.x86_64                                   4/6 
  インストールしています  : 1:perl-TimeDate-1.16-13.el6.noarch                                            5/6 
  インストールしています  : swatch-3.2.3-7.el6.noarch                                                     6/6 
  Verifying               : perl-Carp-Clan-6.03-2.el6.noarch                                              1/6 
  Verifying               : perl-Bit-Vector-7.1-2.el6.x86_64                                              2/6 
  Verifying               : perl-Date-Calc-6.3-2.el6.noarch                                               3/6 
  Verifying               : swatch-3.2.3-7.el6.noarch                                                     4/6 
  Verifying               : 1:perl-TimeDate-1.16-13.el6.noarch                                            5/6 
  Verifying               : 4:perl-Time-HiRes-1.9721-141.el6_7.1.x86_64                                   6/6 

インストール:
  swatch.noarch 0:3.2.3-7.el6                                                                                 

依存性関連をインストールしました:
  perl-Bit-Vector.x86_64 0:7.1-2.el6                perl-Carp-Clan.noarch 0:6.03-2.el6                        
  perl-Date-Calc.noarch 0:6.3-2.el6                 perl-Time-HiRes.x86_64 4:1.9721-141.el6_7.1               
  perl-TimeDate.noarch 1:1.16-13.el6               

完了しました!

デーモン起動スクリプト

毎回手動でswatchを起動するのは手間なので、起動スクリプトを作成します。

[2016.02.29] スクリプトに不具合があったので修正しました。詳しくはソースのコメントを参照

/etc/rc.d/init.d/swatch

#!/bin/sh
#
# swatch
#
# chkconfig: 2345 90 35
# description: swatch start/stop script
#
. /etc/rc.d/init.d/functions

#[ ! -d /var/log/swatch ] && mkdir -p /var/log/swatch

PATH=/bin:/sbin:/usr/bin:/usr/sbin

start() {
  ls /var/run/swatch_*.pid 1> /dev/null 2>&1
  if [ $? -ne 0 ]; then
    pno=0
    RET=0
    conflist=`ls /etc/swatch/conf/*.conf`
    if [ $? -ne 0 ]; then
        exit 1
    fi
    for conf in $conflist
    do
      log=`basename $conf | cut -d\. -f1`

      logPath=`find /var/log/ -type f -regex ".*/$log"`
      [ ! -n "$logPath" ] && logPath=`find /var/log/ -type f -regex ".*/$log.log"`

      if [ -n "$logPath" ]; then
        pno=`expr $pno + 1`
        # [2016.02.29] --script-dirオプションを追加しました。
        # この指定がないとスクリプト停止時に.swatch_script.*ファイルが削除されず、ホームディレクトリに溜まっていってしまいます。
        swatch -c $conf -t "$logPath" --daemon \
        --script-dir=/tmp/ \
        --pid-file /var/run/swatch_$pno.pid 1>> /var/log/swatch.log 2>& 1
        RET=$?
        [ $RET != 0 ] && return $RET
      else
        echo -n "error: not found log file"
        exit 1
      fi
    done

    if [ $pno -gt 0 ]; then
      echo
      [ $RET = 0 ] && touch /var/lock/subsys/swatch
    fi

    echo -n "Starting swatch"
    return $RET
  else
    echo -n "swatch already started"
  fi
}

stop() {
  ls /var/run/swatch_*.pid 1> /dev/null 2>&1
  if [ $? -eq 0 ]; then
    echo -n "Stopping swatch"
    for pid in /var/run/swatch_*.pid
    do
      kill $(cat $pid)
      rm -f $pid
    done
    echo
    rm -f /var/lock/subsys/swatch /tmp/.swatch_script.*
  else
    echo -n "swatch is not starting"
  fi
}

status() {
  ls /var/run/swatch_*.pid 1> /dev/null 2>&1
  if [ $? -eq 0 ]; then
    echo -n "swatch (pid"
    for pid in /var/run/swatch_*.pid
    do
      echo -n " `cat $pid`"
    done
    echo ") is running"
  else
    echo -n "swatch is stopped"
  fi
}

case "$1" in
  start)  start;;
  stop)    stop;;
  restart)stop && start;;
  status)  status;;
  *)      echo "Usage: swatch {start|stop|restart|status}" && exit 1;;
esac

exit $RET

スクリプトの概要は以下です。

  • /etc/swatch/conf/ 配下にある「*.conf」ファイルをswatchの-cオプションの引数にする
  • /var/log/{上記の設定ファイルの拡張子(.conf)を抜いたもの} をswatchの-tオプションの引数にする
  • /var/log/{上記の設定ファイルの拡張子(.conf)を抜いたもの}がない場合、{左記に.logを加えたもの} をswatchの-tオプションの引数にする
  • 「echo」アクションの出力先を /var/log/swatch.log にする

文だとイマイチ分からないので例を挙げると

/etc/swatch/conf/secure.conf と /etc/swatch/conf/yum.conf という設定ファイルがあった場合、

swatch -c secure.conf -t secure

swatch -c yum.conf -t yum.log

が実行されます。

実行と自動起動設定

とりあえず実行

$ service swatch start

んで、自動起動するスクリプトとして実行するには、

起動スクリプトとして登録して。。。

$ chkconfig --add swatch

OS起動時にスクリプトが起動するように設定しておきます。

$ chkconfig swatch on

確認

$ chkconfig | grep swatch
swatch          0:off  1:off  2:on   3:on   4:on   5:on   6:off

設定

swatchの設定ファイルは監視するログファイルごとに、以下ディレクトリに作る

/etc/swatch/conf/

/etc/swatch/conf/secure.conf

##login
watchfor   /su(pam_unix)|session opened for user root/i
        echo
        pipe "mail -s 'TELNET_Session_Opend_Log (root)' sample@gmail.com"

##ftp
watchfor   /ftp.*session opened/i
        echo
        pipe "mail -s 'FTP_Session_Opend_Log' sample@gmail.com"

##ssh
watchfor   /sshd.*session opened/i
        echo
        pipe "mail -s SSH_Session_Opend_Log sample@gmail.com"

swatchの設定ファイルの書式は以下です。

watchfor /パターン/
    アクション

設定されたパターンが監視対象のログファイルに出力されると、アクションが実行されます。

ちなみにパターンはPerl正規表現で「/パターン/i」と i をつけることで大文字・小文字を無視することができます。

アクションには以下のように、いくらか種類があります。

アクション 概要
echo 検索パターンにマッチした行を標準出力に渡す。
mail 検索パターンにマッチした行をメール通知する。
pipe 検索パターンにマッチした行をパイプを通して外部コマンドに渡す。
threshold 連続してマッチした行の表示を指定回数になるまで表示しないようにする。
throttle 連続してマッチした行の検出を一定時間抑止する。

mailというメールで通知するためのアクションが用意されているのですが、例で挙げているsecure.confのアクションはpipeを使っており、ログ出力をmailコマンドに渡しています。

なぜこんな面倒をしているかというと、mailアクションでは内部的にsendmailが利用されていて、sendmailだと都合が悪いため(理由は割愛)mailコマンドを利用するようにしています。

参考

サーバのログを監視するSwatchの導入方法と使い方を解説 | OXY NOTES

Swatchによるリアルタイムログ監視システムを構築する【前編】 | 情シスハック

Linuxexpert - Swatchパターン&ルール記述例-Tips/Swatchパターン&ルール記述例-PukiWiki

ドットコマンドと直接スクリプトを実行した時の違い - Webエンジニアの技術メモ 〜PHP、SQL、Linuxなど〜

/var/lock/subsys/について - さよならインターネット

[swatch: ログ監視] Debian Linux Server

。。。今回初めて起動スクリプトを独自に書いたんで、とても勉強になりました。

半分コピペですが