Splunk 9.3 新機能 Ingest Actions(取り込みアクション)のローカル保存機能を使ってみる

この記事は Splunk Advent Calendar 2024 4日目の記事です。

Splunk Advent Calender は昨年も参加していまして二年連続の参加です。

Splunk の Ingest Actions(取り込みアクション)

今回ご紹介するのは、Splunk の Ingest Actions(取り込みアクション)についてです。

Splunk はいろいろな活用方法がありますが、一日のログ取り込み容量によるライセンスが存在しています。

Ingest Actions により、

  • 取り込み前にデータを成形したり
  • Splunk にインデックス化しなくても良いログを別途書き出す

ことができます。

9.2 以前は別途書き出すといっても、AWS の S3 にしか出力できませんでしたが、Splunk 9.3 より、NFS サーバーやローカルなどのローカルのファイルシステムにも保存できるようになりました。

普段 OpenStack や VMware といったプライベート環境だったり、パブリッククラウドだとしても GCP や Azure、Oracle Cloud など使われていて、AWS と縁が無かった方も利用できるようになりました。

ドキュメントにも下記のように書かれており、ライセンス面も問題ないと考えられます。

Ingest-based licenses: Data that is filtered or routed by the ingest actions feature, such that the data does not get added to an index, does not count against your license.

メリット

ここで別の場所に書き出されたログは、Splunk のサーチ機能は使えませんが、

  • Splunk Universal Forwarder による高機能なログ収集
  • Splunk のデプロイサーバーによる設定一元管理
  • Splunk のプロトコルによるより安定した通信

といったメリットはありますので、独自に syslog サーバーを立てるよりは、既存の Splunk のシステムを使えた方が便利な場合もあります。

試してみる

今回は Splunk 9.3.2 で試してみます。

取り込みアクション設定画面の表示

設定 → 取り込みアクションを選択します

Splunk 9.3 設定メニュー

一部日本語化されていませんが、Destinations を選択 New Destination → ファイルシステムを選びます

Splunk 9.3 取り込みアクション New Destination

保存先の設定

名前とディレクトリパスを入力します。

実際の保存先は、年/月/日でサブディレクトリが作られるので、別途古くなったログを削除する仕組みを作る際も簡単に判断できます。

[Partition by sourcetype as secondary key] により、保存先は下記のようになります。

[Partition by sourcetype as secondary key] なし(デフォルト)

file://(指定のパス)/year={YYYY}/month={MM}/day={DD}/events_{lt}_{et}_{field_create_epoch}_{32b_seq_num}_{peer_guid}.ndjson.gz

[Partition by sourcetype as secondary key] あり

file://(指定のパス)/year={YYYY}/month={MM}/day={DD}/sourcetype={sourcetype}/events_{lt}_{et}_{field_create_epoch}_{32b_seq_num}_{peer_guid}.ndjson.gz

追加設定

この画面ではログ保存の詳細設定ができます。

プレビューが表示されているのでわかりやすいです。

圧縮方式は下記の三つから選べます。

  • gzip(デフォルト)
  • zstd
  • lz4
  • 無効(非圧縮)

Linux サーバーの /var/log/ などでおなじみの gzip が使われており有名なところではありますが、
zstd は近年登場した圧縮方式で、圧縮率が高く高速だそうです。
lz4 は圧縮率よりもさらに速度を重視する場合に選ばれるようです。

保存したログの使い道次第ですが、zstd を基本にしてもよいのかなと思います。

保存先登録完了

このように登録されれば完了です。

Splunk 9.3 取り込みアクション Destinations

取り込めたログの確認

ディレクトリ構成

下記のように保存されます。

# ll /export/splunk/year\=2024/month\=12/day\=03/
total 36
-rw------- 1 root root  8002 Dec  3 23:54 events_1733230800_1733227200_0_000000_43E00985-8B55-49DC-AA73-A5578E3276EB.log.zst
-rw------- 1 root root   513 Dec  3 23:54 events_1733234400_1733230800_0_000000_43E00985-8B55-49DC-AA73-A5578E3276EB.log.zst
-rw------- 1 root root   832 Dec  3 23:54 events_1733238000_1733234400_0_000000_43E00985-8B55-49DC-AA73-A5578E3276EB.log.zst
-rw------- 1 root root 19581 Dec  3 23:54 events_1733263200_1733259600_0_000000_43E00985-8B55-49DC-AA73-A5578E3276EB.log.zst

[Partition by sourcetype as secondary key] なしで設定したため、パスには時刻情報しかありません。

ファイル名の 1733230800_1733227200 は Unixtime ですので、ファイル名からおおよその時刻を推定することもできます。

保存形式に関する注意点

raw 形式で出力した場合、付属の情報が無くなってしまうので、

複数の種類のログがある場合、少なくとも sourcetype 別のディレクトリがあるとよいですし、
複数のホストのログを集約する場合は、syslog 形式のようにログの中にホスト名がある形式が望ましいと思います。

json 形式であれば、

{"time":123456789,"event":"2022-01-02 12:00:00, 000 -0700 INFO event - 2","host":"some-host","source":"/some/folder/sample.log","sourcetype":"some-sourcetype"}

zstd ファイルの注意点

zstd 圧縮で保存すると、拡張子が zst となります。

zcat などは gzip 形式に対応したコマンドですので、zstd ファイルを取り扱うには

  • zstdcat
  • zstdgrep
  • zstdless

といったコマンドを使うことになります。

json で書き出した場合、jq コマンドと組み合わせることになりますが、jq は直接圧縮ファイルを取り扱えないので、直接 grep などしやすい raw 形式が良いのかなとは思います。

まとめ

Splunk 9.3 で導入されたIngest Actions(取り込みアクション)のローカル保存により、これまでコスト面から Splunk を導入できなかった環境や、将来的に正式なライセンスを購入予定だけど・・・といった場面でも利用しやすくなったと思います。

Splunk のサーチ機能が全く使えないのでとりあえずためておくといった使い方にはなってしまうと思いますが、

GUI で設定でき、簡単に試せますので気になった方は是非使ってみて下さい。

Comments

comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)