Study guide
4.3 Checking Index Data Integrity
Splunk Enterprise Certified Admin SPLK-1003
Track your progress as you read
Finished sections get a check mark.
1 Introduction
About the Splunk Enterprise Certified Admin Exam
2 Chapter 1: Splunk Admin Basics
1.1 Splunk Enterprise Architecture & Core Components
3 Chapter 2: License Management
2.1 License Types, Stacks, Pools & Licensing Architecture 2.2 License Violations, Rolling Window Warnings & Troubleshooting
4 Chapter 3: Splunk Configuration Files
3.1 Splunk Configuration Directory Structure 3.2 Configuration Layering, Precedence & Resolution Rules 3.3 Using btool to Inspect & Debug Configurations
5 Chapter 4: Splunk Indexes
4.1 Index Structure: Directories, Buckets & Bucket Files 4.2 Bucket Types & the Hot-Warm-Cold-Frozen-Thawed Lifecycle 4.3 Checking Index Data Integrity 4.4 indexes.conf Options: Paths, Bucket Sizing & Volumes 4.5 The Fishbucket: File Tracking, CRC Collisions & Re-reading Files 4.6 Applying a Data Retention Policy
6 Chapter 5: Splunk User Management
5.1 Splunk Roles, Capabilities & Custom Role Design 5.2 User Account Administration, Search Restrictions & Limits
7 Chapter 6: Splunk Authentication Management
6.1 Integrating Splunk with LDAP 6.2 Other Authentication Options & Enabling Multifactor Authentication
8 Chapter 7: Getting Data In
7.1 CLI Administration & Basic Data Onboarding Workflows 7.2 Forwarder Types: Universal Forwarder vs. Heavy Forwarder
9 Chapter 8: Distributed Search
8.1 How Distributed Search Works 8.2 Roles of the Search Head and Search Peers 8.3 Configuring Search Peers & Distributed Search Groups 8.4 Search Head Scaling & Search Head Clustering (SHC)
10 Chapter 9: Getting Data In – Staging
9.1 Ingestion Pipeline Stages: Input, Parsing, Merging, Typing & Indexing 9.2 Pipeline Component Placement & Queue Management 9.3 Splunk Input Options
11 Chapter 10: Configuring Forwarders
10.1 Forwarder Setup & outputs.conf Load Balancing 10.2 Indexer Acknowledgment, Data Cloning & Forwarder Routing
12 Chapter 11: Forwarder Management
11.1 Deployment Management & the Deployment Server 11.2 Deployment Apps & Deployment Clients 11.3 Server Classes, Client Grouping & App Deployment Strategies 11.4 Forwarder Management Monitoring & Troubleshooting
13 Chapter 12: Monitor Inputs
12.1 File & Directory Monitoring Mechanics 12.2 Monitor Input Tuning: Whitelists, Blacklists & CRC Settings 12.3 Deploying a Remote Monitor Input, Network Shares & Archives
14 Chapter 13: Network and Scripted Inputs
13.1 Creating Network Inputs: TCP & UDP 13.2 Optional Settings for Network Inputs 13.3 Scripted Inputs & PowerShell Data Collection
15 Chapter 14: Agentless Inputs
14.1 Windows Management Instrumentation (WMI) Inputs 14.2 HTTP Event Collector (HEC) Architecture & Administration
16 Chapter 15: Fine Tuning Inputs
15.1 Input-Phase Processing & Default Metadata Assignment 15.2 Character Set Encoding & Handling Binary Data
17 Chapter 16: Parsing Phase and Data
16.1 Line Breaking & Event Segmentation 16.2 Timestamp Extraction, Time Zones & Clock Skew Handling 16.3 Validating Event Parsing with Data Preview
18 Chapter 17: Manipulating Raw Data
17.1 Transformation Mechanics: props.conf & transforms.conf 17.2 Data Masking, Redaction & SEDCMD 17.3 Event Routing, Dynamic Index Assignment & Filtering to nullQueue
4.3 Checking Index Data Integrity
Key Takeaways Explain This Topic AI
Data integrity control is enabled per index with enableDataIntegrityControl = true in indexes.conf (default false) and works only on local, non-SmartStore indexes.
Splunk computes a SHA-256 hash for every slice of newly indexed raw data (128 KB by default) and writes it to an l1Hashes file.
When a bucket rolls from hot to warm, Splunk hashes the l1Hashes contents into an l2Hash file; both files live in the bucket's rawdata directory.
Verify with splunk check-integrity -index <name> or -bucketPath <path>; regenerate lost hash files with splunk generate-hash-files.
Integrity control covers only data indexed after it is enabled and only data at rest; protect forwarder traffic with SSL/TLS.
Last updated: September 2026
Data Integrity Control
Blueprint objective 4.3 asks you to check index data integrity . Splunk's tool for this is data integrity control: hashes recorded at index time and verified on demand.
Data Integrity Control Architecture
Regulated environments must be able to prove that log data has not been altered since it was indexed. Splunk Enterprise provides data integrity control , which records hashes of the raw data as it is indexed so that the data can be verified later.
Turning It On
Data integrity control is enabled per index in indexes.conf on the indexers. The default is false : [security_audit]
- homePath = $SPLUNK_DB/security_audit/db
- coldPath = $SPLUNK_DB/security_audit/colddb
- thawedPath = $SPLUNK_DB/security_audit/thaweddb
- enableDataIntegrityControl = true
It applies only to local indexes. SmartStore (remote storage) indexes do not support it, and Splunk Cloud Platform does not use it.
How It Works
Slices: As raw data is indexed, the journal is written in slices. By default a slice, and therefore a hash, covers 128 KB of raw data ( rawChunkSizeBytes = 131072 ).
Level-1 hashes: Splunk computes a SHA-256 hash of every slice of newly indexed raw data and writes it to an l1Hashes file.
Level-2 hash: When the bucket rolls from hot to warm , Splunk computes a hash of the contents of the l1Hashes file and stores it in l2Hash .
Location: Both hash files are stored in the bucket's rawdata directory . journal (rawdata) ──► slice 1 ─► SHA-256 ┐
- slice 2 ─► SHA-256 ├─► l1Hashes file ──(hot→warm roll)──► SHA-256 ─► l2Hash
- slice n ─► SHA-256 ┘
Only the rawdata is hashed. The tsidx and metadata files are not covered, because they can be rebuilt from rawdata at any time.
Verifying Data Integrity via the CLI
Checks are run on demand with splunk check-integrity , either for one bucket or for a whole index: # Verify one bucket
$SPLUNK_HOME/bin/splunk check-integrity -bucketPath $SPLUNK_DB/security_audit/db/db_1695427200_1695340800_12 -verbose
- # Verify every bucket in an index
- $SPLUNK_HOME/bin/splunk check-integrity -index security_audit -verbose
The command recomputes hashes from the journal and compares them with the stored hash files. A mismatch means the rawdata changed after it was indexed, whether through tampering or corruption.
Regenerating Lost Hash Files
If the hash files for a bucket are lost, Splunk can recreate them from the hashes stored in the journal: $SPLUNK_HOME/bin/splunk generate-hash-files -index security_audit
$SPLUNK_HOME/bin/splunk generate-hash-files -bucketPath <bucket_path>
For stronger protection, Splunk suggests you can also copy hash files to storage outside the indexer, in separate directories to avoid name conflicts. An attacker who controls the indexer then cannot quietly change both the data and its hashes.
An Integrity Check Workflow
A typical audit request ("prove these security events have not been altered") works like this:
Confirm coverage. Check with splunk btool indexes list <index> --debug | grep enableDataIntegrityControl that the index had the setting enabled for the whole audit period. Buckets created before it was enabled carry no hashes.
Run the check on each indexer that holds the index: splunk check-integrity -index <index> . On an indexer cluster, run it on the peers, which hold the bucket copies.
Review the result for each bucket. A bucket whose recomputed hashes match l1Hashes / l2Hash passes. A mismatch identifies the bucket whose rawdata no longer matches what was indexed, and -verbose prints more detail.
Keep evidence. Save the command output with the audit record. If you copied hash files to separate storage, compare them as well, so that a change to both data and hashes on the indexer would still be detected.
What Integrity Control Does Not Cover
Missing buckets: deleting a whole bucket leaves nothing to check. Track bucket inventories, and control who can reach the index directories.
Frozen or archived data: once a bucket is frozen, its protection depends on how and where you archive it.
Data before indexing: hashes describe the rawdata as it was written, after any masking with SEDCMD or transforms. They say nothing about the original source file.
Index files: .tsidx files and metadata are not hashed. They can be rebuilt from rawdata.
Operational Notes
- Point What to remember
- Scope Per index, local indexes only (no SmartStore)
- Default enableDataIntegrityControl = false
- Slice size 128 KB by default ( rawChunkSizeBytes )
- Hash files l1Hashes (per slice) and l2Hash (at hot→warm roll), in rawdata/
- Verify splunk check-integrity -index <name> or -bucketPath <path>
- Clusters The cluster manager and all peers must run 6.3 or later for accurate replication of hashed buckets
- In transit Integrity control covers data at rest. Protect forwarder traffic with SSL/TLS
Integrity control also records hashes only for data indexed after you enable it, so turn it on before the audit period you need to defend.