0

エラー率に基づいて上位 5 つの API を取得する Splunk クエリがあります。以下はそのクエリです

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

ユーザーIDが間に入るURLがあり、それらのユーザーIDを*に置き換えるために、rexコマンドを使用しましたが、ユーザーIDを*として置き換えて機能します

しかし問題は、URL で行われたヒットごとに userID が異なるため、それらを別々にカウントすることです。このため、上位 5 つの API ヒットの出力が異なります。

例: URL:/account/user/JHWERTYQMNVSJAIP/email ここで、JHWERTYQMNVSJAIP は userID であり、* に置き換えられます

クエリの出力を下回っています

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 はすべて実際には 1 つですが、予想される出力は 5+4+4 を追加して、このように 1 回表示するようなものになるはずです。

url                     200 201 204 400 401 500
/account/user/*/email   -   -   -   -   -   13 (100.00%)

それぞれuserIDが異なるため、別途カウントが必要です。これに関する助けをいただければ幸いです。前もって感謝します

4

1 に答える 1