logstash grok解析自定義日志


網上關於grok解析自定義日志的資料比較呆板,不符合項目的應用,正好我這邊項目要用到,所以記錄一下。

日志格式:

想從日志中過濾並分析有用的信息,日志格式如下:
2021-05-20 09:39:08.232 [controller,e89aa194965a41b5,e89aa194965a41b5,haima-rpc-2799] [INFO ] [DISPATCHER-LOGGER] api request enter, requestBody=ApiRequestBody[operation=com.haima.cloudplayer.controller.data.sync,param={type=com.haima.cloudplayer.controller.dal.mysql.domain.InstanceStatusDo, timestamp=1621415358000}]
 
2021-05-20 09:39:08.234 [controller,e89aa194965a41b5,e89aa194965a41b5,haima-rpc-2799] [INFO ] [DISPATCHER-LOGGER] api request exit, requestBody=ApiRequestBody[operation=com.haima.cloudplayer.controller.data.sync,param={type=com.haima.cloudplayer.controller.dal.mysql.domain.InstanceStatusDo, timestamp=1621415358000}], responseBody=ApiResponseBody[operation=com.haima.cloudplayer.controller.data.sync,code=1000,errorCode=<null>,message=ok,memo=操作成功,response=OperationResult[success=true,value=[],reason=<null>,reasonMessage=<null>]], takes time= 2 ms.
這是兩條日志,一個是API的同步調用,一個是調用后返回,在返回時,有“takes time= 2 ms”表示該接口耗時2ms。日志中還有調用的api接口以及參數信息,並且在測試時,我們重點關注的是“api request exit”,不想要“api request enter“信息。

logstash配置文件內容

input {
kafka {
bootstrap_servers => "172.16.2.33:9092"
topics => "paas_api_time"
auto_offset_reset => "earliest"
codec => "json"
group_id => "controller_log"
consumer_threads => 1
decorate_events => true
}
}
 
filter {
if ([message] =~ "api request enter") {
drop {}
}
else {
grok {
match => {
"message" => "(?<api_name>(?<=operation=).*?(?=,)).*?(?<response_code>(?<=code=).*?(?=,)).*?(?<spend_time>(?<=takes time= ).*?(?= ms))"
}
 
}
}
}
 
output {
elasticsearch {
hosts => ["http://172.16.208.152:9200"]
index => "paas_api_time"
user => "elastic"
password => "elastic"
}
}
 

正則語法解析

(?<api_name>(?<=operation=).*?(?=,)).*?(?<response_code>(?<=code=).*?(?=,)).*?(?<spend_time>(?<=takes time= ).*?(?= ms))
是分別獲取類名,響應碼,耗時的三個命令組合,命令之間用“.*?”組合
(?<api_name>(?<=operation=).*?(?=,)):是截取“operation=”到“,”之間的字符,並且采用不貪婪模式“.*?”中的“?”就是采用不貪婪模式。
后面的“.*?”也是這個意思,就可以把自己想獲得的信息提取出來,而不用一個一個按照日志的字段來進行解析,因為生產上的日志隨着參數不同,內容可能會變化。采用這種方式,就非常方便,這個費了很大的精力才摸索出來的,多練習,到思考,必有所得!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM