#ようこそディープな世界へ
SplunkのSPLを全力で間違った方向に使います。
実用性皆無の趣味全開な記事です。
普通のプログラミング言語のようにSPLを使ってみるという試みです。
####解析対象
パケットデータやログなどのSplunkに取り込むデータ?
そんなもんは無い!
男は黙って無から有を作り出せ。
####検証するSplunk
検証する場合はSplunkにデータを取り込んではいけません。
データが取り込まれていた場合のケアを考えていません。
Splunkバージョンは8.0.0です。
#こんにちわ、世界!!
プログラミングでは一番はじめに**”Hello world!!”**を表示するのが慣習なのでSPLでも同じことをやってみましょう。
今回の記事ではパイプ(命令)毎に改行を行います。そのほうが見やすいですからね。
| stats count
| eval output="Hello world!!"
| table output
1行ずつ説明しましょう。
####| stats count
いきなり集計コマンドです。
間違いじゃないか?いえいえそんなことはないです。
なぜならこのコマンドは古代から続く無から有を作り出せる命令だからです。
たとえば以下のように何も結果がない状態から・・・
このように列を作ることができます。
昔話的なことを語るならば、makeresultsコマンドができる前はこれを使用して無から有を作り出していたという状況が一時的にありました。いまこの方法を取るのはあまりスマートとは言えないです。これで生成された列は_timeも空なのでイベントとして使おうとすると面倒です。
####| eval output="Hello world!!"
これは前の命令で生成されたイベントにoutputカラムを追加して**”Hello world!!”**という文字列を入れます。
まあこれはSPL経験者ならすんなりわかるでしょう。
####| table output
outputフィールドのみ出力するようにして完成です。
#関数グラフ表示
さて、無事ハローワールドを表示できたところでSplunkの強力なグラフ化機能を使用して関数のグラフ化を行いたいと思います。
まずは、x=0~x=1000の間の数字の連続したテーブルを作成するサーチ分を組み立てます。
以下のようになります。
| makeresults
| eval key="Date",dateFrom = now(),dateEnd =now() + (2000)
| untable key,"event","date"
| makecontinuous date span=1s
| eval start=-10 ,smpl=0.01
| eval x = date - now()
| table x
このようにすることで0~1000の連続した数字を生成することが可能です。
####y=x
まずはy=xのグラフ化をしてみます。以下のようになりますね。
| makeresults
| eval key="Date",dateFrom = now(),dateEnd =now() + (2000)
| untable key,"event","date"
| makecontinuous date span=1s
| eval start=-10 ,smpl=0.01
| eval x = date - now()
| eval y = x
| table x,y
結果は以下のようになります。
| makeresults
| eval key="Date",dateFrom = now(),dateEnd =now() + (2000)
| untable key,"event","date"
| makecontinuous date span=1s
| eval start=-10 ,smpl=0.1
| eval x = start + ((date - now()) * 0.01)
| eval y = (x * x * x) - (x * 50)
| table x,y
####バグ発見
2次関数はないのかって?まあこれを見てほしい。
小数点以下が計算されてるところと計算されてないところがある!
まあ、特殊なサーチ文書くとこういう不具合当たりますよね。
検証用にサーチ文置いときますね。
| makeresults
| eval key="Date",dateFrom = now(),dateEnd =now() + (2000)
| untable key,"event","date"
| makecontinuous date span=1s
| eval start=-10 ,smpl=0.01
| eval x = start + ((date - now()) * 0.01)
| eval y = x * x
| table x,y
####次回へ
ホントはデータ保存と読み込みまで書きたかったのですが今日は時間切れなので25日の記事に書きたいと思います。