regex - Logstash kv 过滤器问题,\r\n 作为字段分割(反斜杠)

标签 regex logstash backslash

我正在尝试使用 kv 解析此日志行

Host: mobile.bpifrance.fr\r\nConnection: keep-alive\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: Mozilla/5.0 (Linux; Android 5.0.2; SM-G901F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Crosswalk/IP.IP.IP.IP Mobile Safari/537.36\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: fr-fr\r\nCookie: MRHSHint=deleted; XXXX=1z1z1z1452251835z14400; LastMRH_Session=0175d881; JSESSIONID=836A243928E475506091D32FB585D812; TDF=123456.789.1000; TDF=123456.789.1000; TS01748689=01450ecb576c294567faa529b12c3299cf27b272dc5d54fe2c1f98fca83fc436733ad811cd33162b0ce794a6658d86242d07407c8a\r\nX-Forwarded-For: IP.IP.IP.IP\r\nX-Forwarded-Remote-User: xxxx\r\nsession-id: 0175d881\r\nsession-key: 6ab68177c496ec366d5c45240175d881\r\nusername: xxxx\r\n\r\n

我尝试了几种 kv 配置,但总是出现奇怪的行为。

对我来说最合乎逻辑的配置是做类似的事情:

field_split => "(\\\r\\\n)"

我尝试使用 field_split (\\\\\\\\\r\\\\\\\\\n), (\\\\)r(\\\\)n, (?\\\\)r{1}(?\\\\)n{1} 没有结果。

我也尝试过 mutate gsub 并遇到了同样的问题。

有什么建议吗?

非常感谢

最佳答案

有几个问题:

  1. Logstash 发货方插入了另一个反斜杠,因此当 Logstash 中心处理事件时,正则表达式不匹配
  2. kv过滤器中的field_split采用一串字符,如果其中一个字符匹配,则该字段被分割,所以问题变成:我们在HTTP header 中找不到的字符是什么?没有人。

我找到的解决方案是使用 mutate gsub 将 \\r\\n 替换为某个字符串,然后通过插入真正的换行符(通过使用 ruby过滤器而不是分割过滤器)当此字符串匹配并最终使用带有 \n 的 kv 过滤器时:

filter {
  mutate {
    gsub => [ "message", "[\\\\]r", "somestring" ]
    gsub => [ "message", "[\\\\]n", "somestring" ]
  }
}
filter {
  ruby {
    code => "begin; event['message'] = event['message'].split(/somestringsomestring/); rescue Exception; end"
  }
}
filter {
  if [type] == "XXX" {
    kv {
      field_split => "\n"
      value_split => ":"
      source => "message"
    }
  }
}

希望对你有帮助

关于regex - Logstash kv 过滤器问题,\r\n 作为字段分割(反斜杠),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817569/

相关文章:

正则表达式子程序在 Npp 中工作,但在 PCRE 中表现奇怪

elasticsearch - 发送到Elasticsearch之前,向字段添加额外的值

groovy - Logback.groovy LogstashEncoder 更改字段名称

regex - R:从 .txt 中读取引号,不带反斜杠

java - 为什么我们要在文件目录中加正斜杠来区分目录和文件?

r - 当找不到匹配项时,gsub 返回一个空字符串

javascript - 正则表达式过滤掉某些字符

configuration - 使用环境变量的 Logstash 条件输出不起作用

python用双反斜杠替换单反斜杠

javascript - RegExp测试方法中的 "g"如何交替工作?