如何将 rex 命令替换的文本计为 Splunk 中的一个文本
How to count text that are replaced by rex commands as one in Splunk
我有一个 Splunk 查询来根据错误百分比获取前 5 API。下面是它的查询
index=myaccount sourcetype=myaccountweb-master Response status=* url=* |
chart count over url by status | addtotals
| foreach * [
| eval <<FIELD>> = if('<<FIELD>>'==0,"-",'<<FIELD>>')
| eval p_<<MATCHSTR>> =
if(isnull(tonumber('<<FIELD>>')),'<<FIELD>>',round(('<<FIELD>>'/Total)*100,2))
| eval p_<<MATCHSTR>> = if('p_<<MATCHSTR>>'<1, "< 1",'p_<<MATCHSTR>>')
| eval <<FIELD>> = if("<<FIELD>>"=="Total",'<<FIELD>>', case('<<FIELD>>'=="-","-
",tonumber('<<FIELD>>')>1,'<<FIELD>>'." (".p_<<MATCHSTR>>."%)",1=1,'<<FIELD>>')) ]
| fields - p_* | eval url=lower(url) | rex mode=sed field=url
"s/account\/(\d+)\//account\/me\//" | rex mode=sed field=url
"s/\d+account.\w+|\d+fm|\d+fs\d+/*/g" | rex mode=sed field=url "s/..:..:..:..:..:../*/" | rex
mode=sed field=url "s/accounts\?ip=.*/accounts?ip=__/"| rex mode=sed field=url "s/[^\/]
{30,}/*/g" | rex mode=sed field=url "s/(\d|\.){8,}/*/g"
| rex field="500" "\d+\s\((?<perc>.*)%\)" | sort - perc | where perc>10 | head 5
我有 URL's,其中 userID 介于两者之间,并用 * 替换这些 userID 我使用了 rex 命令,它可以将 userID 替换为 *
但问题是它会单独计算它们,因为在 URL 上进行的每次点击的用户 ID 都不同。因此,我的 top5 API 命中输出不同。
例如 URL:/account/user/JHWERTYQMNVSJAIP/email 其中 JHWERTYQMNVSJAIP 是用户 ID,它被替换为 *
我得到低于查询的输出
url 200 201 204 400 401 500
/account/user/*/email - - - - - 5 (100.00%)
/account/user/*/email - - - - - 4 (100.00%)
/account/user/*/email - - - - - 4 (100.00%)
而所有这些 URL 实际上是一个,预期的输出应该像添加 5+4+4 并像这样显示一次
url 200 201 204 400 401 500
/account/user/*/email - - - - - 13 (100.00%)
由于每个userID不同,所以分别统计。对此的任何帮助将不胜感激。提前致谢
您的想法是正确的,但是要使 URL 的数字正确,必须在 之前 完成数字的标准化 chart
命令。
我有一个 Splunk 查询来根据错误百分比获取前 5 API。下面是它的查询
index=myaccount sourcetype=myaccountweb-master Response status=* url=* |
chart count over url by status | addtotals
| foreach * [
| eval <<FIELD>> = if('<<FIELD>>'==0,"-",'<<FIELD>>')
| eval p_<<MATCHSTR>> =
if(isnull(tonumber('<<FIELD>>')),'<<FIELD>>',round(('<<FIELD>>'/Total)*100,2))
| eval p_<<MATCHSTR>> = if('p_<<MATCHSTR>>'<1, "< 1",'p_<<MATCHSTR>>')
| eval <<FIELD>> = if("<<FIELD>>"=="Total",'<<FIELD>>', case('<<FIELD>>'=="-","-
",tonumber('<<FIELD>>')>1,'<<FIELD>>'." (".p_<<MATCHSTR>>."%)",1=1,'<<FIELD>>')) ]
| fields - p_* | eval url=lower(url) | rex mode=sed field=url
"s/account\/(\d+)\//account\/me\//" | rex mode=sed field=url
"s/\d+account.\w+|\d+fm|\d+fs\d+/*/g" | rex mode=sed field=url "s/..:..:..:..:..:../*/" | rex
mode=sed field=url "s/accounts\?ip=.*/accounts?ip=__/"| rex mode=sed field=url "s/[^\/]
{30,}/*/g" | rex mode=sed field=url "s/(\d|\.){8,}/*/g"
| rex field="500" "\d+\s\((?<perc>.*)%\)" | sort - perc | where perc>10 | head 5
我有 URL's,其中 userID 介于两者之间,并用 * 替换这些 userID 我使用了 rex 命令,它可以将 userID 替换为 *
但问题是它会单独计算它们,因为在 URL 上进行的每次点击的用户 ID 都不同。因此,我的 top5 API 命中输出不同。
例如 URL:/account/user/JHWERTYQMNVSJAIP/email 其中 JHWERTYQMNVSJAIP 是用户 ID,它被替换为 *
我得到低于查询的输出
url 200 201 204 400 401 500
/account/user/*/email - - - - - 5 (100.00%)
/account/user/*/email - - - - - 4 (100.00%)
/account/user/*/email - - - - - 4 (100.00%)
而所有这些 URL 实际上是一个,预期的输出应该像添加 5+4+4 并像这样显示一次
url 200 201 204 400 401 500
/account/user/*/email - - - - - 13 (100.00%)
由于每个userID不同,所以分别统计。对此的任何帮助将不胜感激。提前致谢
您的想法是正确的,但是要使 URL 的数字正确,必须在 之前 完成数字的标准化 chart
命令。