ハマログ

株式会社イーツー・インフォの社員ブログ

サーバのログ監視ツールSwatchでPHP Fatal error発生時にメール送信

こんにちは。S.Iです。

この度、本番リリース間近のシステムにリアルタイムログ監視システムを構築して、PHP Fatal error発生時にアラートメールを送信させました。
他案件でも利用することができる優秀なツールですので備忘録かねてご紹介させて頂きます。

Swatchとは


リアルタイムログ監視ツールです。指定した条件にマッチしたログを強調表示したり、コマンド実行などのさまざまなアクションを取ることが可能です。

1.まずはインストール
yumを利用すれば必要なPerlのライブラリも同時にインストールしてくれるので手間なしです。

[root@www ~]# sudo yum --enablerepo=epel -y install swatch
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Determining fastest mirrors
epel/metalink                                            | 5.6 kB     00:00
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                     | 3.7 kB     00:00
base/primary_db                                          | 4.6 MB     00:00
epel                                                     | 4.4 kB     00:00
epel/primary_db                                          | 6.3 MB     00:00
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  30 kB     00:00
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 1.5 MB     00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package swatch.noarch 0:3.2.3-7.el6 will be インストール
--> 依存性の処理をしています: perl(Date::Manip) のパッケージ: 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-Date-Manip.noarch 0:6.24-1.el6 will be インストール
--> 依存性の処理をしています: perl(YAML::Syck) のパッケージ: perl-Date-Manip-6.24-1.el6.noarch
--> トランザクションの確認を実行しています。
---> 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 インストール
---> Package perl-YAML-Syck.x86_64 0:1.07-4.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-Date-Manip         noarch         6.24-1.el6           base         1.4 M
 perl-YAML-Syck          x86_64         1.07-4.el6           base          75 k

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

総ダウンロード容量: 1.9 M
インストール済み容量: 11 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-Date-Manip-6.24-1.el6.noarch.rpm             | 1.4 MB     00:00
(5/6): perl-YAML-Syck-1.07-4.el6.x86_64.rpm              |  75 kB     00:00
(6/6): swatch-3.2.3-7.el6.noarch.rpm                     |  49 kB     00:00
--------------------------------------------------------------------------------
合計                                            4.1 MB/s | 1.9 MB     00:00
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6) <epel@fedoraproject.org>
 Package: epel-release-6-8.noarch (installed)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
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
  インストールしています  : perl-YAML-Syck-1.07-4.el6.x86_64                4/6
  インストールしています  : perl-Date-Manip-6.24-1.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-Date-Manip-6.24-1.el6.noarch               2/6
  Verifying               : perl-Bit-Vector-7.1-2.el6.x86_64                3/6
  Verifying               : perl-Date-Calc-6.3-2.el6.noarch                 4/6
  Verifying               : swatch-3.2.3-7.el6.noarch                       5/6
  Verifying               : perl-YAML-Syck-1.07-4.el6.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-Date-Manip.noarch 0:6.24-1.el6
  perl-YAML-Syck.x86_64 0:1.07-4.el6

完了しました!
[root@www ~]#

2.アクションファイルの設定

検知基準と検知後の対応を定義します。
swatchにはアクションファイルが必要で、このファイルに検知したい文字列と検知後の対応をルールに従って記載します。

今回は、Apache Webサーバのエラーログ”error_log”中に、”PHP Fatal error”という記述が追記されたら、”support@e2info.com”宛てにメールを送る設定をしています。
同じログが何度も出てくる場合に備えて間引き設定も行いました。

watchfor /PHP Fatal error/
	mail=support@e2info.com
	threshold track_by=$1, type=both, count=3, seconds=600

3.起動スクリプトを作成

サーバ起動時に自動的に起動させる為のスクリプトを作成します。

/etc/init.d/swatch

#!/bin/bash

# Source function library.
. /etc/rc.d/init.d/functions

start() {
    echo -n "Starting Swatch: "
    /usr/bin/swatch -c ~/.swatchrc.error_log -t /data/vhosts/logs/error_log &    
    return 0
}
stop() {
    killproc swatch
    return 0
}
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
esac

swatchはシンプルな仕組みで様々な機能があります。
パターン指定やアクション定義を行え、リアルタイムでシステムログを監視し、指定した文字列にマッチするログを検知すると指定したアクションを実行することが可能です。
指定時間の間、同じアクションの再実行を抑止するthrottle指定や、アクション実行を行うしきい値を指定するthreshold指定をすることも可能です。

3.自動起動設定
起動確認した後、自動起動設定します。
$ sudo /etc/init.d/swatch start
$ sudo chkconfig –add swatch
$ sudo chkconfig swatch on

4.メール送信

PHP Fatal errorの内容が送信されました。

Subject: Message from Swatch
From: root@www.e2info.com (root)
To: support@e2info.com
Date: 2015/01/26 16:03
> [Mon Jan 26 16:03:04 2015] [warn] [client 218.45.24.202] mod_fcgid: stderr: PHP Fatal error:  require(): Failed opening required '/data/vhosts/httpdocs/wordpress/wp-blog-header.phpvvvv' (include_path='.:') in /data/vhosts/httpdocs/wordpress/index.php on line 17
> 

サーバへの攻撃はポートスキャン・脆弱性の把握・総当たり攻撃・Dos攻撃と多岐に渡ります。攻撃を確実に防ぐ為にもログを分析して1つ1つ対策を取る必要があります(`・ω・́)ゝ

logPHP Fatal errorSwatchログ監視

  S.I   2015年2月3日


関連記事

PHPで良さげなREPLを探す。

開発してたり調べ物したりしてると簡単なコードを試してみたくなりたくなる時がありま…

実行可能jar の プロパティファイルを外部に置く

背景 実行可能jarの設定などを記述したプロパティファイルを 開発時と本番時で分…

Let’s EncryptのCertbotを アップデートする(ACMEv1の無効化対応)

Let’s Encryptからメールがきました。ACMEv1というプ…


← 前の投稿

次の投稿 →