web-dev-qa-db-ja.com

LogStashでLog4Jを使用する

LogStashは初めてです。 Log4JのJavaアプリケーションからログを作成しました。これらのログをElasticSearchに取得しようとしています。私の人生では、取得できないようです。現在、私は次のlogstash構成を使用しています。

input {
  file {
    type => "log4j"
    path => "/home/ubuntu/logs/application.log"
  }
}
filter {
  grok {
    type => "log4j"
    add_tag => [ "ApplicationName" ]
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:level}" ]
  }
}
output {
  elasticsearch {
    protocol => "http"
    codec => "plain"
    Host => "[myIpAddress]"
    port => "[myPort]"
  }
}

この構成は、ヒットまたはミスのようです。理由はわかりません。たとえば、2つのメッセージがあります。 1つは機能し、もう1つは解析エラーをスローします。しかし、なぜだかわかりません。メッセージとそれぞれの結果は次のとおりです。

Tags                   Message
------                 -------
["_grokparsefailure"]  2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2- 
                       thread-6] message was null from https://domain.com/id-1/env-
                       MethodName

["ApplicationName"]    2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2-
                       thread-4] message was null from https://domain.com/id-1/stable-
                       MethodName

["ApplicationName"]のあるものには、timestamplevelのカスタムフィールドがあります。ただし、["_ grokparsefailure"]を含むエントリにはカスタムフィールドがありません。奇妙な部分は、上のメッセージ列に示されているように、ログがほぼ同一であるということです。これは本当に私を混乱させていますが、私は問題が何であるかを理解する方法やそれを乗り越える方法を知りません。 log4jログをlogstashにインポートし、次のフィールドを一貫して取得する方法を知っている人はいますか?

  • ログレベル
  • タイムスタンプ
  • ログメッセージ
  • マシン名
  • Thread

あなたが提供できる助けをありがとう。ログレベル、タイムスタンプ、ログメッセージだけができたとしても、それは大きな助けになります。心から感謝します!

27
user3469584

Logstashにはlog4jソケットリスナーを使用し、log4jソケットアペンダーを使用することをお勧めします。

Logstash conf:

input {
  log4j {
    mode => server
    Host => "0.0.0.0"
    port => [logstash_port]
    type => "log4j"
  }
}
output {
  elasticsearch {
    protocol => "http"
    Host => "[myIpAddress]"
    port => "[myPort]"
  }
}

log4j.properties:

log4j.rootLogger=[myAppender]
log4j.appender.[myAppender]=org.Apache.log4j.net.SocketAppender
log4j.appender.[myAppender].port=[log4j_port]
log4j.appender.[myAppender].remoteHost=[logstash_Host]

Log4jの入力については、logstashのドキュメントに詳細情報があります。 http://logstash.net/docs/1.4.2/inputs/log4j

25
ranxxerox

以前に使用されたSocketAppenderソリューションは、セキュリティ上の問題のために非推奨になっているようです。現在推奨される解決策は、log4j fileAppenderを使用し、filebeatプラグインを介してlogstashにファイルを渡してからフィルターすることです。詳細については、以下のリンクを参照できます。

https://www.elastic.co/blog/log4j-input-logstash

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html

1
Arijit B

私のブログで JSONメッセージをElasticSearchに送信し、GROKで解析する方法を説明しました。 説明とJava example のブログ投稿を見るにはクリックしてください。投稿には説明がありますが、example(githubの完全なプロジェクト)の簡単なmavenプロジェクトもあります。

お役に立てば幸いです。

1
albgorski