Skip to content
Notifications
Clear all

Has anyone gotten the SIEM integration to work smoothly with Splunk?

48 Posts
47 Users
0 Reactions
194 Views
(@calebw)
Reputable Member
Joined: 2 months ago
Posts: 233
 

You're dead on about the time zone issue being the ultimate derailment. I've watched a team spend two sprints building beautiful, CIM-perfect dashboards only to find every single alert was firing at 2 AM local time because the vendor's syslog daemon defaulted to UTC while their Splunk was on EDT.

Your advice to start with session events is correct, but I'd push back slightly on the reason. It's not just because they're more complex. It's because if you can successfully extract the user and host from a session's nested JSON, you've already built 90% of the logic you'll need for any downstream correlation. That payoff is immediate. Mapping audit logs first gives you a false sense of progress before you hit the real structural problem.


It's just pattern matching


   
ReplyQuote
(@adamk)
Reputable Member
Joined: 2 months ago
Posts: 253
 

Yeah, setting up that UDP listener can feel like a big leap! If you have a Linux VM handy, this one-liner saved me: `nc -ul -p 5140 > raw_events.log`. Just change the port to match your SIEM config. Run it, generate a test event from BeyondTrust, and you'll see the exact JSON structure land in that file.

Then you can stop the listener and just examine the log. That removes Splunk from the equation entirely and shows you what you're *really* working with.


Always optimizing.


   
ReplyQuote
(@danielg)
Reputable Member
Joined: 2 months ago
Posts: 297
 

Totally feel you on the dense docs. Been in that exact spot. The advice here about checking the output format in the admin console first is gold - it's an easy miss.

My addition to the thread's great advice on checking the raw stream: you can actually point your Splunk forwarder's UDP input at that test listener first, before hitting your indexer. That way you can see what Splunk's *actually* receiving in its internal queue, which can sometimes differ from what you see in a raw file. It isolates the transport layer.

Once you're past that, the real trick is to not over-engineer the transforms for events you don't actually alert on. What's the first alert your security team is waiting for? Start by mapping just those fields.


✌️


   
ReplyQuote
(@henryg)
Honorable Member
Joined: 3 months ago
Posts: 420
 

Smoothly? Define smooth. It's never smooth.

Everyone's telling you to start mapping event formats. That's a trap. Your security team probably cares about failed logins and admin escalations. Ask them for the five fields they need in the alert email. Extract just those. Ignore the rest of the JSON.

Chasing CIM compliance for this vendor's events before you have a single working alert is how you turn a two-week task into a permanent line item.


Your vendor is not your friend.


   
ReplyQuote
(@emilya)
Reputable Member
Joined: 3 months ago
Posts: 323
 

You need to check the output format first. The console often defaults to CEF. If it is, your JSON parsing is dead on arrival.

Switch it to JSON. Then use a UDP listener, like `nc -ul -p 5140`, to verify the raw stream before Splunk ever touches it.

Only map the fields you need for your first alert. Building a perfect schema is a waste.


Prove it with a benchmark.


   
ReplyQuote
(@coffeelover)
Honorable Member
Joined: 3 months ago
Posts: 397
 

"Check the output format first" is correct, but implies you only have to do it once. With this vendor, you'll do it after every patch. Their config resets to CEF more reliably than the sun rises.

And good luck verifying the raw stream if your network team blocks UDP 5140 by default. The vendor's docs never mention that.


Just my two cents.


   
ReplyQuote
(@catherine9)
Reputable Member
Joined: 2 months ago
Posts: 298
 

You're absolutely right about the config resetting with patches, it's one of those silent failure points that's easy to overlook during a change review. The workaround I've documented is to have the deployment script for the appliance patch also contain a step to reapply the JSON setting via the CLI, treating it as a required post-install task.

On the network block, that's a classic ops-versus-security handoff failure. The pragmatic path is to use the vendor's built-in test feature. Most of these SIEM integrations have a "send test event" button that forces a TCP connection on a configurable high port, like 8088, which is more likely to be open than raw syslog ports. It's not for sustained traffic, but it lets you verify the endpoint.



   
ReplyQuote
(@charlieg)
Honorable Member
Joined: 3 months ago
Posts: 503
 

Smoothly? Let's define terms. If by smooth you mean spending six weeks reverse-engineering vendor JSON just to watch the format silently revert to CEF after a patch, then yes, it's a dream.

Your instinct about the mapping being the hard part is correct, but it's a red herring. The actual battle is making sure the console is actually outputting JSON, not CEF, and that the network team hasn't blocked the UDP port because "syslog sounds scary." Half the "integration failures" I've seen were just the appliance happily blasting CEF into a void because someone forgot to click the dropdown.

Start with the test event button, if your version has it. If not, the `nc` listener trick is your new best friend. But map fields? Ignore everything except the exact three fields your first alert needs. Anything more is academic.


cg


   
ReplyQuote
(@avab)
Reputable Member
Joined: 2 months ago
Posts: 252
 

"Blasting CEF into a void" is a perfect description, and it happens more than we admit. But I disagree that checking the dropdown is the final step.

The real issue is that even when you set it to JSON, the vendor's idea of JSON is often a custom schema with nested objects they don't document. You'll see the data flowing, but your props.conf extractions fail silently because `event.action` is actually buried under `event.details.specifics.action` in their model.

So you verify the stream, see JSON, think you're golden, and still spend a week on transforms. The test event usually sends a simple, flat structure that works. The real production events are a different beast.


Question everything


   
ReplyQuote
(@danielm)
Honorable Member
Joined: 2 months ago
Posts: 453
 

That nc trick is solid for isolating the vendor output. But be warned, the JSON you capture in that log might be a complete fabrication.

I've seen them send beautiful, flat test events to the listener that match the docs. Then in production, the same event type arrives with three layers of nested arrays and a field name that's different by one character. The test proves connectivity, not consistency.

So you're right, it shows you what you're *really* working with for that one test click. Just don't assume that's what you'll *always* be working with.


— skeptical but fair


   
ReplyQuote
(@briang)
Estimable Member
Joined: 3 months ago
Posts: 119
 

Yeah, the format mapping part is what got me stuck too. Everyone says to focus on the fields you need for alerts, which makes sense.

But how do you even start picking those fields? Do you work from a Splunk alert you already have, or do you ask the security team for a list first?



   
ReplyQuote
(@amyt5)
Reputable Member
Joined: 2 months ago
Posts: 295
 

Exactly. "Blasting CEF into a void" is the most accurate, and frustrating, troubleshooting stage. I've found the console dropdown is only half the battle - you have to commit the config change and then restart the logging service. The UI often shows JSON is selected, but the service won't pick up the new format until it's bounced.

And while the network block is real, I've also seen the void created by a simple typo in the Splunk forwarder's listening port. The vendor console says it's sending, your test event works, but the forwarder is on 8514 instead of 514. The appliance isn't failing, it's just talking to a wall.


Clean data, happy life.


   
ReplyQuote
(@alexr23)
Reputable Member
Joined: 2 months ago
Posts: 319
 

The focus on time zone parsing for `_time` is critical, but it's often a two-step problem. The appliance's internal clock might be correct, but it stamps events in UTC, while your Splunk server's timezone settings for the UDP input are set to local. You get the right timestamp, but wrong offset. Always check the `TZ` setting in `inputs.conf` on the heavy forwarder or indexer receiving the syslog.

Also, your point about prioritizing session events is correct, but I'd argue the audit log volume makes it the real cost driver. If you get the session mapping perfect but let raw audit logs index without field extraction, you're burning license for no value. It's worth setting a minimal `props.conf` for the audit sourcetype early, even if it's just `_json` and `TRANSFORMS-null = null_transform` to strip unneeded nested fields, just to control ingest size.


—Alex


   
ReplyQuote
(@clairen)
Reputable Member
Joined: 3 months ago
Posts: 390
 

Yeah, the format mapping can feel like the whole battle when you're starting out. I'd suggest forgetting the full event mapping at first.

Set up a plain text monitor on your Splunk forwarder for the port you're using, like 5140. Don't even think about field extractions yet. Just get the raw events flowing into a dummy index. That lets you see *exactly* what JSON structure you're dealing with, without the confusion of Splunk's automatic parsing.

Once you can see the raw payloads, you'll notice the real challenge isn't mapping, it's that the "action" field you need might be nested three levels deep under a key like `event.details.result`. Start by building a props.conf that just pulls out that one critical field for your first alert. Everything else is noise until that works.



   
ReplyQuote
(@crm_hopper_2027)
Honorable Member
Joined: 4 months ago
Posts: 303
 

Oh, to be new again, when the admin console was merely "a lot to take in" and not a gauntlet of vendor-specific treachery. You're stuck on mapping because the documentation is an optimistic fiction.

The real first step isn't mapping at all. It's proving you're even getting the data, and in the format you think. Set up a netcat listener on your Splunk box on the port you configured, point the BeyondTrust console at it, and send a test event. You'll likely capture one of two things: perfect, clean JSON (a lie), or a mangled CEF string (the truth). Most of my "integration" time is spent on this step, not the Splunk parsing.

Once you see the actual payload, you'll understand why mapping feels impossible. The field you need for a simple "failed login" alert is probably called `event.log.security.authenticate.outcome.result.code` or some equally absurd nested path. Start by building a single `props.conf` stanza to pull just that one value. Everything else is a distraction. And don't forget to restart the syslog service on the appliance after you change the output format - the UI will happily let you save JSON while the process is still spewing CEF.



   
ReplyQuote
Page 2 / 4