3

Java Web アプリケーション用の ELK スタックをセットアップしています。複数行の Java スタックトレースを logstash で正常に解析し、kibana で例外の数を表示しました。ここで、例外クラスごとにグループ化された例外の数を含む日付ヒストグラムを表示したいと思います。つまり、分または秒あたり 2 つの java.lang.NullPointerException、3 つの java.lang.ArithmeticException です。

Kibana では、インデックス化された完全なスタック トレースを確認できます。しかし、クラスごとに例外グループを視覚化できませんでした。ここでのベストプラクティスは何ですか? Logstash で完全修飾クラス名を取得し、kibana で条件フィルターを実行してみてください。または、kibana で ES の力を利用する方法はありますか?

フィールドの開始の例message:

2015-08-15 23:23:51.695 [qtp1010279661-1074] ERROR c.m.w.s.proxies.ProxyServlet:71 - Can't get content from url http://localhost:8080/...
org.apache.http.conn.HttpHostConnectException: Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1, localhost/fe80:0:0:0:0:0:0:1%1] failed: Connection refused
    at org.apache.http.impl.conn.HttpClientConnectionOperator.connect...

私のlogstash構成:

input {
    file {
        path => "/Users/dbaq/web-app.log"
        start_position => beginning
    }
}

filter {
    multiline {
        pattern => "%{TIMESTAMP_ISO8601:timestamp}"
        negate => true
        what => "previous"
    }

    grok {
        match => ["message", "(?m)%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\]\s*%{LOGLEVEL:severity}\s*%{DATA:class}:%{NUMBER:line:int}\s*\- %{GREEDYDATA:message}"]
        overwrite => [ "message" ]
    }

    date {
        match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ]
    }
}

output {
    elasticsearch {
        protocol => "http"
    }
    stdout {}
}

ご協力いただきありがとうございます

編集 1: 私classの logstash パターンのフィールドは、私の例では、例外がスローされたクラスを表します: c.m.w.s.proxies.ProxyServlet. 例外クラスで集計したい: org.apache.http.conn.HttpHostConnectException.

4

2 に答える 2

4

@Alain Collinsがすでに指摘しているように、視覚化に「データテーブル」を使用できます。

次のパターンを使用して、入力に複数行のコーデックを追加することをお勧めします。

input {
    file {
         path => "/Users/dbaq/web-app.log"
         start_position => beginning
         codec => multiline {
              pattern => "^\s"
              what => "previous"
         }
    }
}

次にできることは、次のようにして、定義済みの grok 正規表現 JAVASTACKTRACEPART を使用することです。

if "multiline" in [tags] {
    grok {
        match => ["message", "%{JAVASTACKTRACEPART}"]
    }
}

これにより、クラスというフィールドも作成されることに注意してください。このフィールドを使用して用語検索を実行し、それに適用されるカウント メトリックを取得できます。

于 2015-08-20T07:49:44.667 に答える