splunk

Splunk 最新のデータセット(source)を取得する方法

更新日:

同じソースタイプのデータ(ソース)を複数取り込んだ場合に、最新のデータ(ソース)のみをサーチの対象とする方法です。

前提

取り込むファイル名はタイムスタンプなどが設定されてユニークにする必要があります。
今回はファイル名に日付を付与しています。

Import済みのデータ

以下の3データ(ソース)がimportされています。

sourcetype="adressJapanCSV"  
| stats count by source

結果

サンプルコード

sourcetype="adressJapanCSV" 
[| metadata type=sources
 | sort recentTime desc
 | head 1
 | return source]
| fields source
| stats count by source

結果

最新のデータ(ソース)のみをサーチできています。

metadata

[]内のサブサーチがポイントです。
metadataコマンドは、splunkにimportしたデータの情報(ファイル名やimport時間など)を取得します。
(時間は分かりやすくするためにUTCに変換しています)

| metadata type=sources
| eval recentTime = strftime(recentTime,"%Y-%m-%d %H:%M:%S") , lastTime = strftime(lastTime,"%Y-%m-%d %H:%M:%S") ,firstTime = strftime(firstTime,"%Y-%m-%d %H:%M:%S")

結果

直近でimportしたデータを対象にする

| metadata type=sources
| eval recentTime = strftime(recentTime,"%Y-%m-%d %H:%M:%S") , lastTime = strftime(lastTime,"%Y-%m-%d %H:%M:%S") ,firstTime = strftime(firstTime,"%Y-%m-%d %H:%M:%S")
| sort recentTime desc
| head 1

結果

sortコマンドでimportした時間の降順で並び替えて、headコマンドで先頭1件のみ取得しています。

return

returnコマンドは、サブサーチの結果をメインサーチに返却します。
サンプルコードでは、「source=”zenkoku_20190403.csv”」という値を返却しています。

| metadata type=sources
| sort recentTime desc
| head 1
| return source

結果

メインサーチとサブサーチの結合

sourcetype="adressJapanCSV" 
[| metadata type=sources
 | sort recentTime desc
 | head 1
 | return source]

上記サーチ分は、サブサーチを検索結果に置き換えると以下のサーチになり、直近のデータ(ソース)のみをサーチ対象として処理することができます。

sourcetype="adressJapanCSV"  source="zenkoku_20190403.csv"

まとめ

データ(ソース)名をユニークにする必要がありますが、毎日全量データをimportしていて、最新のデータのみ処理対象にすればよいケースなどで利用できると思います。
returnコマンドは、今回は詳しく説明していませんが、使いこなすとデータの絞り込みが簡単になり、サーチ処理を効率化できますので、別途説明したいと思います。







-splunk
-

Copyright© Tech Log , 2020 All Rights Reserved Powered by STINGER.