Splunk Enterprise

How to parse multivalued field to every line?

wvalente2
Explorer

Hello Splunkers.

I need help regarding a field with multiple values that must be separated.

I have the following log in the following format:

PostureReport
Policy_Umbrella;Passed
Policy_DLP;Passed
Policy_Kaspersky;Passed
Policy_Domain;Passed
Policy_SCCM;Passed
Police_Firewall_Windows;Failed
Policy_Crownstrike;Passed

I need to separate every Policy with your status.

I tried to use mvindex, mvjoin and them separate the events, mvexpand, but none of these worked for me.

 

Thank you.

 

 

Labels (1)
0 Karma
1 Solution

bowesmana
SplunkTrust
SplunkTrust

Assuming the Police_Firewall_Windows was Policy and it is a single field in a single event, then use rex 

| rex field=PostureReport max_match=0 "Policy_(?<Policy>[^;]*);(?<Status>.*)"

which will give you two multi-value fields Policy and Status.

If you want to create separate events for each policy result, then do this instead

| rex field=PostureReport max_match=0 "Policy_(?<Policy_Status>.*)"
| fields - PostureReport
| mvexpand Policy_Status
| rex field=Policy_Status "(?<Policy>[^;]*);(?<Status>.*)"

which will give you a separate event per Policy/Status pair

View solution in original post

0 Karma

bowesmana
SplunkTrust
SplunkTrust

Assuming the Police_Firewall_Windows was Policy and it is a single field in a single event, then use rex 

| rex field=PostureReport max_match=0 "Policy_(?<Policy>[^;]*);(?<Status>.*)"

which will give you two multi-value fields Policy and Status.

If you want to create separate events for each policy result, then do this instead

| rex field=PostureReport max_match=0 "Policy_(?<Policy_Status>.*)"
| fields - PostureReport
| mvexpand Policy_Status
| rex field=Policy_Status "(?<Policy>[^;]*);(?<Status>.*)"

which will give you a separate event per Policy/Status pair

0 Karma

wvalente2
Explorer

The first query work perfectly. I'll try here the final query that I want.

Thank you.

0 Karma

richgalloway
SplunkTrust
SplunkTrust

Assuming each line in the log is a separate event then you can use the split function to separate the fields.

| eval policyStatus = split(PostureReport, ";")
| eval policy = mvindex(policyStatus, 0), status = mvindex(policyStatus, 1)

 

---
If this reply helps you, Karma would be appreciated.
0 Karma
Get Updates on the Splunk Community!

Strengthen Your Future: A Look Back at Splunk 10 Innovations and .conf25 Highlights!

The Big One: Splunk 10 is Here!  The moment many of you have been waiting for has arrived! We are thrilled to ...

Now Offering the AI Assistant Usage Dashboard in Cloud Monitoring Console

Today, we’re excited to announce the release of a brand new AI assistant usage dashboard in Cloud Monitoring ...

Stay Connected: Your Guide to October Tech Talks, Office Hours, and Webinars!

What are Community Office Hours? Community Office Hours is an interactive 60-minute Zoom series where ...