Logstashでcsvファイルを扱う
ElasticStackのツールであるLogstashにてCSVファイルは簡単に取り込むことができます。
その手順を備忘録として記載します。
フィルターの動作確認
# cat /etc/logstash/conf.d/testcsv.conf input { stdin { } } filter { csv { columns => ["Name","Age","Over20"] } } output { stdout {} }
この設定ファイルは、
標準入力で受け取ったCSVファイルを
"Name","Age","Over20"
上記の構造として認識し
標準出力に返すための設定ファイルです。
動作結果
実際に動かしてみます。
# cat /var/log/test.csv | /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/testcsv.conf .... .... { "@timestamp" => XXXX-XX-.... "Name" => "Ken", "@version" => "1", "Over20" => "O", "Age" => "23", "message" => "Ken,23,O", "host" => "xxxxxx" } { ...
ちゃんと値が格納されていることが分かります。
補足として、Name、Age、Over20の全てが文字列として格納されています。
Ageに関しては数値として扱いたい場合、明示的に指定してあげる必要があります。
... csv { columns => ["Name","Age","Over20"] convert => { "Age" => "integer" } } ...
この設定ファイルで再度Logstashに読み込ませると
... "Age" => 20 ...
となりダブルクオテーションが外れます。
こうすれば、Elasticsearch経由でKibanaで可視化する際に数値として認識されて便利です。
今回は整数値ですが、少数点を含む場合はfloatと変換してください。
以上、LogstashによるCSVファイルの取り込みについてでした。