Splunk Search

Find results based on field value of 2 events

carljohan
Path Finder

I have a logfile in the following format:

[2014-27-03 20:57:15.875 CST] [receivedSmsFileLogger] - message = "Yes", msisdn = "00000000"
[2014-27-03 21:06:21.787 CST] [receivedSmsFileLogger] - message = "Yes", msisdn = "11111111"
[2014-27-03 21:10:28.529 CST] [receivedSmsFileLogger] - message = "Yes", msisdn = "22222222"
[2014-27-03 21:30:51.651 CST] [receivedSmsFileLogger] - message = "No", msisdn = "11111111"
[2014-27-03 21:47:39.900 CST] [receivedSmsFileLogger] - message = "Yes", msisdn = "33333333"

I would like to find any msisdn which sent both yes and no in the same day and display them like:

2014-27-03 21:06:21.787 CST] [receivedSmsFileLogger] - message = "Yes", msisdn = "11111111"
2014-27-03 21:30:51.651 CST] [receivedSmsFileLogger] - message = "No", msisdn = "11111111"

Any suggestions on how that search query would be written?

UPDATE: Solution as per MuS answer:

index=_internal message ="yes" OR message ="no"| eval message=lower(message) | eventstats count(eval(message ="yes")) as yes_count count(eval(message ="no")) as no_count by msisdn  | where yes_count>0 AND no_count>0 | table _time, msisdn, message
Tags (2)
0 Karma
1 Solution

MuS
Legend

Hi carljohan,

try something like this, it is a run everywhere example and you must adapt it to your needs:

index=_internal method="GET" OR method="POST" | eventstats count(clientip) as ip_count by method  | where ip_count>2 | dedup clientip  | table clientip

this will search for all GET and POST, count IP's for each method and show only IP's which count is more then 2 because only those will have both GET and POST.

hope this helps ...

cheers, MuS

View solution in original post

MuS
Legend

Hi carljohan,

try something like this, it is a run everywhere example and you must adapt it to your needs:

index=_internal method="GET" OR method="POST" | eventstats count(clientip) as ip_count by method  | where ip_count>2 | dedup clientip  | table clientip

this will search for all GET and POST, count IP's for each method and show only IP's which count is more then 2 because only those will have both GET and POST.

hope this helps ...

cheers, MuS

MuS
Legend

you're welcome 🙂

0 Karma

carljohan
Path Finder

Thanks MuS!

With some modifications of your search the solution is:

index=_internal message ="yes" OR message ="no"| eval message=lower(message) | eventstats count(eval(message ="yes")) as yes_count count(eval(message ="no")) as no_count by msisdn | where yes_count>0 AND no_count>0 | table _time, msisdn, message

0 Karma

MuS
Legend

index=_internal method="GET" OR method="POST" | eventstats count(eval(method="GET")) as GET_count count(eval(method="POST")) as POST_count by clientip | where GET_count>1 AND POST_count>1 | dedup clientip | table clientip, GET_count, POST_count

carljohan
Path Finder

Hi MuS

This gave me all msisdn that sent either:
yes
no
yes or no

I only want msisdn that send yes and no.

0 Karma
Career Survey
First 500 qualified respondents will receive a $20 gift card! Tell us about your professional Splunk journey.
Get Updates on the Splunk Community!

.conf25 Global Broadcast: Don’t Miss a Moment

Hello Splunkers, .conf25 is only a click away.  Not able to make it to .conf25 in person? No worries, you can ...

Observe and Secure All Apps with Splunk

 Join Us for Our Next Tech Talk: Observe and Secure All Apps with SplunkAs organizations continue to innovate ...

What's New in Splunk Observability - August 2025

What's New We are excited to announce the latest enhancements to Splunk Observability Cloud as well as what is ...