I have a search that returns events with many different URLs
index=test URL=*
I want to obtain a count of events per URL
However some of the URLs are slightly different so I want to group them together
Example of my URL values
/login/
/login/
/api/customer/5542-a44/data
/api/customer/5c77-59w/data
/api/customer/7a88-134/data
/weather/forecast/
/api/savedseach/7775
/api/savedseach/4788
/new/user
What I would like to end up with
URL | COUNT |
/login/ | 2 |
/api/customer//data | 3 |
/weather/forecast/ | 1 |
/api/savedseach/ | 2 |
/new/user | 1 |
Im using | stats count by URL
However as mentioned above my issue is with the URLs that have ids or guids in them
You can normalize the url with regular expression, but you will need to account for all of your use cases. Here's an example regex based on the examples you provided:
| rex mode=sed field=URL "s/\/(customer|savedsearch)\/[^\e\/]+/\/\1\//g"
Here's a run anywhere example that shows how it works:
| makeresults
| eval URL="/login/
/login/
/api/customer/5542-a44/data
/api/customer/5c77-59w/data
/api/customer/7a88-134/data
/weather/forecast/
/api/savedsearch/7775
/api/savedsearch/4788
/new/use"
| makemv URL tokenizer="(?<URL>[^\n]+)"
| mvexpand URL
| rex mode=sed field=URL "s/\/(customer|savedsearch)\/[^\e\/]+/\/\1\//g"
| stats count by URL
You can normalize the url with regular expression, but you will need to account for all of your use cases. Here's an example regex based on the examples you provided:
| rex mode=sed field=URL "s/\/(customer|savedsearch)\/[^\e\/]+/\/\1\//g"
Here's a run anywhere example that shows how it works:
| makeresults
| eval URL="/login/
/login/
/api/customer/5542-a44/data
/api/customer/5c77-59w/data
/api/customer/7a88-134/data
/weather/forecast/
/api/savedsearch/7775
/api/savedsearch/4788
/new/use"
| makemv URL tokenizer="(?<URL>[^\n]+)"
| mvexpand URL
| rex mode=sed field=URL "s/\/(customer|savedsearch)\/[^\e\/]+/\/\1\//g"
| stats count by URL
This is exactly what I was looking for, thank you.