代码之家  ›  专栏  ›  技术社区  ›  kalyan chakravarthy

grok表达式,用于拉括号中的字符串

  •  0
  • kalyan chakravarthy  · 技术社区  · 6 年前

    我正在尝试使用grok解析日志消息。下面是示例消息

    [de4131185bb28bcd5f3019b168106682] [172.69.62.54] [/v2/user.json] Returned lineup_key for user OAuth [ OAuth realm="", oauth_consumer_key="qQRye5YLMtdw2TNmoiayMptwdbW29y3pTlaIj0lx", oauth_token="ArFbNvrxntvYIbA2QArJnCmbGCBQe3P5I1YHX8TX", oauth_signature_method="HMAC-SHA1", oauth_signature="o1DhpgEX7QyCDjDvPceHzJrm7h4%3D", oauth_timestamp="1529081887", oauth_nonce="0C6F8BAC-B3E3-44F3-A3BD-F04CF7815580", oauth_version="1.0" ] : [ MjE2LDI1OA== ] 
    

    使用的grok表达式如下

    UMSAPPLOGDATA ^\[%{WORD:id}\]\s\[%{IP:ip}\]\s\[%{URIPATHPARAM:uri}\]%{GREEDYDATA:logMessage}
    

    现在我要将下面的整个oauth片段提取到名为oauth_parameters的单独变量中。

    [ OAuth realm="", oauth_consumer_key="qQRye5YLMtdw2TNmoiayMptwdbW29y3pTlaIj0lx", oauth_token="ArFbNvrxntvYIbA2QArJnCmbGCBQe3P5I1YHX8TX", oauth_signature_method="HMAC-SHA1", oauth_signature="o1DhpgEX7QyCDjDvPceHzJrm7h4%3D", oauth_timestamp="1529081887", oauth_nonce="0C6F8BAC-B3E3-44F3-A3BD-F04CF7815580", oauth_version="1.0" ]
    

    我如何扩展现有的grok表达式。

    同样感谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sufiyan Ghori    6 年前

    你可以写一个 custom grok pattern 以下面的格式,

    (?<field_name>the pattern here)
    

    你的模式是,

    \buser OAuth (?<outh_parameters>(.*)oauth_version="\d{1,2}.\d{1,2}" ])
    

    它会输出,

    {
      "outh_parameters": [
        [
          "[ OAuth realm="", oauth_consumer_key="qQRye5YLMtdw2TNmoiayMptwdbW29y3pTlaIj0lx", oauth_token="ArFbNvrxntvYIbA2QArJnCmbGCBQe3P5I1YHX8TX", oauth_signature_method="HMAC-SHA1", oauth_signature="o1DhpgEX7QyCDjDvPceHzJrm7h4%3D", oauth_timestamp="1529081887", oauth_nonce="0C6F8BAC-B3E3-44F3-A3BD-F04CF7815580", oauth_version="1.0" ]"
        ]
      ]
    }