技術ログとビジネスログなど、まったく異なる2種類のログがあるとします。
gelf
出力を使用してgraylog2サーバーにルーティングされます。elasticsearch_http
出力を使用してelasticsearchクラスターに保存されます。たとえば、Syslog-NG
を使用すると、構成ファイルでは、ディスパッチする前に個別に処理できるいくつかの異なる入力を定義できます。 Logstash
ができないようです。 1つのインスタンスを2つの特定の構成ファイルで開始できる場合でも、すべてのログは同じチャネルを使用し、同じ処理を適用しています...
さまざまな種類のログがあるのと同じ数のインスタンスを実行する必要がありますか?
さまざまな種類のログがあるのと同じ数のインスタンスを実行する必要がありますか?
番号! 1つのインスタンスのみを実行して、異なるタイプのログを処理できます。
Logstash構成ファイルでは、異なる type を使用して各入力を指定できます。次に、フィルターで if を使用して異なる処理を区別できます。また、出力では、異なる宛先への「if」出力を使用できます。
input {
file {
type => "technical"
path => "/home/technical/log"
}
file {
type => "business"
path => "/home/business/log"
}
}
filter {
if [type] == "technical" {
# processing .......
}
if [type] == "business" {
# processing .......
}
}
output {
if [type] == "technical" {
# output to gelf
}
if [type] == "business" {
# output to elasticsearch
}
}
これがあなたを助けることを願っています:)
複数のファイル入力にタグを使用しました:
input {
file {
type => "Java"
path => "/usr/aaa/logs/stdout.log"
codec => multiline {
...
},
tags => ["aaa"]
}
file {
type => "Java"
path => "/usr/bbb/logs/stdout.log"
codec => multiline {
...
}
tags => ["bbb"]
}
}
output {
stdout {
codec => rubydebug
}
if "aaa" in [tags] {
elasticsearch {
hosts => ["192.168.100.211:9200"]
index => "aaa"
document_type => "aaa-%{+YYYY.MM.dd}"
}
}
if "bbb" in [tags] {
elasticsearch {
hosts => ["192.168.100.211:9200"]
index => "bbb"
document_type => "bbb-%{+YYYY.MM.dd}"
}
}
}
LogstashはInputセクションで3つ以上のファイルを読み込むことはできないと思います。以下を試してください
input {
file {
type => "technical"
path => "/home/technical/log"
}
file {
type => "business"
path => "/home/business/log"
}
file {
type => "business1"
path => "/home/business/log1"
}
}