TCPシステムログの受信を提供する

TCPシステムログの受信を提供する

2つのsyslogサーバーでサーバーを構成しようとしています。 1つはすべてのメッセージを保存すること、もう1つは統計のために分析することです。

これを行う方法を理解する唯一の方法は、ある種のポートミラーリングを実行し、ポート514ですべてのインバウンドパケットを見つけて(ただし、元のパケットがポート514のrsyslogに移動できるようにする)、コピーして送信することです。ソースIPを維持しながら、同じボックス内の他のポートに接続します。

サンプルリケータが見つかりましたが、システムのバインドされたポートでは機能しません。

どうすればいいですか?

答え1

Rsyslog転送設定

プログラム

ログインデックスホストでTCP受信を設定するには、/etc/rsyslog.confで次の行のコメントを外します。これにより、rsyslogデーモンはTCPポート514からの着信要求をリッスンできます。ここでは、ブローカーホストのメッセージがインデクサーに到達していることを確認できるようにTCPを使用します。 (これについては後述)

TCPシステムログの受信を提供する

$ModLoad imtcp
$InputTCPServerRun 514
Add a line to /etc/rsyslog.conf to actually put the received logs in a specific file.

local3.*                        /local/logs/httpd-error
local4.*                        /local/logs/httpd-access```
Finally, restart the rsyslog process.

```service rsyslog restart```

**Set up the agent host**

On the agent host, the host that is running apache, add a file, /etc/rsyslog.d/apache.conf. This will be read at syslog start time. This file tells rsyslog to read /var/log/httpd/error_log (the default apache error log on CentOS) every 10 seconds and send its messages to the local3.info facility in syslog. (Expanded to also read Access logs and send those to local4.info)

$ModLoad imfile

# Default Apache Error Log
$InputFileName /var/log/httpd/error_log
$InputFileTag httpd-error-default:
$InputFileStateFile stat-httpd-error
$InputFileSeverity info
$InputFileFacility local3
$InputRunFileMonitor

# Default Apache Access Log
$InputFileName /var/log/httpd/access_log
$InputFileTag httpd-access-default:
$InputFileStateFile stat-httpd-access
$InputFileSeverity info
$InputFileFacility local4
$InputRunFileMonitor

$InputFilePollInterval 10

次に、/etc/rsyslog.conf を変更し、コメントを外すか、ファイルの末尾に次の行を追加します。これは、rsyslog にログキューを設定し、local3 および local4 ファシリティログメッセージを TCP ポート 192.168.10.11 に転送するように指示します。 @@はTCPシステムログポートを意味するrsyslogの略です。 UDP経由で渡すには、単一の@を使用します。ただし、この場合、rsyslogはインデックスホストがUDPパケットを受信して​​いることを確認できないため、キューを設定することは価値がない可能性があります。

この構成では、プロキシホストはインデックスホストに送信できないすべてのログメッセージを保存します。これは、インデックスホストが再起動中または使用できない状況を処理するのに役立ちます。

$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down
local3.* @@192.168.10.11
local4.* @@192.168.10.11

最後に、エージェントホストでrsyslogを再起動します。

service rsyslog restart

テスト構成

Apacheサーバーを再起動すると(サービスhttpdの再起動)、インデックスホストの/ local / logs / httpd-errorに生成されたログが表示されます。そうでない場合は、ホスト間にファイアウォールブロックがあり、rsyslog設定の変更が正しく解析されていることを確認してください。次のコマンドを使用してrsyslog設定を確認できます。/sbin/rsyslogd -c5 -f /etc/rsyslog.conf -N1

新しいファイルを使用するように Logstash を構成する

この設定では、カスタムgrokパーサを使用してメッセージからエラーレベルを抽出し、rsyslog設定で設定したラベルを独自のフィールドに抽出します。 grokフィルタをカスタマイズするのに手助けが必要な場合は確認してください。http://grokdebug.herokuapp.com/

  input {
  file {
    type => "httpd-error-log"
    path => ["/local/logs/httpd-error"]
    sincedb_path => "/opt/logstash/sincedb-access"
    discover_interval => 10
  }

  file {
    type => "httpd-access-log"
    path => ["/local/logs/httpd-access"]
    sincedb_path => "/opt/logstash/sincedb-access"
    discover_interval => 10
  }
}

filter {
  if [type] == "httpd-error-log" {
    grok {
      match       => [ "message", "\S+ \d+ \d+:\d+:\d+ %{HOSTNAME} %{NOTSPACE:tag}: \[%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}\] \[%{LOGLEVEL:level}\] %{GREEDYDATA}" ]
    }
    mutate {
      rename      => [ "program", "vhost" ]
    }
  }

  if [type] == "httpd-access-log" {
    grok {
      match       => [ "message", "\S+ \d+ \d+:\d+:\d+ %{HOSTNAME} %{NOTSPACE:tag}: %{COMBINEDAPACHELOG}" ]
      add_field     => { "level", "info" }
    }
  }
}

output {
  elasticsearch {
    host => "localhost"
  }
}

このGitHubプロジェクトをチェックしてください https://gist.github.com/GaryRogers/85c8f2a805010ceeccc6

関連情報