Splunk Enterprise - Data Analytics & SIEM Platform

Comprehensive analysis of Splunk Enterprise and its selective use for critical production/preprod environments.

Table of contents

  1. Overview
    1. Vendor Information
  2. Why Splunk for PreProd + Prod Only?
    1. Customer’s Selective Strategy
    2. Cost Comparison
  3. Core Capabilities
    1. 1. Search Processing Language (SPL)
    2. 2. Data Models & Pivot
    3. 3. Enterprise Security (ES) App
    4. 4. Dashboards & Visualizations
  4. Architecture in Cursor Environment
    1. Splunk Deployment
    2. Data Ingestion Strategy
  5. Key Features for Cursor Security
    1. 1. Compliance Reporting
    2. 2. Advanced Correlation
    3. 3. Machine Learning
    4. 4. SOAR Integration
  6. Integration with Other Tools
    1. Splunk + Chronicle
    2. Splunk + Cribl
    3. Splunk + CrowdStrike
  7. Pricing Model
    1. Per-GB Licensing
    2. Workload-Based Pricing (New)
  8. Strengths & Weaknesses
    1. Strengths ✅
    2. Weaknesses ⚠️
  9. Best Practices for Splunk
    1. 1. Optimize Ingestion
    2. 2. Use Summary Indexing
    3. 3. Manage License Usage
    4. 4. Implement Data Retention
  10. Why Not Splunk-Only?
  11. Resources & Links
    1. Certifications
  12. Conclusion

Overview

Splunk Enterprise is a powerful data analytics platform widely used for Security Information and Event Management (SIEM), log management, and operational intelligence. It’s known for its sophisticated search capabilities and extensive visualization options.

Vendor Information

   
Company Splunk Inc. (Cisco subsidiary since 2024)
Founded 2003
Headquarters San Francisco, CA
Founders Michael Baum, Rob Das, Erik Swan
Website https://www.splunk.com
Status Private (acquired by Cisco)
Notable Industry standard SIEM for 20+ years

Why Splunk for PreProd + Prod Only?

Customer’s Selective Strategy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Environment Strategy:
├── Dev/Test/UAT → Chronicle ONLY
│   ├── Reason: Cost optimization
│   ├── Volume: 450 GB/day
│   └── Cost: $0 incremental (Chronicle flat rate)
│
└── PreProd/Prod → Chronicle + Splunk
    ├── Reason: Advanced analytics, compliance, mature tooling
    ├── Volume: 1.15 TB/day (after Cribl reduction)
    └── Cost: $150/GB × 35 GB/day = $5,250/day = $157K/month

Why This Makes Sense:
✅ Splunk where analytics matter most (production)
✅ Splunk for compliance evidence (auditors prefer it)
✅ Splunk for mature integrations (SOAR, ticketing)
✅ Chronicle for cost-effective bulk storage
✅ 86% cost savings vs Splunk-only

Cost Comparison

Scenario: 1.6 TB/day total across all environments

Option 1: Splunk Only (❌ Not chosen)

1
2
3
4
5
All environments to Splunk:
1.6 TB/day × $150/GB = $240,000/day = $7.2M/month
Annual: $86.4M

Result: Prohibitively expensive

Option 2: Chronicle Only (⚠️ Considered but not chosen)

1
2
3
4
5
6
7
8
All environments to Chronicle:
Flat rate: ~$100K/year

Result: Very cost-effective but:
- Less mature analytics
- Fewer integrations
- Team less familiar
- Compliance concerns

Option 3: Hybrid (✅ Chosen)

1
2
3
4
5
6
7
8
Dev/Test/UAT → Chronicle (1.15 TB/day): $100K/year
PreProd/Prod → Chronicle + Splunk (450 GB/day):
  - Chronicle: $0 incremental
  - Splunk: 35 GB/day after Cribl reduction
  - Splunk cost: $157K/month = $1.9M/year

Total: ~$2M/year
Savings vs Splunk-only: $84.4M/year (98% reduction!)

Core Capabilities

1. Search Processing Language (SPL)

Industry-Standard Query Language:

  • Powerful pipe-based syntax
  • 140+ built-in commands
  • Statistical functions
  • Machine learning capabilities

Example SPL Queries:

Query 1: Azure OpenAI API usage by user

index=azure_openai sourcetype=api_logs
| eval cost=tokens_used * 0.00001
| stats 
    count as api_calls,
    sum(tokens_used) as total_tokens,
    sum(cost) as total_cost,
    avg(response_time) as avg_response_ms
  by user_email
| sort -total_cost
| head 20

Query 2: Failed Key Vault access attempts

index=azure sourcetype=keyvault:audit
| search result=failure action=GetSecret
| stats count by user_email, secret_name, src_ip
| where count > 5
| eval risk_level=case(
    count > 20, "CRITICAL",
    count > 10, "HIGH",
    count > 5, "MEDIUM",
    1=1, "LOW"
  )
| table user_email, secret_name, src_ip, count, risk_level

Query 3: Correlation - Malware + Data Exfiltration

# Find users with both malware detection AND large data transfer
index=crowdstrike sourcetype=detection severity=high
| rename user as cs_user
| join cs_user [
    search index=azure_firewall action=Allow bytes_out>1000000000
    | rename user as cs_user
  ]
| table cs_user, malware_family, dest_ip, bytes_out, timestamp
| convert ctime(timestamp)

2. Data Models & Pivot

Pre-Built Data Models:

  • Authentication
  • Change Analysis
  • Network Traffic
  • Vulnerability
  • Malware

Benefit: Point-and-click investigation without SPL

Example Use Case:

1
2
3
4
5
6
7
8
9
Security Analyst Workflow:
1. Open "Authentication" data model
2. Pivot on: failed_logins
3. Filter: last 24 hours, >5 attempts
4. Group by: source_ip, user
5. Visualize: Geographic map
6. Result: Identify credential stuffing attack origins
   
Time: 2 minutes (vs 15 minutes writing SPL)

3. Enterprise Security (ES) App

Splunk’s SIEM Solution:

  • Notable events (security incidents)
  • Risk-based alerting
  • Incident review workflow
  • Asset and identity correlation
  • Threat intelligence integration

Notable Events Dashboard:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Today's Notable Events:
├── Critical (2)
│   ├── Ransomware detected on LAPTOP-042
│   └── Key Vault secret exposed in logs
│
├── High (15)
│   ├── Brute force login attempt (multiple users)
│   ├── Unusual Azure OpenAI usage spike
│   └── CrowdStrike isolation event
│
├── Medium (48)
│   └── Various policy violations
│
└── Low (156)
    └── Informational alerts

Risk Scoring:

# Splunk ES aggregates risk from multiple sources
index=risk
| stats 
    sum(risk_score) as total_risk,
    values(risk_message) as risk_reasons,
    count as risk_events
  by risk_object
| where total_risk > 100
| eval risk_level=case(
    total_risk > 200, "CRITICAL",
    total_risk > 100, "HIGH",
    1=1, "MEDIUM"
  )
| sort -total_risk

4. Dashboards & Visualizations

Advanced Visualization Options:

  • Time charts (line, area, column)
  • Single value metrics
  • Gauges and meters
  • Tables and lists
  • Geolocation maps
  • Sankey diagrams
  • Custom visualizations via JavaScript

Example: Executive Security Dashboard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<dashboard>
  <label>Cursor Security Executive Dashboard</label>
  <row>
    <panel>
      <title>Security Incidents (Last 24h)</title>
      <single>
        <search>
          <query>
            index=notable severity IN (critical, high)
            | stats count
          </query>
        </search>
        <option name="drilldown">all</option>
        <option name="rangeColors">["0x65A637","0xF7BC38","0xF58F39","0xD93F3C"]</option>
        <option name="rangeValues">[0,5,10,20]</option>
      </single>
    </panel>
    
    <panel>
      <title>Azure OpenAI Cost Trend</title>
      <chart>
        <search>
          <query>
            index=azure_openai
            | timechart span=1h sum(cost) as hourly_cost
          </query>
        </search>
        <option name="charting.chart">column</option>
      </chart>
    </panel>
    
    <panel>
      <title>Top Users by Risk Score</title>
      <table>
        <search>
          <query>
            index=risk
            | stats sum(risk_score) as total_risk by user
            | sort -total_risk
            | head 10
          </query>
        </search>
      </table>
    </panel>
  </row>
</dashboard>

Architecture in Cursor Environment

Splunk Deployment

graph TB
    subgraph "Cribl Stream"
        A[Data Router]
        B[PreProd/Prod Filter]
    end
    
    subgraph "Splunk Infrastructure"
        C[Heavy Forwarders]
        D[Indexers Cluster]
        E[Search Heads]
        F[Deployer]
    end
    
    subgraph "Splunk Apps"
        G[Enterprise Security]
        H[IT Service Intelligence]
        I[Custom Dashboards]
    end
    
    subgraph "Users"
        J[Security Analysts]
        K[SOC Team]
        L[Executives]
    end
    
    A --> B
    B --> C
    C --> D
    D --> E
    E --> G
    E --> H
    E --> I
    
    G --> J
    G --> K
    H --> K
    I --> L
    
    style D fill:#dc2626,stroke:#991b1b,color:#fff
    style G fill:#7c3aed,stroke:#5b21b6,color:#fff
    style J fill:#10b981,stroke:#059669,color:#fff

Data Ingestion Strategy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Cribl routes to Splunk (PreProd/Prod only)
splunk_ingestion:
  sources:
    - azure_firewall:
        environments: [preprod, prod]
        volume_before_cribl: 750 GB/day
        volume_after_cribl: 20 GB/day  # 97% reduction!
        reduction_techniques:
          - sampling: 50% of allowed connections
          - aggregation: repetitive events
          - filtering: debug logs removed
    
    - azure_openai:
        environments: [prod]
        volume: 5 GB/day
        priority: high  # All prod AI calls to Splunk
    
    - key_vault:
        environments: [preprod, prod]
        volume: 3 GB/day
        priority: critical  # Compliance requirement
    
    - crowdstrike_detections:
        environments: all  # Even dev detections to Splunk
        volume: 5 GB/day
        priority: critical
    
    - okta_logs:
        environments: [prod]
        volume: 2 GB/day
        priority: high
  
  total: 35 GB/day to Splunk
  cost: $150/GB × 35 GB = $5,250/day

Key Features for Cursor Security

1. Compliance Reporting

Audit-Ready Reports:

# SOC 2 Compliance Report: Key Vault Access
index=azure_keyvault
| eval access_time=strftime(_time, "%Y-%m-%d %H:%M:%S")
| table access_time, user, operation, secret_name, result, src_ip
| outputlookup keyvault_audit_report.csv

Why Splunk for Compliance:

  • Auditors familiar with Splunk
  • Immutable logging (if configured)
  • Extensive audit trail
  • Pre-built compliance apps
  • Easy to generate evidence

2. Advanced Correlation

Multi-Source Correlation:

# Detect: Malware + Unusual Azure activity + Key Vault access
index=crowdstrike sourcetype=detection
| rename user as cs_user, _time as malware_time
| join type=inner cs_user [
    search index=azure_activity action=sensitive
    | rename user as cs_user, _time as azure_time
    | where azure_time > (malware_time - 3600)  # Within 1 hour
  ]
| join type=inner cs_user [
    search index=azure_keyvault action=GetSecret
    | rename user as cs_user, _time as kv_time
    | where kv_time > malware_time
  ]
| table cs_user, malware_family, malware_time, azure_activity, azure_time, secret_accessed, kv_time
| eval attack_chain="Malware → Azure Compromise → Secret Theft"

3. Machine Learning

Anomaly Detection:

# Detect unusual API call volumes
index=azure_openai
| timechart span=1h count by user
| `detect_outliers(count, 3)`  # 3 standard deviations
| where isOutlier=1
| table _time, user, count, lowerBound, upperBound
| eval anomaly_description="User made " + count + " API calls (normal range: " + lowerBound + "-" + upperBound + ")"

Predictive Analytics:

# Predict future cost based on trends
index=azure_openai
| timechart span=1d sum(cost) as daily_cost
| predict daily_cost future_timespan=30 algorithm=LLP5
| table _time, daily_cost, prediction

4. SOAR Integration

Splunk Phantom (SOAR):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Automated playbook
playbook:
  trigger: "Notable event: Credential compromise"
  
  actions:
    1:
      tool: "Okta API"
      action: "Disable user account"
      
    2:
      tool: "CrowdStrike API"
      action: "Isolate user's device"
      
    3:
      tool: "Azure API"
      action: "Revoke all tokens"
      
    4:
      tool: "Key Vault API"
      action: "Rotate accessed secrets"
      
    5:
      tool: "ServiceNow API"
      action: "Create P1 incident ticket"
      
    6:
      tool: "Slack API"
      action: "Notify SOC team"
  
  execution_time: "<2 minutes"
  manual_time: "~30 minutes"

Integration with Other Tools

Splunk + Chronicle

Complementary, Not Duplicate:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Data Flow Strategy:
All data → Chronicle (long-term, bulk analysis)
Critical data → Splunk (real-time, detailed analysis)

Use Cases:
├── Threat Hunting: Start in Chronicle (cheap, fast search)
│   ├── If interesting: Deep dive in Splunk
│   └── Splunk provides richer context
│
├── Compliance: Splunk (auditor preference)
│   └── Chronicle as backup/archive
│
├── Executive Dashboards: Splunk (better visualizations)
│   └── Chronicle for underlying data
│
└── Cost Optimization: Chronicle (bulk), Splunk (critical)

Splunk + Cribl

Cribl Reduces Splunk Costs 97%:

1
2
3
4
5
6
7
8
9
Without Cribl:
750 GB/day → Splunk = $112,500/day

With Cribl:
750 GB/day → Cribl processing → 20 GB/day → Splunk = $3,000/day

Savings: $109,500/day = $3.28M/month
Cribl license: ~$80K/year
Net savings: $39M/year (!)

Splunk + CrowdStrike

Bidirectional Integration:

# Splunk receives CrowdStrike detections
index=crowdstrike sourcetype=detection

# Splunk enriches with context
| lookup user_info user OUTPUT department, manager, risk_score

# Splunk triggers CrowdStrike actions via API
| where severity="CRITICAL"
| sendalert crowdstrike_isolate param.device_id=$device_id

Pricing Model

Per-GB Licensing

Ingestion-Based Pricing:

1
2
3
4
5
6
7
8
9
10
Splunk Licensing Tiers:
├── $50-100/GB: Small deployments (<100 GB/day)
├── $100-150/GB: Medium (100-500 GB/day)
├── $150-200/GB: Large (500 GB+ /day)
└── $200+/GB: Very large (multi-TB/day)

Customer Pricing (assumed):
35 GB/day × $150/GB = $5,250/day
Monthly: $157,500
Annual: $1.89M

Hidden Costs:

1
2
3
4
5
6
7
8
9
10
11
Total Cost of Ownership:
├── License: $1.89M/year
├── Infrastructure: $300K/year
│   ├── Servers (on-prem or cloud)
│   ├── Storage (hot + cold)
│   └── Network egress
├── Personnel: $500K/year
│   ├── Splunk admin (1 FTE)
│   ├── Training
│   └── Consulting
└── Total: ~$2.7M/year

Workload-Based Pricing (New)

Splunk Cloud (alternative):

1
2
3
4
5
6
7
8
9
Workload Pricing:
├── Ingest: $X per GB
├── Search: $Y per query
├── Storage: $Z per GB-month
├── Users: Included
└── Predictable monthly bill

Benefit: More predictable than on-prem
Cost: Typically 20-30% more than on-prem

Strengths & Weaknesses

Strengths ✅

  1. Maturity: 20+ years, battle-tested
  2. Ecosystem: Thousands of integrations and apps
  3. Visualization: Best-in-class dashboards
  4. Query Language: Powerful SPL
  5. Compliance: Auditor favorite
  6. Community: Large user base, extensive documentation

Weaknesses ⚠️

  1. Cost: Extremely expensive at scale
  2. Complexity: Steep learning curve
  3. Performance: Can be slow with large datasets
  4. Architecture: Requires significant infrastructure
  5. Vendor Lock-In: Difficult to migrate away

Best Practices for Splunk

1. Optimize Ingestion

# Use index-time field extraction sparingly
# Better: Search-time extraction

# Bad (index-time):
TRANSFORMS-extract_user = user_extraction

# Good (search-time):
| rex field=_raw "user=(?<user>\w+)"

2. Use Summary Indexing

# Pre-compute expensive searches
index=azure_openai
| stats sum(cost) as daily_cost by date_mday, user
| collect index=summary_openai_cost

3. Manage License Usage

1
2
3
4
5
# Monitor daily ingestion
splunk search 'index=_internal source=*license_usage.log* type="Usage"
| eval gb=b/1024/1024/1024
| stats sum(gb) as total_gb by date_mday
| where total_gb > 35  # Alert if over quota'

4. Implement Data Retention

1
2
3
4
5
6
7
# indexes.conf
[azure_openai]
frozenTimePeriodInSecs = 2592000  # 30 days hot
coldToFrozenDir = /cold/azure_openai
maxTotalDataSizeMB = 500000  # 500 GB max

# Move to Chronicle for long-term storage

Why Not Splunk-Only?

Decision Rationale:

  1. Cost Prohibitive:
    • $86M/year for all environments
    • Chronicle reduces to $2M/year (98% savings)
  2. Overkill for Dev/Test:
    • Don’t need Splunk’s power for dev logs
    • Chronicle sufficient for troubleshooting
  3. Encourages Data Sampling:
    • High cost forces organizations to sample data
    • Chronicle allows complete logging
  4. Infrastructure Burden:
    • Splunk requires significant ops overhead
    • Chronicle is fully managed

But Keep Splunk For:

  • Production security monitoring
  • Compliance reporting
  • Advanced analytics
  • Mature integrations
  • Team expertise

Certifications

  • Splunk Core Certified User
  • Splunk Core Certified Power User
  • Splunk Enterprise Certified Admin
  • Splunk Enterprise Security Certified Admin

Conclusion

For Cursor Security Architecture:

Splunk Enterprise provides mature, powerful analytics for production and pre-production environments where advanced correlation, compliance reporting, and sophisticated dashboards are essential.

Key Value Props for Cursor:

  1. ✅ Mature SIEM with 20+ years of development
  2. ✅ Powerful correlation across multiple data sources
  3. ✅ Compliance-ready reporting (auditor favorite)
  4. ✅ Advanced visualizations and dashboards
  5. ✅ Extensive integration ecosystem

Recommendation: Essential for critical environments but use selectively due to cost. Hybrid approach with Chronicle provides best ROI.


Last Updated: October 10, 2025
Review Status: Production Validated