0

重大度が「ERROR」のログは、エラーおよびレポートツールでは認識されません。アプリケーションログは、Fluentdエージェントを使用してGoogle Stackdriver Loggingに転送され、その一部はサードパーティのJavaコンポーネントです。Google Stackdriverエラーエラーが発生していません。

{ 
insertId: "14sf3lvg3ccncgh" 
jsonPayload: { 
    class: "o.a.w.MarkupContainer"  
    message: "Unable to find component with id 'search2' in [Form [Component id = form]] 
       Expected: 'form:search2'. 
       Found with similar names: 'form:search' 
     at org.apache.wicket.markup.MarkupStream.throwMarkupException(MarkupStream.java:526) ~[wicket-core-6.22.0.jar:6.22.0] 
     at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1438) ~[wicket-core-6.22.0.jar:6.22.0] 
     at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1557) ~[wicket-core-6.22.0.jar:6.22.0] 
     at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1532) ~[wicket-core-6.22.0.jar:6.22.0] 
     at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1487) ~[wicket-core-6.22.0.jar:6.22.0]"  
    milsec: "576"  
    reportLocation: {…}  
    serviceContext: {…}  
    tag: "test.gui"  
    thread: "[ajp-apr-8009-exec-5]"  
} 
labels: {…} 
logName: "projects/myservice/logs/test.gui" 
receiveTimestamp: "2017-08-29T15:20:16.847782870Z" 
resource: {…} 
severity: "ERROR" 
timestamp: "2017-08-29T15:20:11Z" 
} 

次の設定を使用すると、自分のアプリケーションログをGoogle社のStackdriverログに正しく転送でき、すべてのエントリが正しく識別されます。

<source> 
    @type tail 
    path /var/log/test/test_gui/test_gui.log 
    pos_file /var/lib/google-fluentd/pos/test_gui-multiline.pos 
    read_from_head true 
    tag test.gui 
    format multiline 
    time_format %Y-%m-%d %H:%M:%S 
    format_firstline /\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2},\d{1,3}\s(?<severity>\S*)/ 
    format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}),(?<milsec>\d{1,3})\s(?<severity>\S*)\s(?<class>\S*)\s(?<thread>\[\S*\])\s(?<message>.*)/ 
</source> 

は、しかし、重大度ERRORため、エラー報告は、これらのエントリに気づいたことはありません。

出力をtextPayLoadとして同定された、私は、出力jsonPayloadまだエラーjsonPayloadは無視されて

<filter test.gui> 
    @type record_transformer 
    <record> 
    serviceContext {"service": "test.gui", "version": "1"} 
    reportLocation {"filePath": "test_gui.log", "lineNumber": "unknown", "functionName": "unknown"} 
    tag ${tag} 
    </record> 
</filter> 

た確保以下のフィルタを使用しました。

私は、フィルタを使用してメッセージを交換する場合は、突然の報告は私が私の次のステップは、警告のいくつかのフォームを実装するだろうとして、これらのエラーエントリを選ぶためにエラー報告を強制するにはどうすればよい

<filter test.gui> 
     @type record_transformer 
     <record> 
     serviceContext {"service": "test.gui", "version": "1"} 
     reportLocation {"filePath": "test_gui.log", "lineNumber": "unknown", 
     "functionName": "unknown"} 
     message "java.lang.TestError: msg 
      at com.example.TestClass.test (TestClass.java:51) 
      at com.example.AnotherClass (AnotherClass.java:25)" 
     tag ${tag} 
    </record> 
    </filter> 

を働いているエラー。

答えて

1

第三者が正しいJavaスタックトレースを生成しませんでした。私はreportLocationが必要でしたが、これは文脈の中にある必要があります。

私は次の行に変更:ログが、今のStackdriverエラー報告によってピックアップされていることを保証

context { "reportLocation" : {"filePath": "test_gui.log", "lineNumber": 1, "functionName": "unknown"} } 

reportLocation {"filePath": "test_gui.log", "lineNumber": "unknown", "functionName": "unknown"} 

を。

これが私のフィルタの最終版である:

<filter test.gui> 
    @type record_transformer 
    <record> 
    serviceContext {"service": "test.gui", "version": "1"} 
    context { "reportLocation" : {"filePath": "test_gui.log", "lineNumber": 1, "functionName": "unknown"} } 
    tag ${tag} 
    </record> 
</filter> 
関連する問題