Nginx

nginx錯誤日誌中PHP堆棧跟踪中的換行符干擾logstash分析

  • April 18, 2019

我正在使用帶有 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 處理這些換行符或格式化這些錯誤消息以刪除換行符?

感謝@USD-Matt 感謝他的提示,我現在知道在哪裡看,這就是解決方案:

ELK 堆棧中有一個多行功能。但是當我使用filebeat 模組對日誌進行後處理時,我不能只啟動上述 logstash 中的多行功能。

我必須在filebeat本身(/etc/filebeat/filebeat.yml)中啟用它,如此處所述:https ://www.elastic.co/guide/en/beats/filebeat/master/multiline-examples.html

但請注意:我也在使用文件節拍模組“ 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*

引用自:https://serverfault.com/questions/963628