Splunk Search

How to parse json data event into table format?

Abhineet
Loves-to-Learn Everything

Need splunk query to parse json Data into table format.

raw data/event in splunk:

<158>May 09 04:33:46 detailedSwitchData {'cnxiandcm1': {'Ethernet1': 'MAC ACL Enabled', 'Ethernet2': 'MAC ACL Enabled', 'Ethernet3': 'MAC ACL Enabled', 'Ethernet4': 'MAC ACL Enabled', 'Ethernet5': 'Dot1x Enabled', 'Ethernet6': 'Dot1x Enabled', 'Ethernet7': 'Dot1x Enabled', 'Ethernet8': 'Dot1x Enabled', 'Ethernet9': 'Dot1x Enabled', 'Ethernet10': 'Dot1x Enabled', 'Ethernet11': 'Dot1x Enabled', 'Ethernet12': 'Dot1x Enabled', 'Ethernet13': 'Dot1x Enabled', 'Ethernet14': 'Dot1x Enabled', 'Ethernet15': 'Dot1x Enabled', 'Ethernet16': 'Dot1x Enabled', 'Ethernet17': 'Dot1x Enabled', 'Ethernet18': 'Dot1x Enabled', 'Ethernet19': 'Dot1x Enabled', 'Ethernet20': 'Dot1x Enabled', 'Ethernet21': 'Dot1x Enabled', 'Ethernet22': 'Dot1x Enabled', 'Ethernet23': 'Dot1x Enabled', 'Ethernet24': 'Dot1x Enabled', 'Ethernet25': 'Dot1x Enabled', 'Ethernet26': 'Dot1x Enabled', 'Ethernet27': 'Dot1x Enabled', 'Ethernet28': 'Dot1x Enabled', 'Ethernet29': 'Dot1x Enabled', 'Ethernet30': 'Dot1x Enabled', 'Ethernet31': 'Dot1x Enabled', 'Ethernet32': 'Dot1x Enabled', 'Ethernet33': 'Dot1x Enabled', 'Ethernet34': 'Dot1x Enabled', 'Ethernet35': 'Dot1x Enabled', 'Ethernet36': 'Dot1x Enabled', 'Ethernet37': 'Dot1x Enabled', 'Ethernet38': 'Dot1x Enabled', 'Ethernet39': 'Dot1x Enabled', 'Ethernet40': 'Dot1x Enabled', 'Ethernet41': 'Dot1x Enabled', 'Ethernet42': 'Dot1x Enabled', 'Ethernet43': 'Dot1x Enabled', 'Ethernet44': 'Dot1x Enabled', 'Ethernet45': 'Dot1x Enabled', 'Ethernet46': 'Dot1x Enabled', 'Ethernet47': 'Dot1x Enabled', 'Ethernet48': 'Dot1x Enabled', 'Ethernet49': 'Dot1x Enabled', 'Ethernet50': 'Dot1x Enabled', 'Ethernet51': 'Dot1x Enabled', 'Ethernet52': 'Dot1x Enabled', 'Ethernet53': 'Dot1x Enabled', 'Ethernet54': 'Dot1x Enabled', 'Ethernet55': 'Dot1x Enabled', 'Ethernet56': 'Dot1x Enabled', 'Ethernet57': 'Dot1x Enabled', 'Ethernet58': 'Dot1x Enabled', 'Ethernet59': 'Dot1x Enabled', 'Ethernet60': 'Dot1x Enabled', 'Ethernet61': 'Dot1x Enabled', 'Ethernet62': 'Dot1x Enabled', 'Ethernet63': 'Dot1x Enabled', 'Ethernet64': 'Dot1x Enabled', 'Ethernet65': 'Dot1x Enabled', 'Ethernet66': 'Dot1x Enabled', 'Ethernet67': 'Dot1x Enabled', 'Ethernet68': 'Dot1x Enabled', 'Ethernet69': 'Dot1x Enabled', 'Ethernet70': 'Dot1x Enabled', 'Ethernet71': 'Dot1x Enabled', 'Ethernet72': 'Dot1x Enabled', 'Ethernet73': 'Dot1x Enabled', 'Ethernet74': 'Dot1x Enabled', 'Ethernet75': 'Dot1x Enabled', 'Ethernet76': 'Dot1x Enabled', 'Ethernet77': 'Dot1x Enabled', 'Ethernet78': 'Dot1x Enabled', 'Ethernet79': 'Dot1x Enabled', 'Ethernet80': 'Dot1x Enabled', 'Ethernet81': 'Dot1x Enabled', 'Ethernet82': 'Dot1x Enabled', 'Ethernet83': 'Dot1x Enabled', 'Ethernet84': 'Dot1x Enabled', 'Ethernet85': 'Dot1x Enabled', 'Ethernet86': 'Dot1x Enabled', 'Ethernet87': 'Dot1x Enabled', 'Ethernet88': 'Dot1x Enabled', 'Ethernet89': 'MAC ACL Enabled', 'Ethernet90': 'MAC ACL Enabled', 'Ethernet91': 'MAC ACL Enabled', 'Ethernet92': 'Dot1x Enabled', 'Ethernet93': 'Dot1x Enabled', 'Ethernet94': 'MAC ACL Enabled', 'Ethernet95': 'MAC ACL Enabled', 'Ethernet96': 'Dot1x Enabled', 'Ethernet97/1': 'Uplink Port', 'Ethernet98/1': 'Uplink Port', 'Ethernet99/1': 'Uplink Port', 'Ethernet100/1': 'Uplink Port', 'Ethernet101/1': 'Uplink Port', 'Management1': 'Uplink Port'}}

 

Output table :

Abhineet_0-1683805713496.png

 

Labels (1)
Tags (1)
0 Karma

yuanliu
SplunkTrust
SplunkTrust

I would recommend converting the data to conformant JSON first.

| rex "detailedSwitchData *(?<detailedSwitchData>{.*})"
| rex field=detailedSwitchData mode=sed "s/'/\"/g"
| spath input=detailedSwitchData

Your sample data gives

Tags (1)
0 Karma

ITWhisperer
SplunkTrust
SplunkTrust

The issue with using spath is that the interfaces are used as field names not field values

yuanliu
SplunkTrust
SplunkTrust

@ITWhisperer makes an acute observation! The data is not formatted for machine consumption no matter which language you use. (Kind of intuitive for humans, I admit.)

So, we'll give it some transformation if you cannot persuade the developer to change. (Or if this is from an outside vendor.)

 

 

| rex "detailedSwitchData *(?<detailedSwitchData>{.*})"
| rex field=detailedSwitchData mode=sed "s/'/\"/g"
| spath input=detailedSwitchData
| rename *.* AS *_*
| foreach cnxiandcm1_*
    [eval interface = mvappend(interface, "<<MATCHSTR>>" . "::" . '<<FIELD>>')]
| mvexpand interface
| eval interface = split(interface, "::")
| eval status = mvindex(interface, 1), interface = mvindex(interface, 0)

 

 

 

With your sample data, I get

interfacestatus
Ethernet1MAC ACL Enabled
Ethernet10Dot1x Enabled
Ethernet100/1Uplink Port
Ethernet101/1Uplink Port
Ethernet11Dot1x Enabled
Ethernet12Dot1x Enabled
Ethernet13Dot1x Enabled
Ethernet14Dot1x Enabled
Ethernet15Dot1x Enabled
Ethernet16Dot1x Enabled
Ethernet17Dot1x Enabled
Ethernet18Dot1x Enabled
Ethernet19Dot1x Enabled
Ethernet2MAC ACL Enabled
Ethernet20Dot1x Enabled
Ethernet21Dot1x Enabled
Ethernet22Dot1x Enabled
Ethernet23Dot1x Enabled
Ethernet24Dot1x Enabled
Ethernet25Dot1x Enabled
Ethernet26Dot1x Enabled
Ethernet27Dot1x Enabled
Ethernet28Dot1x Enabled
Ethernet29Dot1x Enabled
Ethernet3MAC ACL Enabled
Ethernet30Dot1x Enabled
Ethernet53Dot1x Enabled
Ethernet54Dot1x Enabled
Ethernet55Dot1x Enabled
Ethernet82Dot1x Enabled
Ethernet83Dot1x Enabled
Ethernet84Dot1x Enabled
Ethernet85Dot1x Enabled
Ethernet86Dot1x Enabled
Ethernet87Dot1x Enabled
Ethernet93Dot1x Enabled
Ethernet94MAC ACL Enabled
Ethernet95MAC ACL Enabled
Ethernet96Dot1x Enabled
Ethernet97/1Uplink Port
Ethernet98/1Uplink Port
Ethernet99/1Uplink Port
Management1Uplink Port

Here's an emulation that you can play with and compare with real data

 

 

 

| makeresults
| eval _raw = "<158>May 09 04:33:46 detailedSwitchData {'cnxiandcm1': {'Ethernet1': 'MAC ACL Enabled', 'Ethernet2': 'MAC ACL Enabled', 'Ethernet3': 'MAC ACL Enabled', 'Ethernet4': 'MAC ACL Enabled', 'Ethernet5': 'Dot1x Enabled', 'Ethernet6': 'Dot1x Enabled', 'Ethernet7': 'Dot1x Enabled', 'Ethernet8': 'Dot1x Enabled', 'Ethernet9': 'Dot1x Enabled', 'Ethernet10': 'Dot1x Enabled', 'Ethernet11': 'Dot1x Enabled', 'Ethernet12': 'Dot1x Enabled', 'Ethernet13': 'Dot1x Enabled', 'Ethernet14': 'Dot1x Enabled', 'Ethernet15': 'Dot1x Enabled', 'Ethernet16': 'Dot1x Enabled', 'Ethernet17': 'Dot1x Enabled', 'Ethernet18': 'Dot1x Enabled', 'Ethernet19': 'Dot1x Enabled', 'Ethernet20': 'Dot1x Enabled', 'Ethernet21': 'Dot1x Enabled', 'Ethernet22': 'Dot1x Enabled', 'Ethernet23': 'Dot1x Enabled', 'Ethernet24': 'Dot1x Enabled', 'Ethernet25': 'Dot1x Enabled', 'Ethernet26': 'Dot1x Enabled', 'Ethernet27': 'Dot1x Enabled', 'Ethernet28': 'Dot1x Enabled', 'Ethernet29': 'Dot1x Enabled', 'Ethernet30': 'Dot1x Enabled', 'Ethernet31': 'Dot1x Enabled', 'Ethernet32': 'Dot1x Enabled', 'Ethernet33': 'Dot1x Enabled', 'Ethernet34': 'Dot1x Enabled', 'Ethernet35': 'Dot1x Enabled', 'Ethernet36': 'Dot1x Enabled', 'Ethernet37': 'Dot1x Enabled', 'Ethernet38': 'Dot1x Enabled', 'Ethernet39': 'Dot1x Enabled', 'Ethernet40': 'Dot1x Enabled', 'Ethernet41': 'Dot1x Enabled', 'Ethernet42': 'Dot1x Enabled', 'Ethernet43': 'Dot1x Enabled', 'Ethernet44': 'Dot1x Enabled', 'Ethernet45': 'Dot1x Enabled', 'Ethernet46': 'Dot1x Enabled', 'Ethernet47': 'Dot1x Enabled', 'Ethernet48': 'Dot1x Enabled', 'Ethernet49': 'Dot1x Enabled', 'Ethernet50': 'Dot1x Enabled', 'Ethernet51': 'Dot1x Enabled', 'Ethernet52': 'Dot1x Enabled', 'Ethernet53': 'Dot1x Enabled', 'Ethernet54': 'Dot1x Enabled', 'Ethernet55': 'Dot1x Enabled', 'Ethernet56': 'Dot1x Enabled', 'Ethernet57': 'Dot1x Enabled', 'Ethernet58': 'Dot1x Enabled', 'Ethernet59': 'Dot1x Enabled', 'Ethernet60': 'Dot1x Enabled', 'Ethernet61': 'Dot1x Enabled', 'Ethernet62': 'Dot1x Enabled', 'Ethernet63': 'Dot1x Enabled', 'Ethernet64': 'Dot1x Enabled', 'Ethernet65': 'Dot1x Enabled', 'Ethernet66': 'Dot1x Enabled', 'Ethernet67': 'Dot1x Enabled', 'Ethernet68': 'Dot1x Enabled', 'Ethernet69': 'Dot1x Enabled', 'Ethernet70': 'Dot1x Enabled', 'Ethernet71': 'Dot1x Enabled', 'Ethernet72': 'Dot1x Enabled', 'Ethernet73': 'Dot1x Enabled', 'Ethernet74': 'Dot1x Enabled', 'Ethernet75': 'Dot1x Enabled', 'Ethernet76': 'Dot1x Enabled', 'Ethernet77': 'Dot1x Enabled', 'Ethernet78': 'Dot1x Enabled', 'Ethernet79': 'Dot1x Enabled', 'Ethernet80': 'Dot1x Enabled', 'Ethernet81': 'Dot1x Enabled', 'Ethernet82': 'Dot1x Enabled', 'Ethernet83': 'Dot1x Enabled', 'Ethernet84': 'Dot1x Enabled', 'Ethernet85': 'Dot1x Enabled', 'Ethernet86': 'Dot1x Enabled', 'Ethernet87': 'Dot1x Enabled', 'Ethernet88': 'Dot1x Enabled', 'Ethernet89': 'MAC ACL Enabled', 'Ethernet90': 'MAC ACL Enabled', 'Ethernet91': 'MAC ACL Enabled', 'Ethernet92': 'Dot1x Enabled', 'Ethernet93': 'Dot1x Enabled', 'Ethernet94': 'MAC ACL Enabled', 'Ethernet95': 'MAC ACL Enabled', 'Ethernet96': 'Dot1x Enabled', 'Ethernet97/1': 'Uplink Port', 'Ethernet98/1': 'Uplink Port', 'Ethernet99/1': 'Uplink Port', 'Ethernet100/1': 'Uplink Port', 'Ethernet101/1': 'Uplink Port', 'Management1': 'Uplink Port'}}"

 

 

 

 

0 Karma

richgalloway
SplunkTrust
SplunkTrust

What have you tried so far?  How did it not meet expectations?

---
If this reply helps you, Karma would be appreciated.
0 Karma

ITWhisperer
SplunkTrust
SplunkTrust
| rex max_match=0 "(: \{)?'(?<InterfaceStatus>[^']+': '[^']+)'(, )?"
| fields - _raw
| mvexpand InterfaceStatus
| rex field=InterfaceStatus "(?<Interface>[^']+)': '(?<Status>[^']+)"
| fields Interface Status
0 Karma
Get Updates on the Splunk Community!

Splunk Platform | Upgrading your Splunk Deployment to Python 3.9

Splunk initially announced the removal of Python 2 during the release of Splunk Enterprise 8.0.0, aiming to ...

From Product Design to User Insights: Boosting App Developer Identity on Splunkbase

co-authored by Yiyun Zhu & Dan Hosaka Engaging with the Community at .conf24 At .conf24, we revitalized the ...

Detect and Resolve Issues in a Kubernetes Environment

We’ve gone through common problems one can encounter in a Kubernetes environment, their impacts, and the ...