SmartStoreを使ってみた
2019/4/19
マクニカネットワークス株式会社
時田
2
本発表について(1/2)
こんな人に役立つかも?
管理者:Splunkのサーバー管理、confファイルの設定変更等をする方
取り込みデータ量が大きくてストレージリソースが追い付かない方
S3を持て余している方
こんな人はつまらないかも?
ユーザー:Splunkサーチ、ダッシュボード、アラート設定等をする方
上記状況に当てはまらない方
対象環境
Splunk: Splunk Enterprise 7.2.x
OS: Linux 3.x以降
Splunk構成: インデクサークラスタ環境
検証用途であればStandalone構成でもOK
3
本発表について(2/2)
前提知識
Splunkのデータ取り込み(インデックス、バケツの遷移)
分散サーチの仕組み
Splunkの分散コンポーネント
インデクサークラスター概要
4
アジェンダ
自己紹介
SmartStoreってなにもの?
SmartStore動作概要
設定してみた
感想・まとめ
5
自己紹介
名前:時田 理恵
職業:Splunk エンジニア
所属:マクニカネットワークス㈱
Splunk:バージョン4.2~4.3世代(クラスタ機能が無い!)
好きなコマンド:stats, tstats
気になっているコマンド:redistribute, multisearch
気になっているログ:watchdog.log
趣味:バレエ、ヨガ、鳥鑑賞
6
SmartStoreってなにもの?
7
SmartStoreとは?
Splunkバージョン7.2の新機能
検索頻度の低いデータを、リモートストレージ(S3互換オブジェクトスト
レージ)へ保存する機能
インデクサークラスター環境で利用できる機能
8
「SmartStore、もう使っている(使ってみたことある)よ!」という方、
挙手をお願いします!!
9
「インデクサークラスタ機能なら使っている(使ったことある)よ!」
という方?!
10
こんなことありませんか?
ストレージ容量
インデクサークラスタを組むと、ストレージコストがかかる
高可用性、データ回復
サーチ性能を上げるために新しいインデクサーを追加しても、データの分散に
時間がかかる
運用
アーカイブからのリビルドや、対象データを探すのが面倒だから、ほぼ直近の
データしか検索しないけど、なんとなくローカルにcoldデータを持つ設定にし
ている
11
おさらい:インデクサークラスターとは
Splunkインデクサー間で保存データをコピーすることにより、耐障害性を
上げるための機能
例)インデクサークラスタ全体で同じデータを3つ持ちたい
レプリケーションポリシーに従ってデータを他のインデクサーへコピーする
データA
(オリジナル)
データA
(コピー)
データA
(コピー)
インデクサークラスタ
1 2 3
フォワーダー
12
おさらい:インデクサークラスターとは
Splunkインデクサー間で保存データをコピーすることにより、耐障害性を
上げるための機能
例)インデクサークラスタ全体で同じデータを3つ持ちたい
通常オリジナルデータがPrimary、コピーデータがSecondaryとなる
インデクサークラスタ
1 2 3
Primary Secondary Secondary
フォワーダー
13
おさらい:インデクサークラスターとは
Splunkインデクサー間で保存データをコピーすることにより、耐障害性を
上げるための機能
例)インデクサークラスタ全体で同じデータを3つ持ちたい
Primaryデータを持つインデクサーがダウンした場合、他のインデクサーのデータが
SecondaryからPrimaryに昇格する
インデクサークラスタ
1 1 2
Primary Secondary
フォワーダー
14
おさらい:インデクサークラスターとは
Splunkインデクサー間で保存データをコピーすることにより、耐障害性を
上げるための機能
例)インデクサークラスタ全体で同じデータを3つ持ちたい
新しいサーバーを追加したとき、レプリケーションポリシーを満たすよう、データが
コピーされる
インデクサークラスタ
1 1 2 3
データA
(コピー)
フォワーダー
15
SmartStoreを使うと
ストレージ容量
古いデータのコピーをリモートストレージ上に保持し、直近データのコピーの
みローカルストレージ上に保持するため、ストレージコストを削減できる
高可用性、データ回復
リモートストレージ側の高可用性、データ機能が活用できる
新規インデクサーダウン/追加時、データのリバランシングの時間が短縮できる
運用
リビルドなしで、リモートストレージ上のデータを簡単に検索対象とすること
が出来る
16
SmartStore動作概要
17
「Splunkのインデックス(index)、バケツ(buckets)がなにものかを
知ってる!」という方?!
18
おさらい:インデックスとは?
Splunkでは、取り込んだデータを「インデックス」と呼ばれる論理的な
データ保管単位で保存します。
main
(デフォルト)
firewall
(firewall用)
security
(秘密情報用)
network
(proxy用)
インデックスを複数作成するケース
• データによって保持期間を
分けたい場合
例) firewallのデータは60日、
networkのデータは30日の
保持期間でよい、など。
• データへのアクセスコント
ロールを実現したい場合
例)Security関連のデータは
特別な権限を持ったユーザー
(ロール)に限りたい、など。
・保存期間は6年間
・アクセスは全ロール
(全ユーザー)
・保存期間は6年間
・アクセスは限られた
ロールのみ
・保存期間は30日
・アクセスは全ロール
(全ユーザー)
・保存期間は60日
・アクセスは全ロール
(全ユーザー)
19
おさらい:バケツとは?
「インデックス」は、インデックスデータ※(tsidxデータ)と取り込んだ
データ本体(rawデータ)のペアをバケツという単位で保存します。
バケツ単位でHOT, WARM, COLD, FROZENステージへローテーションします。
COLD Read
FROZEN
削除(デフォルト)
or アーカイブ
インデックス
データ
(元データの35%)
データ本体
(元データの15%)
ユニバーサル
インデクシング
gz圧縮
バケツ
main
(デフォルト)
HOT Read/Write
WARM Read
取り込みデータ(元データ)
※インデックスデータとは、Splunkがデータを取り込んだ時に
作成する索引データを意味します。
20
構成
SmartStore構成
リモートストレージ(Amazon S3等)
インデクサークラスタ(サーチヘッド、
クラスタマスター、インデクサー)
データ保存場所
Hotバケツ:
ローカルストレージ保持
Warmバケツ:
ローカル(Cache)、リモートストレージ
Coldバケツ:
無し(利用しないがcoldPathの設定は必要)
Warmから直接Frozenへ
インデクサー2
S3互換
リモートストレージ
キャッシュマネージャー
Hot Cache
Warm
Warm
Warm
Warm
インデクサー1
Hot Cache
キャッシュマネージャー
Cache
Hot
= Warm
21
キャッシュマネージャー?
機能
データ取り込み時
リモートストレージへWarmバケツをアップロード
検索処理時
リモートストレージから必要なWarmバケツをローカルストレージにコピーし、
キャッシュとして保持
定期実行
キャッシュ保持ポリシーに従い、キャッシュデータを削除
設定
キャッシュ保持ポリシーなど
22
データの動き:データ取り込み時
処理の流れ
1. Hotバケツへデータ書き込み
2. クラスタ間でHotバケツをコピー
3. Warmバケツへ移行
インデクサー1(Primaryバケツ保持)
• Warmバケツをリモートストレージへコピー
• コピー完了を他のインデクサーへ通知
• WarmバケツをLocalのCacheとして保持
(キャッシュ保持ポリシーに従い保持&削除※)
インデクサー2
• インデクサー1からコピー完了通知を受け取った
後、コピーされたLocalのバケツを削除※
※削除後もディレクトリやmetadataは残る
インデクサー2
S3互換
リモートストレージ
キャッシュマネージャー
Hot Cache
Warm
Warm
Warm
Warm
インデクサー1
Hot Cache
キャッシュマネージャー
フォワーダー
①
②
③
23
データの動き:検索時
処理の流れ
1. サーチヘッドから検索ジョブ実行
2. Hotバケツの検索
3. Warmバケツ(Cache)の検索
• キャッシュマネージャーへ問い合わせ
• 存在する:Cacheデータを検索
• 存在しない:リモートストレージからバケツを
コピーし、コピーが完了次第検索を実行
4. 検索完了処理
• コピーしたバケツはキャッシュ保持ポリシー
に従い削除
インデクサー2
S3互換
リモートストレージ
キャッシュマネージャー
Hot Cache
Warm
Warm
Warm
Warm
インデクサー1
Hot Cache
キャッシュマネージャー
サーチヘッド
①
②
③サーチプロセス
サーチプロセス
②
③
設定してみた
25
SmartStore設定(概要)
設定手順の流れ
1. 保存先AWS S3バケットの作成、AWS IAM権限追加
2. インデクサークラスタの設定
3. SmartStoreデータ保存の設定
4. キャッシュ保持ポリシーの設定(indexごと/Global)
5. 設定のデプロイ&動作確認
26
SmartStore設定(詳細:1/4)
1. 保存先AWS S3バケットの作成、AWS IAM権限追加
詳細省略。
暗号化オプション無しで「splunk-eval」バケットへ
「SmartStore_eval」フォルダを作成。
任意のユーザーへS3の
必要権限を追加。
27
SmartStore設定(詳細:2/4)
2. インデクサークラスタ設定
詳細省略。
28
SmartStore設定(詳細:3/4)
2. データ保存の設定
$SPLUNK_HOME/etc/master-apps/_cluster/local/indexes.conf
例)
[volume:remote_store]
storageType = remote
path = s3://splunk-eval/SmartStore_eval
remote.s3.access_key = XXXXXXXXXXXXXXXXXXXX
remote.s3.secret_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
remote.s3.endpoint = https://s3.ap-northeast-1.amazonaws.com
[(インデックス名)]
homePath = $SPLUNK_DB/$_index_name/db
thawedPath = $SPLUNK_DB/$_index_name/thaweddb
coldPath = $SPLUNK_DB/$_index_name/colddb
remotePath = volume:remote_store/$_index_name
repFactor = auto
maxDataSize = auto
maxGlobalDataSizeMB = 500000 # 500GB(デフォルト0:上限なし) ※クラスタ全体でのローカルデータサイズの最大値
frozenTimePeriodInSecs = 2678400 # 30日(デフォルト188697600秒:約6年)
29
SmartStore設定(詳細:4/4)
4. キャッシュ保持ポリシーの設定
インデックス毎に設定する場合:indexes.conf
$SPLUNK_HOME/etc/master-apps/_cluster/local
Globalに設定する場合:server.conf
$SPLUNK_HOME/etc/master-apps/_cluster/local
5. 設定のデプロイ&動作確認
splunk apply cluster-bundle
例)
[(インデックス名)]
hotlist_recency_secs = 1339200 # 約15日(デフォルト86400秒:24時間)※Warmバケツ保持期間
hotlist_bloom_filter_recency_hours = 360(デフォルト360時間:15日) ※tsidx、Journals以外(bloom filter等)の保持期間
例)
[cachemanager]
hotlist_recency_secs = 1339200 # 約15日(デフォルト86400秒:24時間)
hotlist_bloom_filter_recency_hours = 360(デフォルト360時間:15日)
30
結果@AWS S3
このフォルダ含め、計3つバケットへコピーが完了したことを確認。
この画面は「9~5C0BD568-1E2D-495D-A88B-FA69643956B3」という
バケツ名のフォルダ。
S3側に、謎のディレクトリ構造が出現。
31
結果@Splunkインデクサー(2台)
Hotはクラスタ全体で2つ
(SF=2, RF=2の場合)
Warmはクラスタ全体で1つ
Stub
(中身は空)
Stub
(中身は空)
「9~5C0BD568-1E2D-495D-A88B-FA69643956B3」を含む、S3上へコピーが完了した
Warmバケツの一つはStubとなっている事を確認。
32
1台落としてみた
Stubだったバケツ「9~5C0BD568-1E2D-495D-A88B-FA69643956B3」を
含むデータを検索すると、ディレクトリの中身S3から取得されて復活!
33
結果まとめ
Hotバケツはクラスタ全体でSF,RFを満たすようコピーされる
Warmになると、S3上にコピーされる
S3上へのコピーが完了すると、プライマリ以外のWarmバケツは「Stub」
と呼ばれる空のディレクトリになる
Warmオリジナルバケツを持つインデクサーを落とし、対象期間のデータを
指定したサーチを実行すると、「Stub」の中身がS3から取得されて復活する
S3バケット上に謎のディレクトリが作成される(内部仕様?)
34
おまけ:Monitoring Console
SmartStore Activity: Instance
SmartStore Cache Performance: Instance
35
感想・まとめ
36
一通りさらった感想
AWS側の設定はシンプル
運用を考慮するとAPIの制限や同時接続数等の管理・チューニングが必要になるかも?
Splunk側の設定はCLIで行う必要があるため、confファイルの操作に慣れていない
と戸惑うかも?
SmartStoreだと使えないAttributeもあるため、よく確認する必要がある
本発表では特に制限詳細は触れていない
Cacheにないデータを同時に大量に実行する必要がある場合は要検証(.conf2018
session資料にTBクラスの検証結果あり)
SmartStoreだとoffline処理が早くなるという情報もあるので機会があれば試してみたい
(今回は時間切れ)
37
まとめ
SmartStoreを使うと、ストレージ単体で(Computing機能と切り離して)
スケールできる
インデクサー台数増やすことなくストレージだけ拡張できる
データを大量に保持する場合、TCOを抑えられる
インデクサークラスタの復旧時間を短縮できる
直近データを検索するのに向いている
過去の大量データを頻繁にサーチするのには向かない
Monitoring Consoleでパフォーマンスや使用状況がチェックできる
RESTコマンドを覚えていなくてもヘルスチェックができる
•本資料に記載されている会社名、商品、サービス名等は、各社の登録商標または商標です。
なお、本資料中では、「™」、「®」は明記しておりません。
•本資料は、出典元が記載されている資料、画像等を除き、弊社が著作権を有しています。
•著作権法上認められた「私的利用のための複製」や「引用」などの場合を除き、本資料の全部または
一部について、無断で複製・転用等することを禁じます。
•本資料は作成日現在における情報を元に作成されておりますが、その正確性、完全性を保証するもの
ではありません。

【GOJAS Meetup-10】Splunk:SmartStoreを使ってみた