web-dev-qa-db-ja.com

Nagiosを使用してログファイルを監視する方法

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
}
23
Kenoyer130

目標を達成するには多くの方法があるので、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',
  ]
});
3
risker

Nagiosでログを監視する場合、通常、ログチェッカーは呼び出されるたびに新しく検出されたエラーメッセージに対してのみ警告を返します(したがって、以降の実行でそれらを無視することを知るために何らかの状態を保持する必要があります)。したがって、私は通常設定します:

max_check_attempts              1
is_volatile                     1

これにより、Nagiosはアラートをすぐに送信しますが、一度だけ送信してから、通常に戻ります。

私のお気に入りのログチェッカーは logwarn ですが、好きな既存のものを見つけられなかったので自分で書いたので、私は偏っています。 logwarnパッケージには、Nagiosプラグインが含まれています。

28
Archie

ログファイルをチェックするために使用できるNagiosプラグインがあります。これは check_logfiles と呼ばれ、ファイルの行の正規表現をスキャンするために使用されます。

次のリンクは、NagiosおよびOpsviewのcheck_logfilesをインストールおよび構成する方法を示しています。 https://www.opsview.com/resources/nagios-alternative/blog/syslog-monitoring-nagios-opsview =

4
ahmed

あなたの設定には、設定の誤りとして飛び出すものはありません。

仕様上、check_logはOKメッセージ、またはアラートをトリガーした最後のログエントリのみを表示します。複数のエントリを表示する必要がある場合は、プラグインを変更する必要があります。

しかし、私はあなたが回復を得ていないという事実を幾分奇妙に感じます。 check_logが機能する方法(現在のログを前のバージョンと比較することにより)、次のサービスチェックでリカバリを取得する必要があります。もちろん、最後のチェック以降に追加の一致するエントリがログに追加された場合を除きます。

別のサービスチェック(または複数)を強制すると、回復しますか?

また、私はこれを意地悪な方法で意図していませんが、実際に誤動作していることを確認してください。ログはチェックとチェックの間に追加の一致エントリを取得し、回復しませんか?小切手は「?」と一致していますこれはログの新しいものと一致します。他に何か(エラーではない)がログに追加されていて、誤って一致を引き起こしていませんか?

上記のいずれにも問題がない場合は、Nagiosを式から除外することで問題を絞り込むことをお勧めします。 check_logを手動で(コマンドラインから、しかしnagiosと同じユーザーとして)実行し、異なるoldlogで実行してみてください。これは次のようになります-

  1. 新しい「oldlog」でチェックを実行-初期化メッセージを取得
  2. 実行チェック-チェックOK
  3. ログを変更する
  4. チェックを実行する-チェックが失敗する
  5. 実行チェック-チェックOK

これが機能しない場合は、ログ、oldlog、およびcheck_logがどのようにチェックを行っているかに注目する必要があります。

動作する場合は、nagiosの設定に問題があることを示しています。

3
Bill B

ログを効果的に監視する本物の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
 }
1
LordOfKings

Nagiosには、Nagios Core、XIなどと緊密に統合するソリューションがあります。

Nagios Log Server これは、インフラストラクチャ内の任意のシステム上の任意のログファイルに対するクエリに対してアラートを生成できます。

0
Scott Wilkerson