1. 程式人生 > >使用Logstash multiline 收集PHP、tomcat等應用服務多行堆疊日誌

使用Logstash multiline 收集PHP、tomcat等應用服務多行堆疊日誌

很多時候應用程式出錯是都是丟擲一堆 堆疊資訊(即在日誌檔案輸出多行),此時logstash可以使用multiline的外掛收集日誌時需要把錯誤堆疊資訊收集為一個記錄。multiline字面意思是多行,顧名思義就是對多行日誌進行處理。

multiline配置與用法

input {
  stdin {
    codec => multiline {
      pattern => "pattern, a regexp
      negate => "true" or "false
      what => "previous" or "next
} } }

## pattern支援正則表示式,通過正則表示式匹配日誌資訊,grok pattern定義的引數也是支援,Eg:%{TIMESTAMP_ISO8601} ,具體資訊可以檢視grok-patterns

## negate  只支援布林值,true 或者false,預設為false。如果設定為true,表示資訊不跟上面正則表示式(pattern)匹配的內容都與匹配的整合,具體整合在前還是在後,看what引數。如果設定為false,即與pattern匹配的內容

## what  前一行 或者後一行,指出上面對應的規則與前一行內容收集為一行,還是與後一行整合在一起

官方原文

The pattern should match what you believe to be an indicator that the field is part of a multi-line event.

The what must be previous or next and indicates the relation to the multi-line event.

The negate can be true or false (defaults to false). If true, a message not matching the pattern will constitute a match of the multiline filter and the what will be applied. (vice-versa is also true
)

在這裡用PHP-FPM的慢查詢日誌做個測試

PHP-FPM的慢查詢日誌如下:

[11-Mar-2015 16:54:17]  [pool www] pid 12873
script_filename = /data//index.php
[0x00007f497fa5b620] curl_exec() /data//Account.php:221
[0x00007f497fa5a4e0] call() /data/gintama_app/jidong/game_code/app/controllers/Game.php:31
[0x00007fff29eea180] load() unknown:0
[0x00007f497fa59e18] call_user_func_array() /data/library/BaseCtrl.php:20
[0x00007fff29eea470] handoutAction() unknown:0
[0x00007f497fa59400] run() /data//index.php:30
  
[11-Mar-2015 16:56:46]  [pool www] pid 12881
script_filename = /data/index.php
[0x00007f497fa5b620] curl_exec() /data//Account.php:221
[0x00007f497fa5a4e0] call() /data/Game.php:31
[0x00007fff29eea180] load() unknown:0
[0x00007f497fa59e18] call_user_func_array() /data/library/BaseCtrl.php:20
[0x00007fff29eea470] handoutAction() unknown:0
[0x00007f497fa59400] run() /data/index.php:30


新增Logstash的配置檔案logstash_php-fpm.conf

input {
    file {
        path => "/tmp/php-slow.log"  ###收集的日誌檔案路徑
        codec => multiline {  ###使用multiline
            pattern => "^(\[\d{2}-%{MONTH}-\d{4})"  ###使用正則表示式,%{MONTH}是在gork定義好的,這邊偷個懶,直接呼叫
            negate => true  ###設定為true,即取正則表示式不匹配的行,然後將內容與上一行或者下一行整合
            what => "previous"  ###設定為previous,表示與上一行內容整合在一起。
        }
    }
}

output{
   stdout { codec => rubydebug }
   elasticsearch{
        hosts => ["110.22.145.155:9200"]
        index => "logstash-php_%{+YYYY.MM.dd}"
   }
}

##測試配置檔案是否符合語法

{logstash_home}/bin/logstash –t logstash_php-fpm.conf

# /opt/logstash/bin/logstash -t logstash-php_slow.conf 
Configuration OK

執行logstash,檢視輸出內容

# /opt/logstash/bin/logstash -f ./logstash-php_slow.conf 
Settings: Default pipeline workers: 8
Pipeline main started

{
    "@timestamp" => "2017-07-17T05:40:40.310Z",
       "message" => "[11-Mar-2015 16:54:17]  [pool www] pid 12873\nscript_filename = /data//index.php\n[0x00007f497fa5b620] curl_exec() /data//Account.php:221\n[0x00007f497fa5a4e0] call() /data/gintama_app/jidong/game_code/app/controllers/Game.php:31\n[0x00007fff29eea180] load() unknown:0\n[0x00007f497fa59e18] call_user_func_array() /data/library/BaseCtrl.php:20\n[0x00007fff29eea470] handoutAction() unknown:0\n[0x00007f497fa59400] run() /data//index.php:30\n  ",
      "@version" => "1",
          "tags" => [
        [0] "multiline"
    ],
          "path" => "/tmp/php-slow.log",
          "host" => "test2-web"
}
{
    "@timestamp" => "2017-07-17T05:40:47.321Z",
       "message" => "[11-Mar-2015 16:56:46]  [pool www] pid 12881\nscript_filename = /data/index.php\n[0x00007f497fa5b620] curl_exec() /data//Account.php:221\n[0x00007f497fa5a4e0] call() /data/Game.php:31\n[0x00007fff29eea180] load() unknown:0\n[0x00007f497fa59e18] call_user_func_array() /data/library/BaseCtrl.php:20\n[0x00007fff29eea470] handoutAction() unknown:0\n[0x00007f497fa59400] run() /data/index.php:30",
      "@version" => "1",
          "tags" => [
        [0] "multiline"
    ],
          "path" => "/tmp/php-slow.log",
          "host" => "test2-web"
}

Tomcat堆疊資訊收集也類似,找出規則,然後進行匹配即可,在此不重複測試

相關推薦

使用Logstash multiline 收集PHPtomcat應用服務堆疊日誌

很多時候應用程式出錯是都是丟擲一堆 堆疊資訊(即在日誌檔案輸出多行),此時logstash可以使用multiline的外掛收集日誌時需要把錯誤堆疊資訊收集為一個記錄。multiline字面意思是多行,顧名思義就是對多行日誌進行處理。 multiline配置與用法 i

Python的基礎教程,比PHPGO前景好的一門開發語言!

動態 www. 成功創業 包括 數據分析 資源 ros 單元 ogl Python代表了將來很長一段時間技術走向,其在人工智能和網絡爬蟲、大數據分析等科學領域是有很大的優勢的。 代表方向 Python的基礎教程,比PHP、GO等前景好的一門開發語言! 人工智能 Python

Linux下配置MySQLMongoDBTomcat軟體和使用

配置阿里雲的yum倉庫 獲取倉庫配置 wgCentos-7.repoet http://mirrors.aliyun.com/repo/ 修改Linux預設的yum配置 將Centos-7.repo中的內容拷貝到/etc/yum.repo.d/CentOS-Base.repo檔案

Mr.Fang出品:銀企互聯(NC模式)開發者版本(.NET WebService中介軟體,JavaPHPPython跨語言測試通過)

本開發者版本特點: ERP系統只需要通過HTTP協議將引數和傳送內容一次性POST到WebService指定頁面,接收應答即可。開發者不需要關注簽名、提交頁面格式、報文頭引數、壓縮模式等,實現了跨平臺、跨語言的簡單開發,技術門檻降至極低。 支援壓縮模式提交大批量指令:rd

Linux 安裝 mysqlapachephptomcatnginx

Mysql    1、檢查安裝: 因為mysql資料庫在Linux上實在是太流行了,所以目前下載的主流Linux系統版本基本上都集成了mysql資料庫在裡面,我們可以通過如下命令來檢視我們的作業系統上是否已經安裝了mysql資料庫 [[email protected

Web伺服器ApacheTomcat概念的理解

以一次JSP請求響應為例,講解伺服器,Apache、Tomcat之間的關係。 帶著這樣一個概念去看:Apache與Apache Tomcat(簡稱Tomcat)都是可以獨立執行的伺服器。你平時見到的apache-tomcat-7.0.72實際上只是Tomca

修改nginx/TomcatWeb服務的埠監聽地址

我們將一起來學習如何在Linux例項中修改nginx、Tomcat等常見Web服務的埠監聽地址。 PS:如果是Windows例項和IIS服務,請參考 ECS Windows 例項中修改IIS監聽的IP地址。 前提條件 你已經在Linux例項上安裝了Web伺服器。你可以參考以下文件安裝並啟

Docker 定製sshjava基礎服務映象

1、啟動一個基於centos映象的容器 # docker run –p 10022:22 -ti centos bash [[email protected] /]# -p是為了等會啟動ssh後測試能否正常登陸 2、在容器中安裝openssh-s

【不斷更新貼】總結程式設計的技巧語法,需要敲程式碼記憶掌握

1. void DrawRectangle( cv::Mat& img, cv::Rect  box ) { cv::rectangle(img,box.tl(),box.br(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uni

Filebeat 關鍵字匹配日誌采集(multiline與include_lines)

filebeat 關鍵字多行匹配日誌采集(multiline與include_lines)很多同事認為filebeat采集日誌不能做到多行處理,今天這裏討論下filebeat的multiline與include_lines。 先來個案例,以下日誌,我們只要求采集error的字段,2017/06/22 11:2

Filebeat 關鍵字匹配日誌採集(multiline與include_lines)

很多同事認為filebeat採集日誌不能做到多行處理,今天這裡討論下filebeat的multiline與include_lines。先來個案例,以下日誌,我們只要求採集error的欄位,2017/06/22 11:26:30 [error] 26067#0: *17918 

一文總結應用WebHTTP伺服器,ApacheNginx,TomcatIISJBossGlassfish區別

一個學習的總結,或者說是彙總,有些連結給出的觀點過時,已按照自己的理解經過修改編輯; 應用、Web、HTTP伺服器 這篇文章講述典型的Web伺服器的工作原理。 Web伺服器和應用伺服器有什麼區別?EAR和WAR部署包之間的不同? 參考stackove

[iOS]關於 App 混合(Hybrid)開發的優化,包括H5Weex(本篇博客主要針對 iOS 應用講解,但該思想同樣適用於Android)

color 數據 後臺 lib 新版 生成 下載地址 代碼 版本   我們知道混合開發,可以節省很多成本(時間成本,經濟成本等等),所以有很多公司比較鐘愛這種開發形式,今天所講的優化方式,也是我在我們公司的應用中實際用了的,而且我寫的這個優化的 SDK 已經開源到 gith

java架構師課程性能調優高並發tomcat負載均衡大型電商項目實戰高可用高可擴展數據庫架構設計Solr集群與應用分布式實戰主從復制高可用集群大數據

慢查詢 主從復制 難題 jms 整合 大數 數據庫設計 企業級 nginx網站 15套Java架構師詳情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color:

ApacheNginxTomcatPHP的區別

linuxapachenginxApache、Nginx、Tomcat、PHP的區別Apache和Nginx算是市面上兩款比較強大的WEB服務軟件。Apache的優點:支持模塊多,功能多運行穩定性強支持PHP模塊,無需安裝其他多余的組件就可以實現.php動態頁面的解析地址重寫功能(rewrite)強大Ngin

Nginx常見問題 Tomcat服務 Tomcat高級應用

nginx常見問題 、 tomcat服務#########################################################################################################nginx優化:nginx優化主要從配置文件來著手優化:wo

android仿微信紅包動畫Kotlin綜合應用Xposed模塊炫酷下拉視覺UC瀏覽器滑動動畫源碼

架構分析 body oot googl short html 博文 urn 管理 Android精選源碼 仿微信打開紅包旋轉動畫 使用Kotlin編寫的Android應用,內容你想象不到 Android手機上的免Root Android系統日誌Viewer 一個能讓微

PHP-向瀏覽器輸出數據(printechoprintfsprintf

AR blog 多個 不能 信息 format 參數 vsp void 1、print (語言結構) pirnt - 輸出字符串 int print ( string $arg ) 舉例: 輸出:Hello World! print("Hello World!"); 等

MongoDBHbaseRedisNoSQL優劣勢應用場景

tel val 開發 一段時間 2.4 緩沖區 sta 位置 date NoSQL的四大種類 NoSQL數據庫在整個數據庫領域的江湖地位已經不言而喻。在大數據時代,雖然RDBMS很優秀,但是面對快速增長的數據規模和日漸復雜的數據模型,RDBMS漸漸力不從心,無法應對很多數據

Spring Boot 環境配置 --不通的環境應用不通的配置,生成測試開發

方法一: Properties多環境配置 resouce 下面新建如properties-dev.properties等配置檔案(檔名字必須按照這種格式),不通的環境對應著一個配置檔案,想用那個就在application.properties裡使用例如   spri