簡體   English   中英

Logstash Grok匹配到UserAgent的最后一個索引

[英]Logstash Grok match to last index unti begin of UserAgent

我有此日志消息:

"sid-cmascioieiow89322&New*Sou,th%20Skvn%20and%20ir&o,n%20Age,Mozilla/5.0 (Linux; Android 6.0; CHM-U01 Build/HonorCHM-U01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36"

和模式:

"(?[^&])&(?[^,]),%{GREEDYDATA:User_Agent}"

問題是p2有時包含零或一個或多個然后一個逗號。 我想匹配UserAgent之前的最后一個逗號,因為UserAgent有時包含逗號。

這是grok調試器鏈接: https ://grokdebug.herokuapp.com/

現在:

{
    "p1": [
        "sid-cmascioieiow89322"
    ],
    "p2": [
        "New*Sou"
    ],
    "User_Agent": [
        "th%20Skvn%20and%20iro,n%20Age,Mozilla/5.0 (Linux; Android 6.0; CHM-U01 Build/HonorCHM-U01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36"
    ]
}

我想要這樣:

{
    "p1": [
        "sid-cmascioieiow89322"
    ],
    "p2": [
        "New*Sou,th%20Skvn%20and%20ir&o,n%20Age"
    ],
    "User_Agent": [
        "Mozilla/5.0 (Linux; Android 6.0; CHM-U01 Build/HonorCHM-U01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36"
    ]
}

謝謝您的幫助。

您要捕獲到p2部分的字符串部分沒有空格。 因此,代替[^,]* ,除其他任何零個或多個字符相匹配的圖案,則可以使用\\S* -任何0+ 非空白盡可能多的字符,從而\\S*,將匹配逗號那是非空白字符中的最后一個。

(?<p1>[^&]*)&(?<p2>\S*),%{GREEDYDATA:User_Agent}
             ^^^^^^^^^^

這是此正則表達式與您的日志數據匹配的方式: 在此處輸入圖片說明

請參閱Grok演示屏幕截圖: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM