NagiosでEC2上のLinuxのログ監視(2)
はじめに
前回の続き。やりたい事は、EC2上のLinuxサーバーのApacheログをNagiosで監視して、エラーが発生したらアラートメールを送信。
※このエントリーの続き:第3回
とりあえずローカルのログから
本当にやりたい事はNagiosが動いているのとは別のサーバーのログを監視することなんだけど、その前にローカル(Nagiosが動いているサーバー)のログを監視する設定から。
ツッコミ大歓迎
今回初めてNagiosを触っているので、何かおかしなところはご指摘頂ければ・・・
必要なパッケージをインストール
[root@local ~]# yum install nagios [root@local ~]# yum install nagios-plugins-nrpe [root@local ~]# yum install nagios-plugins-ping
Nagiosの設定ファイルを理解する
Nagiosは設定が複雑になりがちっぽいので、複数のファイルに分けるのが流儀らしい。
でも、Nagiosの設定を解説している色んなページの設定ファイルの構成例と、Amazon LinuxのRPMで入れた場合のデフォルト設定ファイルの構成が結構違うので、初心者には困る。
とりあえず、自分なりの理解で書いていく。
「コマンド」の定義
/etc/nagios/objects の下に色々ファイルがあるが、まずは commands.cfg から。これは、Nagiosが監視を実行する際に起動するコマンドの定義。以下のようなデフォルトの監視コマンドが沢山定義されているけど、それらの設定はcheck_ping を除いて全てコメントアウト(あるいはさっぱり削除)する。
define command{ command_name check_local_disk command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ }
上の例の設定は、「check_local_disk」 という名前の「コマンド(≠Linuxのコマンド)」を定義していて、そのコマンドはマシン上にある $USER1$/check_disk という名前の(Linuxの)コマンドを、3つの引数付きで実行する。
$USER1 は、Amazon Linuxの場合 /usr/lib/nagios/plugins/ になる。$ARG1$ 〜 $ARG3$ は、次項で説明する「サービス」定義のところで指定される。
「サービス」の定義
次に /etc/nagios/objects/localhost.cfg を開く。こちらはサービスの監視に関する定義などで、前項で説明した「コマンド」をどのような引数でどのようなタイミングで呼び出すか等を設定するもの。
define service{ use local-service ; Name of service template to use host_name localhost service_description Root Partition check_command check_local_disk!20%!10%!/ }
上の例だと、先程 check_local_disk というNagiosの「コマンド」を、20%, 10%, / という3つの引数を付けて実行する。また、「use local-service」というのは、「local-service」という「サービス」定義を継承するという意味。こうすることで、色んなサービスで共通で使われる設定をテンプレート的にまとめておくことが出来る。
local-service は /etc/nagios/objects/templates.cfg 内に、以下のように定義されている。local-serviceは更にgeneric-serviceを参照しているけど、まぁ詳細は割愛。
define service{ name local-service ; The name of this service template use generic-service ; Inherit default values from the generic-service definition max_check_attempts 4 ; Re-check the service up to 4 times in order to determine its final (hard) state normal_check_interval 5 ; Check the service every 5 minutes under normal conditions retry_check_interval 1 ; Re-check the service every minute until a hard state can be determined register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }
check_local_disk の話に戻ると、「コマンド」定義の所で以下のような記述があるので、
$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
実際には以下のLinuxコマンドが実行される。
/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
「連絡先」の定義
/etc/nagios/objects/contacts.cfg にアラートが発生した時の連絡先が記述できる。大きい組織向けにグループ分けとかできるけど、とりあえずは自分1人にメールが来ればいいので、メアドを自分のものに変更すればOK。
check_logfiles の設定
前項まででNagiosの基本的な設定が理解できた、と思いたい・・・
ここでは、check_logfiles の設定を行なっていく。
コマンド定義
まずは答えから先に書くと、check_logfiles のコマンド定義は以下のようになる。
define command { command_name check_logfiles command_line $USER1$/check_logfiles --config $ARG1$ }
check_logfiles のRPMをインストールすると、 /usr/lib/nagios/plugins/check_logfiles がインストールされる。check_logfilesの実体はPerlスクリプトで、実行時に --config オプションで設定ファイルのパスを取る。
check_logfiles の設定ファイル
設定ファイルは以下のような内容で作成。このファイルをどこに置くかちょっと迷ったけど、とりあえず /etc/nagios/conf.d/localhost_log_phperror.cfg という名前で作成した。
設定ファイルの説明は特に不要かと。詳細はcheck_logfilesのサイトに書いてあるので、そちらをどうぞ。
$MACROS = { APACHELOGDIR => '/var/log/httpd' }; @searches = ({ tag => 'phperror', logfile => '$APACHELOGDIR$/error_log', criticalpatterns => [ '.*PHP Fatal error.*', '.*\[EMERG\].*', '.*\[ALERT\].*', '.*\[CRIT\].*' ] });
後は、このコマンドを直接シェルから実行してみて、特にエラーが出なければOK。
# /usr/lib/nagios/plugins/check_logfiles --config /etc/nagios/conf.d/localhost_log_phperror.cfg OK - no errors or warnings|phperror_lines=0 phperror_warnings=0 phperror_criticals=0 phperror_unknowns=0
サービス定義
サービス定義は、localhost.cfg に以下の通り記述した。
ログ監視に関する汎用的な設定項目は、logfile-check という名前の「サービス」として定義した。
check_logfilesのサイトによると、service descriptionと設定ファイルの名前を同一にしておくと良いらしい。
define service { name logfile-check ; service_description logfile-check use generic-service ; is_volatile 1 check_period 24x7 max_check_attempts 1 } define service { service_description localhost_log_phperror host_name localhost check_command check_logfiles!/etc/nagios/conf.d/$SERVICEDESC$.cfg use logfile-check }
起動、トラブルシューティング
大事な事
その前に大事な事を説明。
Nagiosの設定ファイルにエラーがあると、再起動や設定再読み込みの際に以下のようなエラーが出る。
[root@local ~]# /etc/init.d/nagios reload Running configuration check... CONFIG ERROR! Reload aborted. Check your Nagios configuration.
エスパーじゃない限りこのエラーメッセージでトラブルシューティングは不可能なんだけど、以下のコマンドを使うと詳細なメッセージが出る。
# nagios -v /etc/nagios/nagios.cfg
これを知っているのと知らないのとでは大違いだと思う。自分はこれを知らないで3時間くらい無駄に過ごしたので・・・
いざ起動
ここまでで設定は完了しているはずなので、Nagiosの設定ファイルを再読み込みする。
$ sudo /etc/init.d/nagios reload
自分の場合、以下のようなエラーが出た。
Feb 15 08:18:51 ip-xx-xx-xx-xx nagios: SERVICE ALERT: localhost;CritLogFile;UNKNOWN;HARD;1;Log check error: Log file /var/log/http/error.log does not exist!
Nagiosはnagiosユーザーの権限で動作するので、デフォルトだとApacheのログを読めない。と言う事で、権限変更。
# ls -ld /var/log/httpd/ drwx------ 2 root root 4096 Feb 12 03:49 /var/log/httpd/ # chmod 755 /var/log/httpd/
後は、人為的にエラーを発生させてみて、ちゃんとメールが来ればOKだけど、ここでは省略。
まとめ
今回はNagiosを使ってローカルのログファイルを監視するところまで。分かっちゃえばそんな難しくないけど、自分の場合理解するまでに結構時間がかかった。このブログエントリーが何かの役に立てば幸い。
次回は、リモートのログを監視する所を説明。
以下、作業ログ(自分用)
[root@local ~]# yum install nagios-plugins-ping Loaded plugins: fastestmirror, priorities, security, update-motd Loading mirror speeds from cached hostfile * amzn-main: packages.ap-northeast-1.amazonaws.com * amzn-updates: packages.ap-northeast-1.amazonaws.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nagios-plugins-ping.i686 0:1.4.15-2.5.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================== Installing: nagios-plugins-ping i686 1.4.15-2.5.amzn1 amzn-main 27 k Transaction Summary ============================================================================================================================================== Install 1 Package(s) Total download size: 27 k Installed size: 49 k Is this ok [y/N]: y Downloading Packages: nagios-plugins-ping-1.4.15-2.5.amzn1.i686.rpm | 27 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : nagios-plugins-ping-1.4.15-2.5.amzn1.i686 1/1 Installed: nagios-plugins-ping.i686 0:1.4.15-2.5.amzn1 Complete! [root@local nagios]# yum install nagios-plugins-nrpe Loaded plugins: fastestmirror, priorities, security, update-motd Loading mirror speeds from cached hostfile * amzn-main: packages.ap-northeast-1.amazonaws.com * amzn-updates: packages.ap-northeast-1.amazonaws.com amzn-main | 2.1 kB 00:00 amzn-updates | 2.3 kB 00:00 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nagios-plugins-nrpe.i686 0:2.12-16.2.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================== Installing: nagios-plugins-nrpe i686 2.12-16.2.amzn1 amzn-main 18 k Transaction Summary ============================================================================================================================================== Install 1 Package(s) Total download size: 18 k Installed size: 36 k Is this ok [y/N]: y Downloading Packages: nagios-plugins-nrpe-2.12-16.2.amzn1.i686.rpm | 18 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : nagios-plugins-nrpe-2.12-16.2.amzn1.i686 1/1 Installed: nagios-plugins-nrpe.i686 0:2.12-16.2.amzn1 Complete!