0

我是 splunk 的新手。所以我有一个日志,其中包含这种格式的内容(事件)

tool_code: error_code (path1/path2/path3/filename1,line) path1.path2.path3.testname1

我写 rex 来提取文件名和测试名 rex 是

|rex field=_raw (?<UNW>\S+)\s+(?<UNWA>\S+)\s+(?<FILE_NAME>\S+)\s+(?<TEST_NAME>\S+)

这创建了这种格式的表(通过使用这个命令|table FILE_NAME, TEST_NAME

FILE_NAME -------------------------------------- TEST_NAME

path1/path2/path3/filename1,line ------------ path1.path2.path3.testname1

但我希望 FILE_NAME 只保存名称(filename1)而不是路径(我们应该在最后一个斜杠之前和逗号之后提取内容),同样 TEST_NAME 应该只有 testname1 而不是路径。

请帮助我实现这一目标

4

3 回答 3

1

您创建了一个名为“FILE_NAME”的字段。您现在可以做的是使用 split 命令创建一个新字段:

   `eval OnlyFileName = mvindex(split(FILE_NAME,"/"),-1)`       

eval = 创建新字段

mvindex(split = 拆分命令

“/” = 除以 /

-1 = 列表中的最后一个对象。

继续分裂,直到你得到你想要的。

我建议使用这种方式,这比一直使用正则表达式要简单得多。花费更少的时间...

于 2020-06-09T12:25:08.233 回答
0

试试这个正则表达式。

| rex "[\S\/]+\/(?<FILE_NAME>\S+),\w+\)\s+[\S\.]+\.(?<TEST_NAME>\w+)$"
于 2020-06-09T12:29:16.550 回答
0

我会通过几个不同的步骤来做到这一点:

| rex field=_raw ":\s+error_code\W+(?<full_path>[^,]+),(?<line>[^)]+)\W+(?<test_path>.+)"

其次是:

| rex field=full_path "(?<filename>\w+)$"

其次是:

| rex field=test_path "(?<testname>[^\.]+)$"

当然,假设“testname”中没有点 - 这会起作用:)

于 2020-06-09T12:20:27.983 回答