Splunk SPLからSPL2へのコンバーターのご紹介
Platform Aditya TammanaSplunk Ingest Processorの一般提供が開始されました。これからIngest Processorで初めてのパイプラインの構築に挑戦される方も、先にSplunk Edge Processorを試している方もいらっしゃるでしょう。ユーザーインターフェイスにログインして機能をチェックして回り、場合によってはすでにHEC、フォワーダー、syslog経由でデータの送信を始めている方もいらっしゃるかもしれません。しかしそこで、壁にぶつかります。初めてのパイプラインを、どのように記述すればよいのでしょうか。SPLは知っていても、SPL2は?ストリーミングコンテキストで?そもそも、何から始めればよいのでしょうか。
そんな皆様に朗報です。SplunkのSPLからSPL2へのコンバーターが、Splunk Data ManagementのEdge ProcessorとIngest Processor (ここではまとめて「パイプラインビルダー」と呼びます)で利用可能になりました。このコンバーターを使えば、パイプラインにSPLをコピー&ペーストするか手入力するだけで、SPL2に自動的に変換されます。Edge ProcessorやIngest Processorでパイプラインの構築を開始するのに最適のツールで、最初にいくつかのパイプラインを構築しながら、SPL2を身に付けることができます。さらに、Splunk Cloud PlatformやSplunk Enterpriseから既存のSPLサーチをコピー&ペーストして、サーチ時の分析をデータ取り込み前の変換へと変えることもできます(「大いなる力には大いなる責任が伴う」というわけです)。
その使い方を見ていきましょう。
SPLからSPL2に変換する方法
SPLからSPL2への変換は簡単です。まずは、基本的な空のEdge Processorパイプラインを作ってみましょう。
Splunkが先日シスコの一員になったことを記念して、Cisco ASAデータの処理を例にします。目標は、_rawからメッセージ番号フィールドを抽出し、特定のメッセージ番号をフィルタリングして、ベンダー名を「Cisco」に設定することです。このサーチをSPLで書くと、次のようになります。
| rex field=_raw "/(%ASA|%FTD)-\d+-(?P\d+)/" | search message-number != 43003 | eval vendor_name = "Cisco" | fields - message-number
さて、このSPLをEdge Processorパイプラインで使用するには、どうすればよいでしょうか。方法は2つあります。
- 明示的にspl1コマンドを使用する
- spl1コマンドとして扱うためにバッククォート(`...`)を使用する
つまり、先ほどのSPLクエリーを spl1 コマンドの引数として指定するか、SPLクエリー自体をバッククォートで囲むだけです。SPL2に変換できるクエリーは、クリックすると、左側に電球マークが表示されます。または、クエリーの上にポインターを置いてから[Quick Fix]をクリックすることもできます。その後、[Convert SPL1 to SPL2]をクリックすれば、完了です。
SPLとSPL2の小さな違いの1つとして、SPL2では、英数字とアンダースコア(_)以外の文字を含むフィールド名を一重引用符で囲む必要があります。図を見ると、この点が自動で処理され、コンバーターが一重引用符を追加して「message-number」を囲んだことがわかります。
それでは、searchコマンドはどうなるのでしょうか。コマンドサポート表によると、Edge Processorでは(まだ)サポートされていません。しかし、ご安心ください。コンバーターでは、search句を where コマンドに変換するオプションも表示されます(例外もあります)。
変換での注意点
SPLからSPL2への変換については、以下の点に注意してください。
-
このコンバーターはあくまでも、SPL2でのパイプライン構築を支援するUIツールにすぎません。パイプラインビルダーでは、spl1コマンドやバッククォートを含むパイプラインはコンパイルできません。SPL2コマンド互換性表に示されているとおりです。そのため、コンバーターでSPLからSPL2への変換がうまくいかず、spl1やバッククォートが残ってしまった場合、それらがサポートされていないことを示す「Command spl1 is not supported in profile 'edgeProcessor'」というエラーメッセージが表示されます。この場合は、パイプラインを手動で書き換える必要があります。
-
コマンドがSPL2に変換されたとしても、パイプラインビルダーでサポートされているとは限りません。これは、timechartなど多くのSPL2コマンドが、Edge ProcessorやIngest Processorで(まだ)サポートされていなくても、サーチランタイムのsplunkdではサポートされているためです(splunkdは、Data Managementホームページの左側にある[Search]タブからSPL2を使って利用できます)。それらのコマンドを含むパイプラインを実行しようとすると、「Command 'stats' is not supported in profile 'edgeProcessor'」といったエラーメッセージが表示されます。
-
コンバーターは、できる限りプロファイルに応じた変換を行おうとします。そのため、パイプラインビルダーでの変換は、splunkdを対象にしたサーチ変換とは内容が多少異なることがあります。たとえば、「search」という語は保管中のデータ用に予約されているため、SPL2の search コマンドはEdge ProcessorとIngest Processorではサポートされません。そのため、ストリーミングパイプラインでSPLの search コマンドを変換すると、コンバーターはコンテキストを解析したうえで、多くの場合、SPL2の where コマンドまたは句に変換します(上記の2つ目のGIF画像を参照)。
-
パイプラインでSPLとSPL2を併用している場合、SPLのセクションだけを個別に一括変換できます。たとえば、パイプラインを次のような構成で記述したとします。
$pipeline = from $source | <SPL here> | <SPL2 here> | <SPL here> | into $destinationこの場合、コンバーターでは、SPLのみで記述されているセクションがすべて変換されます。前述のとおり、パイプラインを実行する前に、すべてのSPLをSPL2に変換する必要があります。
SPLの search とSPL2の where は、完全に意味が一致するわけではありません。そのため、全体的なベストプラクティスとして、パイプラインをあらかじめテストし、変換後のSPL2が、もともとSPLで意図していたとおりに動作することを確認するように強くお勧めします。
さっそく使ってみましょう!
使い方がわかったら、あとは実践するのみです。バッククォートを付けて変換してみましょう。
SPLからSPL2へのコンバーターの機能と制約について詳しくは、こちらのドキュメントをご覧ください。
SPLからSPL2への変換対象についてご要望がある場合は、ぜひSplunk Ideasポータルを使い、Edge Processorに関するアイデアをお送りください。
SPLからSPL2への変換についての一般的なご相談やご意見がある場合は、SplunkユーザーグループSlackの#spl2チャネルにお気軽にご参加ください!
関連記事

根本原因分析をさらにスマートに:ITSIのKPIから因果関係を特定する

コミュニティ検出アルゴリズムでITSIのエピソードをさらにスマートに
