2016-11-22 12 views
1

splunkのログバックアペンダを使用してJavaアプリケーションでsplunkに直接ログオンしようとしています。Logbackアペンダを使用してSplunkにログオンしようとしています

何も見えないようですが、手動でRESTクライアントでpostコマンドを発行すると、splunkで自分のデータが表示されています。

公式のスプランクログバックテストを実行することができませんでした。

logback.xml

<appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender"> 
    <url>http://mySplunkUrl:8088/services/collector</url> 
    <token>1234566789</token> 
    <disableCertificateValidation>true</disableCertificateValidation> 
    <batch_size_count>1</batch_size_count> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%msg</pattern> 
    </layout> 
    </appender> 

    <root level="trace"> 
    <appender-ref ref="SPLUNK" /> 
    </root> 

</configuration> 

ユニットテスト

@Test 
public void splunkLogger() { 
    Logger logger = LoggerFactory.getLogger(LogFactoryTest.class); 
    Date date = new Date(); 
    String jsonMsg = String.format("{event:'CancerCenterTest'}"); 
    logger.info("CancerCenterTest"); 
    logger.info(jsonMsg); 
} 

これは私が使用しようとしていたドキュメントです:http://dev.splunk.com/view/splunk-logging-java/SP-CAAAE7M

私は明らかに何かが足りないのですか?

EDIT は、ここに私のプロジェクトへのリンクです - https://github.com/toymachiner62/splunk-logging

+0

あなたのプロジェクトの.zipを[email protected]に送ることはできますか?あなたのプロジェクトがどのように設定されているかについてもう少し詳しい情報があれば助けてくれるでしょう。 – Shakeel

+0

@Shakeel大丈夫私はちょうどそれを送りました。 – Catfish

+0

@Catfish単体テスト用のインポート行を投稿することができます。テストでSlf4jまたはLogbackのLoggerとLoggerFactoryクラスが使用されているかどうかは不明です。どのロギング依存関係が使用されていますか?これはmavenプロジェクトですか?もしそうなら、 'pom.xml'の関連部分を貼り付けることができます。また、他の読者とzipを共有することもできればうれしいです; – anttix

答えて

5

問題はのSplunkバックグラウンドスレッドは、ログのアップロードを完了する前に、ユニットテストのJVMが終了するということのようです。

Splunk用のログバックアダプタは、バッチでサーバーにメッセージを送信するバックグラウンドスレッドを使用します。バッチ処理は、batch_interval,batch_size_bytesおよびbatch_size_countパラメータによって制御されます。すべてが非常に低いレベルに設定されていても、ユニットテストJVMは終了して終了する可能性があります。

テストメソッドの最後にスリープを追加してみてください。

Thread.sleep(5000); 

また、エラーが原因で送信が失敗する可能性があります。これらは、Splunkの送信者の失敗をキャッチするためのコードスニペットを追加することで表面化することができます。

HttpEventCollectorErrorHandler.onError(new HttpEventCollectorErrorHandler.ErrorCallback() { 
    public void error(final List<HttpEventCollectorEventInfo> events, final Exception ex) { 
     // FIXME: Dumping stack trace to STDERR is not suitable for production use ! 
     ex.printStackTrace(); 
    } 
}); 

Splunk HttpEventCollectorSenderがエンドポイントに到達できないので、もしそれがへの接続のために数分を取ることができる任意のHttpClientをタイムアウトを設定していないようですのでご注意くださいタイムアウトし、エラーメッセージが表示されます。

編集:にurlパラメータの問題もありました。 URLはパスなしで指定する必要があります。 http://mySplunkUrl:8088/ not http://mySplunkUrl:8088/services/collector

+0

'Thread.sleep(5000)'を追加しても機能しませんでした。私はまた、このプロジェクトを別のプロジェクトへの依存として追加し、それを私のサーバー上で実行しましたが、依然としてログをsplunkに送信しませんでした。 – Catfish

+0

これで、自分のプロジェクトを自分のサーバーで実行しているときに、logback.xmlが依存関係のlogback.xmlによって上書きされていることが分かりました。この断片を追加してsplunkの送信者の失敗を確認しましたが、このエラーが発生しました。{"text": "要求されたURLはこのサーバで見つかりませんでした"、 "code":404} '。 – Catfish

+1

'HttpEventCollectorSender'コードを見ると、パス( '/ services/collector/event/1.0')がURLに自動的に付加されるようです。 'logback.xml'でURLの末尾を削除しようとします。 'http://example.com:8088/services/collector' - >' http://example.com:8088/' – anttix

関連する問題