[10/Oct/2021:05:45:20 +0000] SsAzyfdtrfdV1GKU7+Q== user_Zwfikdlo5CgOT0Loq8g== "GET/pas/public/ping?pas-client HTTP/1.1 = 007,200年"-b"53b 5ms "Mozilla/4.0(兼容;MSIE 5.5;Windows NT 5.0)">GET_ping
在理解日志概念后,我正在研究web请求日志,并尝试在这些日志的字符串中匹配一些关键字,这些日志的方法是GET,我还回顾了python日志解析和相关的帖子1和2。
让我们假设我有一部分日志行看起来像这样:
"GET /pas/public/ping?pas-client=007 HTTP/1.1"
完整日志为:
[10/Oct/2021:05:45:20 +0000] SsAzyfdtrfdV1GKU7+Q== user_Zwfikdlo5CgOT0Loq8g== "GET /pas/public/ping?pas-client=007 HTTP/1.1" 200 "-b" 53b 5ms "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)" qFhyYRqbqtsM7tA== 50001 - -
所以我试图使用一个正则表达式可以匹配API或查询路径(手段)的某些部分之前?标记或(URL参数)。我想检查具有单列raw
的spark数据框中的事件,如果它是GEThttp方法,则将其与/ping?
匹配。如果是这样,我创建列名Type并将其标记为ping from事件,如下所示;如果不是这样,我将其标记为POST:
您的正则表达式似乎有点偏离。这是我的版本。您至少应该转义ping
后面的反斜杠和问号
?
。
(df
.withColumn('type', F
.when(F.isnull('raw'), '-')
.when(F.regexp_extract('raw', '(GET).*(/ping)?', 0).isNotNull(), 'GET_ping')
.otherwise('POST')
)
.select('type')
.show()
)