web-dev-qa-db-ja.com

logstash分析を妨げるnginxエラーログのPHPスタックトレースの改行

ログファイル分析として、PHP-FPMおよびELKでnginxを使用しています。

PHPスクリプトがエラーを引き起こすと、インタープリターはエラーをnginxに送り返し、nginxはエラーをerror.logファイルに入れます。

問題は次のとおりです。これらのエラーログには、改行が新しいログ行と見なされるため、logstashが処理できない改行が含まれる場合があります。

2019/04/17 19:23:00 [error] 8356#8356: *4403 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function wp_using_themes() in /htdocs/wp-includes/template-loader.php:7
Stack trace:
#0 /htdocs/wp-blog-header.php(19): require_once()
#1 /htdocs/index.php(17): require('/htdocs/wp-blog...')
#2 {main}
  thrown in /htdocs/wp-includes/template-loader.php on line 7" while reading response header from upstream, client: 123.123.123.123, server: foobar.de, request: "GET /2014/11/foobar/ HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm-foobar.sock:", Host: "foobar.de"

これらの改行をlogstashで処理するか、エラーメッセージをフォーマットして改行を削除するにはどうすればよいですか?

1
n.r.

@USDへの称賛-彼のヒントのおかげでマットはどこを見ればよいかわかりました。それが解決策です。

ELKスタックにはマルチライン機能があります。しかし、filebeatモジュールを使用してログを後処理しているため、上記のようにlogstashの複数行機能をアクティブにすることはできません。

ここで説明するように、filebeat自体(/ etc/filebeat/filebeat.yml)で有効にする必要があります: https://www.elastic.co/guide/en/beats/filebeat/master/multiline-examples.html

しかし、注意してください:私はfilebeatモジュール "nginx" 複数行の問題自体を処理すると主張しています も使用しています。そうではありません。上記の複数行設定をモジュール構成ファイルに追加することで、強制的に実行できます:/ etc/filebeat/modules.d/nginx.yml

だから私はそうしました、そしてそれは特定の部分が今どのように見えるかです:

  error:
    enabled: true
    input:
      multiline.pattern: '^\d{4}\/\d{2}\/\d{2}'
      multiline.negate: true
      multiline.match: after

    var.paths:
      - /var/nginx/foobar_de/logs/error.log*
2
n.r.

ELKをしばらく使用していませんが、複数行のログエントリをサポートするように構成を変更する必要があります。以下は、公式ドキュメントから取得した、日付で始まらない行をマージするために複数行コーデックを使用する例です。

input {
  file {
    path => "/var/log/someapp.log"
    codec => multiline {
      # Grok pattern names are valid! :)
      pattern => "^%{TIMESTAMP_ISO8601} "
      negate => true
      what => "previous"
    }
  }
}

ログファイルが例のようにISO8601の日付を使用しているかどうかは、実際にその形式を調べないとわからないため、この例をそのまま使用できない場合がありますが、複数行のログエントリの処理の基本を示しています。日付は新しいエントリを示します。

https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html

1
USD Matt