やあ、みんな
だよ
いつもの作者は「記事の内容がよくわからない」と言われて凹んだので、僕が呼ばれたよ
よろしくね。
今回は「CSVを読み込んで、出力するのがよくわからない」というリクエストを受けたので説明するよ。
Macosxで動かしているので、WindowsやLinuxの人はディレクトリやフォルダを読み替えてね。
SplunkでCSVを扱うコマンドについて
SplunkでCSVを扱うコマンドは何個かあるよ
最初の2つが読み込みで、あとの2つが出力するコマンドになるよ。リンク先にいくとSplunk>Docsになっているから暇があったら読んでね。
今回使うもの
時間:過去24時間やモード:スマートモードは変更しないでね
単純にCSVを扱う
まず最初はCSVを作って、そのCSVを入力してみよう.
使うコマンドはoutputcsvとinputcsv
outputcsvを使ってCSVを出力する
まずは、CSVがないと始まらないので、作ってみよう
| tstats count where index=_internal by _time span=1h sourcetype
| timechart count by sourcetype where sum in top5
| outputcsv result.csv

![]()
に注目。
Splunkからお知らせがあるみたいだよ。クリックして開いてみよう。
Results written to file `/Application/Splunk/var/run/splunk/csv/result.csv`
結果を_/Application/Splunk/var/run/splunk/csv/result.csv_に出力した
とでているね。
Splunkがファイルを作ったりした時は、このようにジョブに表示をしてくれるので、確かめよう
inputcsvを使ってCSVを読み込む
それじゃ先ほど作ったCSVを読み込んでみよう。
いったんSPLを全部消してね。
| inputcsv result.csv

読み込めたけど、列の順番がバラバラだ。Splunkの列の順番はアルファベット順になってしまうよ
![]()
tableコマンドで並び替えてね。
少しまとめ
![]()
outputcsvとinputcsvを使ってCSVを出力して読み込んでみたよ。
でも、入出力する先が固定ということと、単純にCSVを扱うだけのコマンドなので、あんまり使い勝手がよくないよね。
検索した結果と合わせてみる。
やっぱりCSVを検索した結果と比較とかしてみたいよね。
そうなるとlookupコマンドが使いたいからinputlookupやoutputlookupの出番だね。
outputlookupを使ってCSVを作る
今回は検索したフィールドと比較とかするのでこんなCSVを作ってみたよ
index=_internal
| top 5 sourcetype
| fields sourcetype
| streamstats current=f count
| eval text=mvindex(split("Oh,Yeah,Good,Bad,even",","),count)
| table sourcetype text
| outputlookup soucetype_output.csv
![]()
が光っているね。確かめてみよう。
今回の場所はどこだったかな?
Results written to file `/Application/Splunk/etc/apps/search/lookups/sourcetype_output.csv`
![]()
outputlookupを使うと、Appの下のlookupsディレクトリに出力されるんだ
だから、Appを作って別にしてあげると、管理とかが楽になるよ。試してみてね。
Appの作り方はクラスメソッドの江口さんの記事か本をみてね。
inputlookupを使ってCSVを確認する
| inputlookup soucetype_output.csv
![]()
rを抜かしているのに気づいたけど、そのままいくね。
| sourcetype | text |
|---|---|
| splunkd | Oh |
| splunkd_ui_access | Yeah |
| splunkd_access | Good |
| splunk_web_service | Bad |
| splunk_web_access | even |
|
|
inputlookupを使って、CSVの中のフィールドを出力する。
| tstats count as Counts where index=_internal by sourcetype
| inputlookup append=t soucetype_output.csv
| selfjoin sourcetype
![]()
今回もSplunkからお知らせがあるみたいだよ。クリックして開いてみようね。
今回の結果は
| sourcetype | Counts | text |
|---|---|---|
| splunk_web_access | 53 | even |
| splunk_web_service | 70 | Bad |
| splunkd | 426106 | Oh |
| splunkd_access | 1268 | Good |
| splunkd_ui_access | 11007 | Yeah |
CSVのtextフィールドに値がある_sourcetype_だけが残ったね。
いったん消してもらったあと
| tstats count as Counts where index=_internal by sourcetype
| inputlookup append=t soucetype_output.csv
の結果と比べて欲しいな。
outlookupを使って、結果を更新する。
先ほどのCountsのある結果を出力してみよう。
| tstats count as Counts where index=_internal by sourcetype
| inputlookup append=t soucetype_output.csv
| selfjoin sourcetype
| outputlookup soucetype_output.csv
![]()
今回もSplunkからお知らせがあるみたいだよ。クリックして開いてみようね。
じゃ、確かめてみよう
| inputlookup soucetype_output.csv
| Counts | sourcetype | text |
|---|---|---|
| 53 | splunk_web_access | even |
| 70 | splunk_web_service | Bad |
| 428656 | splunkd | Oh |
| 1294 | splunkd_access | Good |
| 11511 | splunkd_ui_access | Yeah |
|
|
outputlookupを使って追記する
ファイルを作った後、追記していきたいこともあるよね。
|inputlookup soucetype_output.csv
|outputlookup append=t soucetype_output.csv
outputlookup append=tで追記に変わるよ。
結果を確認してみると
| inputlookup soucetype_output.csv
| Counts | sourcetype | text |
|---|---|---|
| 53 | splunk_web_access | even |
| 70 | splunk_web_service | Bad |
| 428656 | splunkd | Oh |
| 1294 | splunkd_access | Good |
| 11511 | splunkd_ui_access | Yeah |
| 53 | splunk_web_access | even |
| 70 | splunk_web_service | Bad |
| 428656 | splunkd | Oh |
| 1294 | splunkd_access | Good |
| 11511 | splunkd_ui_access | Yeah |
|
|
まとめ
今回はCSVを扱う4つのコマンドを使ってみて、どんなコマンドなのか説明してきたよ。
みんなわかったかな?
lookupについては触れなかったけど、大体CSVと一緒なのでやってみてね。
じゃ、リクエスト待ってます。 またね〜
こんな感じでいいでしょうか?
https://docs.splunk.com/Documentation/Splunk/latest/Knowledge/ConfigureCSVlookups
ここら辺に触れられなかった
