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!

Fastest way to demo Observability

I’ve been having a lot of fun learning about Kubernetes and Observability. I set myself an interesting ...

September Community Champions: A Shoutout to Our Contributors!

As we close the books on another fantastic month, we want to take a moment to celebrate the people who are the ...

Splunk Decoded: Service Maps vs Service Analyzer Tree View vs Flow Maps

It’s Monday morning, and your phone is buzzing with alert escalations – your customer-facing portal is running ...