Nginx
nginx錯誤日誌中PHP堆棧跟踪中的換行符干擾logstash分析
我正在使用帶有 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*