引き続きlogstash関連です。
今回はlogstashで複数ポートでsyslog転送を待ち受ける方法です。
下記のようにinputを複数記述すること複数ポートを受け付けることが可能です。
tcp { port => 51000 type => app1 } tcp { port => 52000 type => app2 }
受け付けるポート毎にフィルタの内容が設定できるように「type」を設定しておきます。
「type」を設定しておくことで下記のようにフィルタを振り分けすることができます。
filter { if [type] == "app1" { grok { match => { "message" => [ "%{TIMESTAMP_ISO8601}%{SPACE}%{USERNAME:service}%{SPACE}%{WORD:status}%{GREEDYDATA:message}", "%{GREEDYDATA:message}" ] } } mutate { add_field => { "ddsource" => "java" } add_field => { "service" => "app1" } } } if [type] == "app2" { grok { match => { "message" => [ "%{GREEDYDATA:message}" ] } } mutate { add_field => { "ddsource" => "ruby" } add_field => { "service" => "app2" } } } }
input、filter、outputの1セットを別にファイルに分けても全てのinputが全てのfilterを通るため分けることができませんでした。
inputでtypeを指定し、それぞれの処理で振り分ける必要があるようです。