如何使用Log Insight Query提取X-Forwarded-For中的首个IP地址?
解决Log Insight提取X-Forwarded-For首个IP的问题
当前查询语句会把X-Forwarded-For后的所有IP串完整提取,要只获取首个IP,可通过以下几种方式修改查询:
方法1:正则解析精准匹配首个IP
利用正则直接匹配符合IP格式的首个内容,适配单个或多个IP的场景:
fields @timestamp, @message | filter @message like /Endpoint request body after transformations/ | parse @message /X-Forwarded-For":"([\d\.]+)/ as @IP | stats count(*) by @IP | limit 20
正则([\d\.]+)会匹配第一个由数字和点组成的IP段,直接提取首个IP。
方法2:拆分IP列表后取首个元素
先提取完整IP串,再拆分列表取第一个元素,兼容性更强:
fields @timestamp, @message | filter @message like /Endpoint request body after transformations/ | parse @message "X-Forwarded-For\":\"*\"" as @IPList | split @IPList by ", " into @IPArray | @IP = @IPArray[0] | stats count(*) by @IP | limit 20
split指令将IP串按, 分割成数组,再通过索引[0]获取第一个元素。
方法3:匹配到首个逗号前的内容
如果日志中X-Forwarded-For必然包含多个IP,可直接匹配到第一个逗号前的内容:
fields @timestamp, @message | filter @message like /Endpoint request body after transformations/ | parse @message "X-Forwarded-For\":\"*, " as @IP | stats count(*) by @IP | limit 20
注意:此方法不适用于仅含单个IP的日志条目。
内容的提问来源于stack exchange,提问作者MaxxABillion
相关产品推荐
相关产品推荐

