2

基本的に、私は LogStash が独自のログを消費し、Kibanaで使用するため@timestamplevel、 などのフィールドにデータを入力したいと考えています。

私の現在の設定は次のようになります。

input {
  file {
    path => "/path/to/logstash/logs/*.log"
    type => "logstash"
  }
}

これは、Grok フィルターの作成に戻らない限り、難しいようです。LogStash が独自のログを消費できないのは本当ですか? (Googleが難しく、何も見つかりませんでした。)

それとも、そもそもこれは間違ったアプローチですか?

LogStash からのログ出力の例:

{
  :timestamp=>"2014-09-02T10:38:08.798000+0200", 
  :message=>"Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.4.2/plugin-milestones",
  :level=>:warn
}
4

2 に答える 2

5

groklogstash はrubydebug入力コーデックとして使用できないため、使用する必要があります。

ログは固定形式であるため、操作grokは簡単です。次にdate、交換するために使用します@timestamp

filter {
  grok {
      match => ["message", '{:timestamp=>"(?<timestamp>.*)", :message=>"(?<msg>.*)", :level=>:(?<level>.*)}']
  }
  mutate {
      replace => ["message", "%{msg}" ]
      remove_field => msg
  }
  date {
      match => [ "timestamp", "ISO8601" ]
      remove_field => 'timestamp'
  }
}

この手順が必要になるのは、マッチにmutate入れるだけで配列になり、抽出されたメッセージが追加されるため、別の名前でキャプチャしてからメッセージを置き換えるためです。<message>message

于 2014-09-02T21:26:04.600 に答える
1

はい、そのようにできます。logstash コンソール ログをファイルに保存してください。次に、ruby filterまたはを使用grok filterして情報を解析できます。

次に例を示します。

input {
    file {
            path => "/path/to/logstash/logs/*.log"
    }
}

filter {
    ruby {
            code => "
                    mes = event['message'];
                    startPos = mes.index('level=>');
                    endPos = mes.length;
                    event[':level'] = mes[startPos+7..endPos-2];
            "
    }
}

output {
    stdout {
            codec => "rubydebug"
    }
}
于 2014-09-02T09:49:19.583 に答える