Hello, I have to avoid matching several values in a fields. The following works, but I"m wondering if there is a more efficient way...
index=wineventlog host="myhost" EventCode=7036 | regex Message!="WMI" | regex Message!="WinHTTP"
There are few ways to go.
There first is to put the regex strings in the base search.
index=wineventlog host="myhost" EventCode=7036 Message IN ("*WMI*" "*WinHTTP*")
Another is to combine the regular expressions into a single regex command.
index=wineventlog host="myhost" EventCode=7036 | regex Message!="(WMI)|(WinHTTP)"
Yet another is to extract the desired strings and then filter on them.
index=wineventlog host="myhost" EventCode=7036
| rex field=Message "(?<msg>WMI)"
| rex field=Message "(?<msg>WinHTTP)"
| where isnotnull(msg)
Any of these should be much faster with #2 and #3 being incrementally faster than the previous in the order.
1. index=wineventlog host="myhost" EventCode=7036 NOT Message IN ("*WMI*", "*WinHTTP*")
2. index=wineventlog host="myhost" TERM(EventCode=7036) NOT Message IN ("*WMI*", "*WinHTTP*")
3. index=wineventlog host="myhost" TERM(EventCode=7036) NOT WMI NOT WinHTTP NOT Message IN ("*WMI*", "*WinHTTP*")
There are few ways to go.
There first is to put the regex strings in the base search.
index=wineventlog host="myhost" EventCode=7036 Message IN ("*WMI*" "*WinHTTP*")
Another is to combine the regular expressions into a single regex command.
index=wineventlog host="myhost" EventCode=7036 | regex Message!="(WMI)|(WinHTTP)"
Yet another is to extract the desired strings and then filter on them.
index=wineventlog host="myhost" EventCode=7036
| rex field=Message "(?<msg>WMI)"
| rex field=Message "(?<msg>WinHTTP)"
| where isnotnull(msg)