Skip to main content

Splunk Source Node

The splunkSource node in ZephFlow enables you to ingest data from Splunk Enterprise or Splunk Cloud Platform by executing SPL search queries against the Splunk REST API.

Overview​

The Splunk source node connects to a Splunk instance via its management port, submits a search job using SPL (Search Processing Language), waits for the job to complete, and emits the resulting records into your ZephFlow pipeline. This is a batch source — it runs the query once per pipeline execution.

Key Features​

  • SPL Query Support: Execute any valid SPL search query against your Splunk instance
  • Credential Management: Authenticate with username/password credentials
  • SSL Configuration: Optional SSL certificate validation for HTTPS connections

Parameters​

ParameterTypeDescriptionRequired
splunkUrlStringFull URL of the Splunk management endpoint (e.g., https://host:8089)Yes
searchQueryStringSPL query to execute (e.g., search index=main sourcetype=syslog)Yes
validateCertificatesbooleanWhether to validate SSL certificates for HTTPS connectionsNo
credentialIdStringID of a UsernamePasswordCredential in jobContext.otherPropertiesYes

Config Object​

The full config object for the Splunk source node (SplunkSourceDto.Config):

FieldTypeRequiredDefaultDescription
splunkUrlStringYes—Full URL of the Splunk management endpoint (e.g., https://host:8089)
searchQueryStringYes—SPL query to execute
credentialIdStringYes—Credential ID for Splunk authentication
validateCertificatesbooleanNofalseWhether to validate SSL certificates for HTTPS connections
batchSizeintNo10000Number of results to fetch per batch
jobInitTimeoutMslongNo300000Timeout in milliseconds for search job initialization
earliestTimeStringNonullEarliest time bound for the search (Splunk time format)
latestTimeStringNonullLatest time bound for the search (Splunk time format)

DAG Examples​

The credential is registered in jobContext.otherProperties under a credentialId.

Basic Usage​

jobContext:
otherProperties:
splunk-cred:
username: "splunk-username"
password: "splunk-password"

dag:
- id: "splunk_source"
commandName: "splunksource"
config:
splunkUrl: "https://splunk.example.com:8089"
searchQuery: "search index=main sourcetype=access_log | head 100"
validateCertificates: false
credentialId: "splunk-cred"
outputs: []

Log Ingestion Pipeline​

jobContext:
otherProperties:
splunk-cred:
username: "splunk-user"
password: "splunk-pass"

dag:
- id: "splunk_source"
commandName: "splunksource"
config:
splunkUrl: "https://splunk.example.com:8089"
searchQuery: "search index=main sourcetype=access_log | head 1000"
validateCertificates: false
credentialId: "splunk-cred"
outputs:
- "mark_ingested"

- id: "mark_ingested"
commandName: "eval"
config:
expression: "dict_merge($, dict(ingested=true))"
outputs:
- "kafka_sink"

- id: "kafka_sink"
commandName: "kafkasink"
config:
broker: "kafka:9092"
topic: "splunk-records"
encodingType: "JSON_OBJECT"
outputs: []

With SSL Validation​

jobContext:
otherProperties:
splunk-cred:
username: "splunk-user"
password: "splunk-pass"

dag:
- id: "splunk_source"
commandName: "splunksource"
config:
splunkUrl: "https://splunk-prod.internal:8089"
searchQuery: "search index=security sourcetype=firewall action=blocked"
validateCertificates: true
credentialId: "splunk-cred"
outputs:
- "high_severity"

- id: "high_severity"
commandName: "filter"
config:
expression: '$.severity == "high"'
outputs:
- "s3_sink"

- id: "s3_sink"
commandName: "s3sink"
config:
regionStr: "us-east-1"
bucketName: "security-logs"
keyName: "blocked-records"
encodingType: "JSON_OBJECT_LINE"
outputs: []