Selamlar, bu yazımda Splunk’ta veri bütünlüğünün nasıl doğrulanabileceğini ve Data Integrity Control özelliğinin nasıl alarm mekanizmasına dönüştürülebileceğini ele alacağız. Şimdiden keyifli okumalar. 🙂
Splunk Data Integrity Control, indexlenen verinin sonradan değiştirilip değiştirilmediğini doğrulamak için kullanılan hash tabanlı bir bütünlük kontrol mekanizmasıdır. Bu özellik index bazında açılır ve açıldıktan sonra indexlenen yeni raw data için hash bilgileri üretir.
Bu yazıda test ortamında Data Integrity Control özelliğinin nasıl etkinleştirildiği, yeni veri ile nasıl doğrulandığı, kontrollü bozulma testinin nasıl yapıldığı ve sonucun alarm mekanizmasına nasıl çevrildiği adım adım gösterilecektir.
Önemli ayrım: Data Integrity Control verinin değiştirilmesini engellemez; veri veya bucket yapısı değişirse bunu check-integrity doğrulaması ile tespit etmeye yardımcı olur
Kapsam ve Varsayımlar
| Başlık | Açıklama |
| Test indexi | windows2 |
| Splunk home path | /opt/splunk |
| Index data path | /opt/splunk/var/lib/splunk |
| Kontrol komutu | splunk check-integrity |
| Script log dosyası | /opt/splunk/var/log/splunk/data_integrity_check.log |
| Script sonuç indexi | splunk_integrity |
| Sourcetype | splunk:data_integrity:check |
| Test tipi | Standalone test; distributed/indexer cluster notları ayrıca verilmiştir |
Data Integrity Nasıl Çalışır?
Data Integrity Control aktif edildiğinde Splunk, yeni indexlenen raw data dilimleri için SHA-256 tabanlı hash üretir. Bu hashler bucket içindeki rawdata dizininde tutulur. Hot bucket warm bucket’a döndüğünde Splunk, l1Hashes içeriği için üst seviye l2Hash bilgisini üretir.
$SPLUNK_DB/<index>/db/<bucket>/rawdata/journal.zst
$SPLUNK_DB/<index>/db/<bucket>/rawdata/l1Hashes_*.dat
$SPLUNK_DB/<index>/db/<bucket>/rawdata/l2Hash_*.dat
Kritik bilgi: Data Integrity yalnızca özellik açıldıktan sonra indexlenen yeni veriler için hash üretir. Daha önce oluşmuş bucketlar için Journal has no hashes sonucu alınması normaldir.
4. Adım Adım Uygulama
4.1 Mevcut index ayarını kontrol etme
İlk olarak test edilecek indexin mevcut ayarları btool ile kontrol edilir.
/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep -E
“^\[windows2\]|homePath|coldPath|thawedPath|enableDataIntegrityControl”
4.2 Index stanza dosyasını bulma
windows2 index stanza’sının hangi indexes.conf dosyasından geldiği bulunur.
grep -Rni “^\[windows2\]” /opt/splunk/etc 2>/dev/null
4.3 Data Integrity Control özelliğini enable etme
İlgili index stanza’sına sadece aşağıdaki satır eklenir. Mevcut homePath, coldPath ve thawedPath satırları silinmemelidir.
[windows2]
enableDataIntegrityControl = true
Örnek tam stanza:
[windows2]
homePath = $SPLUNK_DB/windows2/db
coldPath = $SPLUNK_DB/windows2/colddb
thawedPath = $SPLUNK_DB/windows2/thaweddb
enableDataIntegrityControl = true
4.4 Ayarı doğrulama ve restart
/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep enableDataIntegrityControl
/opt/splunk/bin/splunk restart
/opt/splunk/bin/splunk status

4.5 Splunk arayüzünden aktiflik kontrolü
Data Integrity aktifliği Search ekranından REST endpoint ile kontrol edilebilir.
| rest /services/data/indexes
| search title=windows2
| table title enableDataIntegrityControl homePath coldPath
4.6 Yeni test verisi indexleme
Data Integrity geçmiş veriler için geriye dönük hash üretmez. Bu nedenle özellik açıldıktan sonra yeni veri indexlenmelidir.
cat > /tmp/windows2_integrity_test.log <<‘EOF’
2026-07-20 22:00:00 test_id=INTEGRITY_TEST_001 message=”Splunk data integrity test event 1″
2026-07-20 22:00:01 test_id=INTEGRITY_TEST_002 message=”Splunk data integrity test event 2″
EOF
/opt/splunk/bin/splunk add oneshot /tmp/windows2_integrity_test.log -index windows2 -sourcetype integrity:test
index=windows2 sourcetype=integrity:test
| table _time test_id message
4.7 Hot bucket’ı warm bucket’a roll etme
check-integrity kontrolü için genellikle warm bucket yani db_* bucket üzerinde ilerlenir. Yeni veri hot bucket içinde olduğundan hot bucket roll edilir.
find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -mindepth 1 -type d -printf ‘%T@ %p
‘ | sort -nr | head -20
/opt/splunk/bin/splunk _internal call /data/indexes/windows2/roll-hot-buckets
find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -type d -name “db_*” -printf ‘%T@ %p
‘ | sort -nr | head -10
4.8 Sağlam bucket üzerinde integrity kontrolü
BUCKET=$(find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -type d -name “db_*” -printf ‘%T@ %p
‘ | sort -nr | head -1 | awk ‘{print $2}’)
echo “$BUCKET”
/opt/splunk/bin/splunk check-integrity -bucketPath “$BUCKET” -verbose
Beklenen sonuç: Sağlam bucket için Integrity check succeeded ve Total buckets checked=1, succeeded=1, failed=0 çıktısı alınmalıdır.
4.9 Aktif veriye zarar vermeden bozulma testi
Aktif bucket üzerinde değişiklik yapılmaz. Bucket /tmp altına kopyalanır ve sadece kopya üzerinde kontrollü değişiklik yapılır.
rm -rf /tmp/integrity_test
mkdir -p /tmp/integrity_test
cp -a “$BUCKET” /tmp/integrity_test/
TEST_BUCKET=”/tmp/integrity_test/$(basename “$BUCKET”)”
echo “$TEST_BUCKET”
find “$TEST_BUCKET/rawdata” -type f
4.10 Kopya bucket üzerinde hash dosyasını bozma
L1_FILE=$(find “$TEST_BUCKET/rawdata” -type f -name “l1Hashes*.dat” | head -1)
echo “$L1_FILE”
printf ‘\x00’ | dd of=”$L1_FILE” bs=1 seek=10 count=1 conv=notrunc
4.11 Bozulmuş kopya üzerinde integrity kontrolü
/opt/splunk/bin/splunk check-integrity -bucketPath “$TEST_BUCKET” -verbose
Beklenen sonuç: Kopya bucket üzerindeki l1Hashes dosyası değiştirildiği için check-integrity komutu FAILED sonucu üretmelidir.
4.12 Test kopyasını temizleme
rm -rf /tmp/integrity_test
5. Kontrolü Otomatikleştirme
Data Integrity özelliği hash üretimini sağlar; ancak otomatik alarm üretmez. Periyodik doğrulama için check-integrity komutu script ile çalıştırılır, sonuçlar log dosyasına yazılır ve Splunk tarafından indexlenir.
Akış: Script çalışır → check-integrity bucketları kontrol eder → SUCCESS/FAILED/SKIPPED sonucu loga yazar → Splunk logu indexler → alert FAILED/ERROR/UNKNOWN durumlarını yakalar.
5.1 App dizin yapısı
mkdir -p /opt/splunk/etc/apps/data_integrity_monitor/bin
mkdir -p /opt/splunk/etc/apps/data_integrity_monitor/local
5.2 Çoklu index destekli script
Script tek dosyadır; kontrol edilecek indexleri ayrı liste dosyasından okur.
vi /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh
#!/bin/bash
SPLUNK_HOME=”/opt/splunk”
SPLUNK_DB=”/opt/splunk/var/lib/splunk”
INDEX_LIST_FILE=”/opt/splunk/etc/apps/data_integrity_monitor/local/integrity_indexes.conf”
LOG_FILE=”/opt/splunk/var/log/splunk/data_integrity_check.log”
CHECK_TIME=$(date ‘+%Y-%m-%d %H:%M:%S’)
if [ ! -r “$INDEX_LIST_FILE” ]; then
echo “timestamp=\”$CHECK_TIME\” index=\”-\” bucket=\”-\” status=\”ERROR\” exit_code=\”1\” reason=\”Index list file not found or not readable: $INDEX_LIST_FILE\”” >> “$LOG_FILE”
exit 1
fi
while read -r INDEX_NAME
do
[[ -z “$INDEX_NAME” ]] && continue
[[ “$INDEX_NAME” =~ ^# ]] && continue
BUCKET_ROOT=”$SPLUNK_DB/$INDEX_NAME/db”
if [ ! -d “$BUCKET_ROOT” ]; then
echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET_ROOT\” status=\”SKIPPED_NO_BUCKET_PATH\” exit_code=\”0\” reason=\”Bucket path not found on this indexer\”” >> “$LOG_FILE”
continue
fi
find “$BUCKET_ROOT” -maxdepth 1 -type d -name “db_*” | while read -r BUCKET
do
OUTPUT=$(“$SPLUNK_HOME/bin/splunk” check-integrity -bucketPath “$BUCKET” -verbose 2>&1)
EXIT_CODE=$?
if echo “$OUTPUT” | grep -qi “Journal has no hashes”
then
STATUS=”SKIPPED_NO_HASH”
elif echo “$OUTPUT” | grep -qiE “Integrity check failed|failed=[1-9]|did not match”
then
STATUS=”FAILED”
elif echo “$OUTPUT” | grep -qiE “Integrity check succeeded|failed=0”
then
STATUS=”SUCCESS”
elif [ “$EXIT_CODE” -ne 0 ]
then
STATUS=”ERROR”
else
STATUS=”UNKNOWN”
fi
REASON=$(echo “$OUTPUT” \
| grep -iE “Reason=|Integrity check failed|Integrity check succeeded|Total buckets checked|Journal has no hashes” \
| tr ‘\n’ ‘ ‘ \
| sed ‘s/”/’\”/g’)
echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET\” status=\”$STATUS\” exit_code=\”$EXIT_CODE\” reason=\”$REASON\”” >> “$LOG_FILE”
done
done < “$INDEX_LIST_FILE”
5.3 Kontrol edilecek index listesi
vi /opt/splunk/etc/apps/data_integrity_monitor/local/integrity_indexes.conf
windows2
# security
# wineventlog
# linux
# network
5.4 Yetkileri düzenleme ve manuel test
chown -R splunk:splunk /opt/splunk/etc/apps/data_integrity_monitor
chmod 750 /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh
touch /opt/splunk/var/log/splunk/data_integrity_check.log
chown splunk:splunk /opt/splunk/var/log/splunk/data_integrity_check.log
chmod 640 /opt/splunk/var/log/splunk/data_integrity_check.log
su – splunk
/opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh
tail -20 /opt/splunk/var/log/splunk/data_integrity_check.log
5.5 Scripted input ve monitor input tanımı
vi /opt/splunk/etc/apps/data_integrity_monitor/local/inputs.conf
[script:///opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh]
disabled = 0
interval = 0 2 * * *
[monitor:///opt/splunk/var/log/splunk/data_integrity_check.log]
disabled = 0
index = splunk_integrity
sourcetype = splunk:data_integrity:check
/opt/splunk/bin/splunk btool inputs list –debug | grep -A8 -B2 “data_integrity”
/opt/splunk/bin/splunk restart
6. Splunk Arayüzünden Kontrol ve Alarm
6.1 Kontrol sorguları
index=splunk_integrity sourcetype=”splunk:data_integrity:check”
| stats count by host index status
index=splunk_integrity sourcetype=”splunk:data_integrity:check”
| table _time host index bucket status exit_code reason
| sort – _time
6.2 Final alarm sorgusu
index=splunk_integrity sourcetype=”splunk:data_integrity:check” earliest=-45m
| where status IN (“FAILED”,”ERROR”,”UNKNOWN”)
| where NOT like(bucket,”/tmp/%”)
| where NOT like(reason,”%Journal has no hashes%”)
| eval detection_name=”Splunk Data Integrity Check Failure”
| eval severity=”critical”
| table _time host index bucket status exit_code reason detection_name severity
| sort – _time
7. Status Değerleri Nasıl Yorumlanır?
| Status | Anlam | Alarm? |
| SUCCESS | Bucket hash doğrulaması başarılı. | Hayır |
| SKIPPED_NO_HASH | Data Integrity aktif edilmeden önce oluşmuş bucket. Hash yok, beklenen durum. | Hayır |
| SKIPPED_NO_BUCKET_PATH | Bu indexer üzerinde ilgili indexin local bucket path’i yok. Cluster ortamında normal olabilir. | Hayır |
| FAILED | Hash doğrulaması başarısız veya bütünlük bozulması tespit edildi. | Evet |
| ERROR | check-integrity çalışması hata verdi. | Evet |
| UNKNOWN | Komut çıktısı beklenen formata uymadı. | Evet |
8. Distributed / Indexer Cluster Ortamı
Distributed veya indexer cluster yapılarda Data Integrity kontrolü Search Head üzerinde değil, indexer peer’lar üzerinde çalışmalıdır. Çünkü bucket dosyaları indexer peer’ların local disklerinde bulunur.
Cluster Manager / Deployment yöntemi
↓
data_integrity_monitor app indexer peer’lara dağıtılır
↓
Her indexer kendi local bucketlarını kontrol eder
↓
Sonuçlar splunk_integrity indexine yazılır
↓
Search Head üzerinde merkezi alert çalışır
8.1 Indexer Cluster dağıtım örneği
# Cluster Manager üzerinde
mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/local
mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/bin
/opt/splunk/bin/splunk validate cluster-bundle
/opt/splunk/bin/splunk apply cluster-bundle
Dikkat: Cluster Manager app’i dağıtır; kendisi bucket kontrolü yapmaz. Script, peer üzerinde /opt/splunk/etc/apps/data_integrity_monitor path’i altında çalışır.
8.2 Cluster Yapıda Temel Tasarım
Standalone yapıda script ve Data Integrity ayarı aynı Splunk Enterprise instance üzerinde çalışır. Distributed veya indexer cluster mimarisinde ise bucket dosyaları Search Head üzerinde değil, indexer peer’ların local disklerinde tutulur. Bu nedenle Data Integrity kontrolünün çalışacağı yer indexer peer’lardır.
Kısa kural: enableDataIntegrityControl indexer tarafında uygulanır, check-integrity scripti indexer peer üzerinde çalışır, alarm ise Search Head üzerinde merkezi olarak çalışır.
Cluster Manager
↓ bundle dağıtımı
data_integrity_monitor app → IDX01 / IDX02 / IDX03
↓
Her indexer kendi local bucketlarını kontrol eder
↓
Sonuçlar index=splunk_integrity sourcetype=splunk:data_integrity:check olarak indexlenir
↓
Search Head üzerinde merkezi alert/correlation search çalışır

8.3 Cluster Manager Üzerinde App Dizin Yapısı
Indexer cluster ortamında app dosyaları indexer peer’lara Cluster Manager üzerinden dağıtılmalıdır. Yeni terminolojide manager-apps dizini kullanılır.
# Cluster Manager üzerinde
mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/bin
mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/local
App peer üzerine dağıtıldığında indexer tarafında genellikle aşağıdaki path altında görünür:
/opt/splunk/etc/apps/data_integrity_monitor/

8.4 Index Listesini Merkezi Yönetme
Her indexer üzerinde ayrı ayrı index listesi yönetilmemelidir. Kontrol edilecek index listesi Cluster Manager üzerindeki app içinde tutulur ve bundle ile tüm indexer peer’lara dağıtılır. Böylece liste tek noktadan yönetilir.
vi /opt/splunk/etc/manager-apps/data_integrity_monitor/local/integrity_indexes.conf
windows2
security
wineventlog
linux
network
Not: Her indexer bu dosyanın kendi local kopyasını okur. Eğer listedeki bir index o peer üzerinde local bucket barındırmıyorsa script SKIPPED_NO_BUCKET_PATH yazar ve devam eder. Bu cluster ortamında normal kabul edilir.
8.5 Cluster Ortamına Uygun Çoklu Index Scripti
Cluster yapıda scriptin app dizinini dinamik bulması önemlidir. Böylece script hem manager-apps altında yönetilebilir hem de peer üzerinde /opt/splunk/etc/apps/data_integrity_monitor altında doğru local/integrity_indexes.conf dosyasını okuyabilir.
vi /opt/splunk/etc/manager-apps/data_integrity_monitor/bin/check_data_integrity.sh
#!/bin/bash
SPLUNK_HOME=”/opt/splunk”
SPLUNK_DB=”$SPLUNK_HOME/var/lib/splunk”
SCRIPT_DIR=”$(cd “$(dirname “$0″)” && pwd)”
APP_DIR=”$(cd “$SCRIPT_DIR/..” && pwd)”
INDEX_LIST_FILE=”$APP_DIR/local/integrity_indexes.conf”
LOG_FILE=”$SPLUNK_HOME/var/log/splunk/data_integrity_check.log”
CHECK_TIME=$(date ‘+%Y-%m-%d %H:%M:%S’)
if [ ! -r “$INDEX_LIST_FILE” ]; then
echo “timestamp=\”$CHECK_TIME\” index=\”-\” bucket=\”-\” status=\”ERROR\” exit_code=\”1\” reason=\”Index list file not found or not readable: $INDEX_LIST_FILE\”” >> “$LOG_FILE”
exit 1
fi
while IFS= read -r INDEX_NAME
do
[[ -z “$INDEX_NAME” ]] && continue
[[ “$INDEX_NAME” =~ ^# ]] && continue
BUCKET_ROOT=”$SPLUNK_DB/$INDEX_NAME/db”
if [ ! -d “$BUCKET_ROOT” ]; then
echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET_ROOT\” status=\”SKIPPED_NO_BUCKET_PATH\” exit_code=\”0\” reason=\”Bucket path not found on this indexer\”” >> “$LOG_FILE”
continue
fi
find “$BUCKET_ROOT” -maxdepth 1 -type d -name “db_*” | while IFS= read -r BUCKET
do
OUTPUT=$(“$SPLUNK_HOME/bin/splunk” check-integrity -bucketPath “$BUCKET” -verbose 2>&1)
EXIT_CODE=$?
if echo “$OUTPUT” | grep -qi “Journal has no hashes”
then
STATUS=”SKIPPED_NO_HASH”
elif echo “$OUTPUT” | grep -qiE “Integrity check failed|failed=[1-9]|did not match”
then
STATUS=”FAILED”
elif echo “$OUTPUT” | grep -qiE “Integrity check succeeded|failed=0”
then
STATUS=”SUCCESS”
elif [ “$EXIT_CODE” -ne 0 ]
then
STATUS=”ERROR”
else
STATUS=”UNKNOWN”
fi
REASON=$(echo “$OUTPUT” \
| grep -iE “Reason=|Integrity check failed|Integrity check succeeded|Total buckets checked|Journal has no hashes” \
| tr ‘\n’ ‘ ‘ \
| sed ‘s/”/’\”/g’)
echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET\” status=\”$STATUS\” exit_code=\”$EXIT_CODE\” reason=\”$REASON\”” >> “$LOG_FILE”
done
done < “$INDEX_LIST_FILE”
chmod 750 /opt/splunk/etc/manager-apps/data_integrity_monitor/bin/check_data_integrity.sh
chown -R splunk:splunk /opt/splunk/etc/manager-apps/data_integrity_monitor
8.6 inputs.conf – Scripted Input ve Monitor Input
inputs.conf Cluster Manager üzerindeki app içinde tutulur. Peer’a dağıtıldıktan sonra script peer üzerinde çalışır. Script sonucu data_integrity_check.log dosyasına yazılır ve aynı Splunk Enterprise instance tarafından monitor input ile indexlenir. Indexer üzerinde ayrıca Universal Forwarder kurulmasına gerek yoktur.
vi /opt/splunk/etc/manager-apps/data_integrity_monitor/local/inputs.conf
[script://./bin/check_data_integrity.sh]
disabled = 0
interval = 0 2 * * *
[monitor:///opt/splunk/var/log/splunk/data_integrity_check.log]
disabled = 0
index = splunk_integrity
sourcetype = splunk:data_integrity:check
Not: script://./bin/check_data_integrity.sh app-relative kullanım sağlar. Peer üzerinde app /opt/splunk/etc/apps/data_integrity_monitor altına geldiğinde script doğru konumdan çalışır.
8.7 Data Integrity Enable Ayarını Cluster’da Dağıtma
enableDataIntegrityControl ayarı da indexer peer’lara dağıtılmalıdır. En temiz yöntem, ilgili indexlerin zaten tanımlı olduğu cluster index app’i içine bu satırı eklemektir. Ayrı bir app içine eklemek teknik olarak çalışabilir; ancak index yönetimi açısından mevcut index app’i içinde yönetmek daha düzenlidir.
vi /opt/splunk/etc/manager-apps/<index_app>/local/indexes.conf
[windows2]
enableDataIntegrityControl = true
[security]
enableDataIntegrityControl = true
[wineventlog]
enableDataIntegrityControl = true
Eğer yeni bir splunk_integrity indexi kullanılacaksa bu index de cluster bundle içindeki index app’inde tanımlı olmalıdır:
[splunk_integrity]
homePath = $SPLUNK_DB/splunk_integrity/db
coldPath = $SPLUNK_DB/splunk_integrity/colddb
thawedPath = $SPLUNK_DB/splunk_integrity/thaweddb
8.8 Bundle Validate ve Apply
Cluster Manager üzerinde değişiklikler tamamlandıktan sonra bundle doğrulanır ve indexer peer’lara uygulanır. Data Integrity ayarı indexer konfigürasyonu olduğu için configuration bundle yapılıp validate and check edilir ve pushlanır.

8.9 Indexer Peer Üzerinde Doğrulama
Bundle dağıtıldıktan sonra bir veya birkaç indexer peer üzerinde app’in geldiği, inputs.conf’un yüklendiği ve Data Integrity ayarının aktif olduğu doğrulanır.
# App peer üzerine geldi mi?
ls -l /opt/splunk/etc/apps/data_integrity_monitor/
# Script executable mı?
ls -l /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh
# inputs.conf efektif mi?
/opt/splunk/bin/splunk btool inputs list –debug | grep -A8 -B2 “data_integrity”
# Data Integrity ayarı efektif mi?
/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep enableDataIntegrityControl
Manuel test için indexer peer üzerinde script çalıştırılabilir:
su – splunk
/opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh
tail -20 /opt/splunk/var/log/splunk/data_integrity_check.log
8.10 Search Head Üzerinden Merkezi Kontrol ve Alert
Search Head üzerinde script çalıştırılmaz. Search Head sadece indexer peer’lardan gelen splunk_integrity kayıtlarını arar ve alarm üretir.
index=splunk_integrity sourcetype=”splunk:data_integrity:check”
| stats count by host index status
Final problem sorgusu:
index=splunk_integrity sourcetype=”splunk:data_integrity:check” earliest=-45m
| where status IN (“FAILED”,”ERROR”,”UNKNOWN”)
| where NOT like(bucket,”/tmp/%”)
| where NOT like(reason,”%Journal has no hashes%”)
| eval detection_name=”Splunk Data Integrity Check Failure”
| eval severity=”critical”
| table _time host index bucket status exit_code reason detection_name severity
| sort – _time
8.11 Cluster Yapıda Operasyonel İşlemler
Cluster Manager app’i dağıtır; kendisi bucket kontrolü yapmaz. Index listesi Cluster Manager üzerindeki app içinde merkezi tutulur. Her indexer aynı listeyi okur ancak sadece kendi local bucket path’i olan indexlerde kontrol yapar.
Universal Forwarder gerekli değildir. Indexer üzerinde zaten Splunk Enterprise çalıştığı için scripted input ve monitor input işlemleri splunkd tarafından yürütülür.
Scriptin düşük yoğunluklu saatlerde çalıştırılması önerilir. check-integrity bucket dosyalarını okuyacağı için disk I/O oluşturabilir. Büyük ortamlarda önce kritik indexlerle pilot yapılması, log rotate uygulanması ve çalışma süresinin izlenmesi önerilir.
Önerilen logrotate ayarı
Her indexer üzerinde:
vi /etc/logrotate.d/splunk_data_integrity
İçerik:
/opt/splunk/var/log/splunk/data_integrity_check.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
create 0640 splunk splunk
}
Anlamı:
daily → her gün rotate eder
rotate 14 → 14 günlük geçmişi tutar
compress → eski dosyaları sıkıştırır
missingok → dosya yoksa hata vermez
notifempty → boş dosyayı rotate etmez
copytruncate→ dosya açıkken kopyalayıp mevcut dosyayı sıfırlar
create → yeni dosyayı splunk:splunk sahibiyle oluşturur
9. Kısıtlar ve Dikkat Edilecek Noktalar
- Data Integrity Control değişikliği engellemez; değişikliği doğrulama sırasında tespit eder.
- Özellik açılmadan önce oluşmuş bucketlar için geriye dönük hash üretimi beklenmemelidir.
- FAILED/ERROR/UNKNOWN durumları alarm kapsamına alınmalıdır.
- Journal has no hashes mesajı eski bucketlar için beklenen durumdur ve alarm dışı bırakılmalıdır.
- check-integrity komutu disk okuması yapacağından düşük yoğunluklu saatlerde çalıştırılması önerilir.
- SPL | delete kullanımı, CLI clean eventdata ve OS seviyesinde rm/unlink işlemleri ayrı denetim katmanlarıyla izlenmelidir.
10. Sonuç
Bu çalışma ile Splunk Data Integrity Control özelliği test ortamında etkinleştirilmiş, özellik aktif edildikten sonra oluşturulan bucket üzerinde başarılı bütünlük kontrolü yapılmış ve kontrollü olarak bozulan bucket kopyasında FAILED sonucu alınmıştır. Devamında check-integrity komutunun periyodik çalıştırılması için script hazırlanmış, sonuçların Splunk’a indexlenmesi ve FAILED/ERROR/UNKNOWN durumlarında alarm üretimi tasarlanmıştır.
Data Integrity Control tek başına görünür bir ES notable veya GUI alarmı üretmez. Ancak check-integrity sonucu periyodik olarak Splunk’a alındığında bucket bütünlüğü GUI üzerinden izlenebilir ve alarm mekanizmasına dönüştürülebilir.
11. Kaynaklar
- Splunk Enterprise – Manage data integrity – Data Integrity Control, l1Hashes/l2Hash ve check-integrity komutu.
- Splunk Enterprise – Administrative CLI commands – check-integrity komut kullanım referansı.
- Splunk Enterprise Security – Audit dashboards – ES Audit Dashboards içinde Data Integrity Control By Index görünümü açıklaması.
- Splunk Enterprise – Check the integrity of your Splunk software files – Splunk software file integrity kontrolü; index data integrity ile karıştırılmamalıdır.
Share this content: