サーバのログ監視ツール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つ対策を取る必要があります(`・ω・́)ゝ