В splunk все данные хранятся в buckets, которые в свою очередь входят в индексы.
Также репликация в кластере происходит именно с помощью копирования bucket на ноды.
Виды bucket
В splunk существует 5 вида bucket:
- hot ( горячий )
 - warm ( теплый )
 - cold ( холодный )
 - frozen ( замороженный )
 - thawed ( размороженный )
 
Как хранятся данные ( index ) в splunk
По мере старения bucket переходит от состояния к состоянию проходя первые 4 вида.
hot bucket
Когда данные индексируются ( поступают в splunk ) впервые они находятся в hot bucket. Количество hot bucket множественное, ограничивается для каждого индекса в файле $SPLUNK_HOME/etc/system/local/indexes.conf параметром maxHotBuckets. Данные в hot bucket доступны для поиска.
Чтобы посмотреть количество hot bucket можно выполнить запрос:
| dbinspect index=*
| search state=hot
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, "%c")
warm bucket
Когда hot bucket достигает определённого размера ( maxDataSize ) или предела maxHotBuckets то hot bucket становится warm bucket.  Т.е файл hot bucket  переименовывается в warm bucket и хранится в том же месте ( homePath в $SPLUNK_HOME/etc/system/local/indexes.conf  ).  warm bucket также доступен для поиска, но не доступен для записи. Количество warm bucket множественное, ограничивается для каждого индекса в файле $SPLUNK_HOME/etc/system/local/indexes.conf параметром maxWarmDBCount, по умолчанию 300. 
Есть формула для расчета количества warm bucket:
maxWarmDBCount = (LocalDiskSpace-minFreeSpace-(maxHotBuckets*maxDataSize))/maxDataSize
Чтобы посмотреть количество warm bucket можно выполнить запрос:
| dbinspect index=*
| search state=warm 
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, "%c")
cold bucket
Когда warm bucket достигает определённого размера или предела maxWarmDBCount то warm bucket становится cold bucket.  Т.е файл warm bucket  переименовывается в cold bucket и хранится в отличном от месте от warm bucket и hot bucket ( coldPath в $SPLUNK_HOME/etc/system/local/indexes.conf  ).  Это сделано для возможности перенести cold bucket на более дешевое хранилище данных. 
Первым в состояние cold bucket  переходит самое старое  warm bucket. Т.е чем старее, тем раньше перейдёт в cold bucket.
Чтобы посмотреть количество cold bucket можно выполнить запрос:
| dbinspect index=*
| search state=cold
| stats count as bucket_count min(startEpoch) as earliest_event by index splunk_server
| eval earliest_event_human = strftime(earliest_event, "%c")
frozen bucket
Наконец, после выполнения некоторых других условий, зависящих от времени ( frozenTimePeriodInSecs ) или размера ( maxTotalDataSizeMB ) , cold bucket переходят в frozen bucket, после чего они удаляются из индекса после дополнительной архивации. Данные в frozen bucket не доступны для поиска.
По умолчанию frozen bucket удаляются а не архивируются.
Также frozen bucket может быть переведён в thawed bucket, который будет доступен для поиска.
Архивирование frozen bucket
Для активирования архивирования frozen bucket нужно добавить в $SPLUNK_HOME/etc/system/local/indexes.conf параметры coldToFrozenDir и coldToFrozenScript
coldToFrozenScript может быть $SPLUNK_HOME/bin/coldToFrozenExample.py, который по умолчанию идёт со splunk или свой собственный скрипт.
Также стоит обратить внимание на то что при использовании кластера количество архивов будет ровняться количеству replication factor
Восстановление frozen bucket ( thawed bucket )
Копируем файлы thawed bucket в папку thawedPath, которая назначена в  $SPLUNK_HOME/etc/system/local/indexes.conf. Когда архивные данные уже не нужны удаляем файлы.
Директории по умолчанию
| Состояние bucket | Директория | 
|---|---|
| Hot | $SPLUNK_HOME/var/lib/splunk/defaultdb/db/* | 
| Warm | $SPLUNK_HOME/var/lib/splunk/defaultdb/db/* | 
| Cold | $SPLUNK_HOME/var/lib/splunk/defaultdb/colddb/* | 
| Frozen | по умолчанию удаляются, можно изменить | 
| Thawed | $SPLUNK_HOME/var/lib/splunk/defaultdb/thaweddb/* | 


Комментарии