Nagiosを使用してネットワークを監視し、大きな成功を収めています。ただし、重大なアプリケーションエラーのsyslogがあり、check_logを設定している間、デバイスを監視するのと同じように機能しないようです。
問題は次のとおりです。
Nagiosは間違ったツールですか、それともサービス監視を正しくセットアップしていないだけですか?
ここに私のエントリーがあります
# log file
define command{
command_name check_log
command_line $USER1$/check_log -F /var/log/applications/appcrit.log -O /tmp/appcrit.log -q ?
}
# Define the log monitering service
define service{
name logfile-check ;
use generic-service ;
check_period 24x7 ;
max_check_attempts 1 ;
normal_check_interval 5 ;
retry_check_interval 1 ;
contact_groups admins ;
notification_options w,u,c,r ;
notification_period 24x7 ;
register 0 ;
}
define service{
use logfile-check
Host_name localhost
service_description CritLogFile
check_command check_log
}
目標を達成するには多くの方法があるので、Consolから入手できるNiceプラグインもあります。 https://labs.consol.de/lang/en/nagios/check_logfiles/
それを使用するには、cfgファイルが必要です。これはOracleデータベースの例です
@searches = ({
tag => 'oraalerts',
options => 'sticky=28800',
logfile => '/u01/app/Oracle/diag/rdbms/davmdkp/DAVMDKP1/trace/alert_DAVMDKP1.log',
criticalpatterns => [
'ORA\-0*204[^\d]', # error in reading control file
'ORA\-0*206[^\d]', # error in writing control file
'ORA\-0*210[^\d]', # cannot open control file
'ORA\-0*257[^\d]', # archiver is stuck
'ORA\-0*333[^\d]', # redo log read error
'ORA\-0*345[^\d]', # redo log write error
'ORA\-0*4[4-7][0-9][^\d]',# ORA-0440 - ORA-0485 background process failure
'ORA\-0*48[0-5][^\d]',
'ORA\-0*6[0-3][0-9][^\d]',# ORA-6000 - ORA-0639 internal errors
'ORA\-0*1114[^\d]', # datafile I/O write error
'ORA\-0*1115[^\d]', # datafile I/O read error
'ORA\-0*1116[^\d]', # cannot open datafile
'ORA\-0*1118[^\d]', # cannot add a data file
'ORA\-0*1122[^\d]', # database file 16 failed verification check
'ORA\-0*1171[^\d]', # datafile 16 going offline due to error advancing checkpoint
'ORA\-0*1201[^\d]', # file 16 header failed to write correctly
'ORA\-0*1208[^\d]', # data file is an old version - not accessing current version
'ORA\-0*1578[^\d]', # data block corruption
'ORA\-0*1135[^\d]', # file accessed for query is offline
'ORA\-0*1547[^\d]', # tablespace is full
'ORA\-0*1555[^\d]', # snapshot too old
'ORA\-0*1562[^\d]', # failed to extend rollback segment
'ORA\-0*162[89][^\d]', # ORA-1628 - ORA-1632 maximum extents exceeded
'ORA\-0*163[0-2][^\d]',
'ORA\-0*165[0-6][^\d]', # ORA-1650 - ORA-1656 tablespace is full
'ORA\-16014[^\d]', # log cannot be archived, no available destinations
'ORA\-16038[^\d]', # log cannot be archived
'ORA\-19502[^\d]', # write error on datafile
'ORA\-27063[^\d]', # number of bytes read/written is incorrect
'ORA\-0*4031[^\d]', # out of shared memory.
'No space left on device',
'Archival Error',
],
warningpatterns => [
'ORA\-0*3113[^\d]', # end of file on communication channel
'ORA\-0*6501[^\d]', # PL/SQL internal error
'ORA\-0*1140[^\d]', # follows WARNING: datafile #20 was not in online backup mode
'Archival stopped, error occurred. Will continue retrying',
]
});
Nagiosでログを監視する場合、通常、ログチェッカーは呼び出されるたびに新しく検出されたエラーメッセージに対してのみ警告を返します(したがって、以降の実行でそれらを無視することを知るために何らかの状態を保持する必要があります)。したがって、私は通常設定します:
max_check_attempts 1
is_volatile 1
これにより、Nagiosはアラートをすぐに送信しますが、一度だけ送信してから、通常に戻ります。
私のお気に入りのログチェッカーは logwarn ですが、好きな既存のものを見つけられなかったので自分で書いたので、私は偏っています。 logwarnパッケージには、Nagiosプラグインが含まれています。
ログファイルをチェックするために使用できるNagiosプラグインがあります。これは check_logfiles と呼ばれ、ファイルの行の正規表現をスキャンするために使用されます。
次のリンクは、NagiosおよびOpsviewのcheck_logfiles
をインストールおよび構成する方法を示しています。 https://www.opsview.com/resources/nagios-alternative/blog/syslog-monitoring-nagios-opsview =
あなたの設定には、設定の誤りとして飛び出すものはありません。
仕様上、check_logはOKメッセージ、またはアラートをトリガーした最後のログエントリのみを表示します。複数のエントリを表示する必要がある場合は、プラグインを変更する必要があります。
しかし、私はあなたが回復を得ていないという事実を幾分奇妙に感じます。 check_logが機能する方法(現在のログを前のバージョンと比較することにより)、次のサービスチェックでリカバリを取得する必要があります。もちろん、最後のチェック以降に追加の一致するエントリがログに追加された場合を除きます。
別のサービスチェック(または複数)を強制すると、回復しますか?
また、私はこれを意地悪な方法で意図していませんが、実際に誤動作していることを確認してください。ログはチェックとチェックの間に追加の一致エントリを取得し、回復しませんか?小切手は「?」と一致していますこれはログの新しいものと一致します。他に何か(エラーではない)がログに追加されていて、誤って一致を引き起こしていませんか?
上記のいずれにも問題がない場合は、Nagiosを式から除外することで問題を絞り込むことをお勧めします。 check_logを手動で(コマンドラインから、しかしnagiosと同じユーザーとして)実行し、異なるoldlogで実行してみてください。これは次のようになります-
これが機能しない場合は、ログ、oldlog、およびcheck_logがどのようにチェックを行っているかに注目する必要があります。
動作する場合は、nagiosの設定に問題があることを示しています。
ログを効果的に監視する本物のNagiosプラグインがあると思います。
http://support.nagios.com/forum/viewtopic.php?f=6&t=8851&p=42088&hilit=unixautomation#p42088
そのページのNagiosプラグインのホームページは Nagios Log Monitor です
Your [ commands.cfg file ] will contain:
define command {
command_name NagiosLogMonitor
command_line $USER1$/NagiosLogMonitor $HOSTNAME$ $ARG1$ $ARG2$ $ARG3$ $ARG4$ '$ARG5$' '$ARG6$' $ARG7$ $ARG8$ $ARG9$ $ARG10$
}
OR
define command {
command_name NagiosLogMonitor
command_line $USER1$/NagiosLogMonitor $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$ '$ARG5$' '$ARG6$' $ARG7$ $ARG8$ $ARG9$ $ARG10$
}
Your [ services.cfg file ] will look similar to:
define service {
check_command NagiosLogMonitor!logrobot!autofig!/var/log/proteus.log!15!500.html!500 Internal Server Error!1!2!-foundn
max_check_attempts 1
service_description 500_ERRORS_LOGCHECK
Host_name sky.blat-01.net,sky.blat-02.net,sky.blat-03.net
use fifteen-minute-interval
}
Nagiosには、Nagios Core、XIなどと緊密に統合するソリューションがあります。
Nagios Log Server これは、インフラストラクチャ内の任意のシステム上の任意のログファイルに対するクエリに対してアラートを生成できます。