Logstashの長所はリアルタイムにログを処理できるところですが、場合によってはその場限りで実行したいときがあると思います。たとえばスクリプトからLogstashを実行し、処理が完了してから次の処理を実行したいようなときですね。
これをやる方法がありました。標準入力でファイルを渡すだけです。ただし、Logstash1.4.0~1.4.2ではエラーが出て動いてくれませんでした。(Windows環境で。Linuxは未検証)
以下、バッチファイルでLogstashを起動し、ログファイルからcsvを出力して終了させてみます。
環境
Logstash1.3.3
java7
Windows7
準備
javaのPATHは通しておきます。
Logstash1.3.3をダウンロードします。次のURLに行き「download logstash 1.3.3」をクリック。
以下のファイルをデスクトップに置きました。
Logstash1.3.3をダウンロードします。次のURLに行き「download logstash 1.3.3」をクリック。
以下のファイルをデスクトップに置きました。
- syslog.log
- logstash-1.3.3-flatjar.jar
- test.conf Logstash設定ファイル
Logstashへの入力を設定するinput部分で、標準入力を受け取るstdinプラグインを用います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | input { stdin {} } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}.*" } } } output { csv { fields => ["@timestamp"] path => "C:\Users\Ryuji\Desktop\out.csv" } } |
- runlogstash.bat Logstashを呼び出すバッチファイル
Logstash起動時に処理するログファイルを入力します。
1 2 3 4 | cd %~dp0 echo start java -jar logstash-1.3.3-flatjar.jar agent -f test.conf < C:\Users\Ryuji\Desktop\syslog.log > nul echo end |
実行
バッチファイルを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | C:\Users\Ryuji\Desktop>C:\Users\Ryuji\Desktop\runlogstash.bat C:\Users\Ryuji\Desktop>cd C:\Users\Ryuji\Desktop\ C:\Users\Ryuji\Desktop>echo start start C:\Users\Ryuji\Desktop>java -jar logstash-1.3.3-flatjar.jar agent -f test.conf 0<C:\Users\Ryuji\Desktop\syslog.log 1>nul C:\Users\Ryuji\Desktop>echo end end C:\Users\Ryuji\Desktop> |
Logstashが終了しているのが確認できました。