2015年3月30日月曜日

Logstashでファイルを最後まで読んだあとに終了する方法

はじめに

 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」をクリック。
以下のファイルをデスクトップに置きました。
  • 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が終了しているのが確認できました。

0 件のコメント:

コメントを投稿