Слияние extendedStackTrace, полученного из log4j, с обычной трассировкой стека - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь интегрировать наш продукт с ELK. Я использую log4j и сокет appender с JsonLayout и вижу все свои логи в Kibana. Но следы стека у меня выглядят так:

"thrown": {
    "extendedStackTrace": [
      {
        "file": "ApacheHttpClient4Handler.java",
        "method": "handle",
        "line": 187,
        "exact": false,
        "location": "jersey-apache-client4-1.19.1.jar",
        "class": "com.sun.jersey.client.apache4.ApacheHttpClient4Handler",
        "version": "1.19.1"
      },
      {
        "file": "EurekaIdentityHeaderFilter.java",
        "method": "handle",
        "line": 27,
        "exact": false,
        "location": "eureka-client-1.9.3.jar",
        "class": "com.netflix.discovery.EurekaIdentityHeaderFilter",
        "version": "1.9.3"
      }
    ],
    "localizedMessage": "java.net.ConnectException: Connection refused: connect",
    "name": "com.sun.jersey.api.client.ClientHandlerException",
    "cause": {
      "name": "java.net.ConnectException",
      "extendedStackTrace": [
        {
          "file": "DualStackPlainSocketImpl.java",
          "method": "waitForConnect",
          "line": -2,
          "exact": false,
          "location": "?",
          "class": "java.net.DualStackPlainSocketImpl",
          "version": "1.8.0_121"
        },
        {
          "file": "ApacheHttpClient4Handler.java",
          "method": "handle",
          "line": 173,
          "exact": false,
          "location": "jersey-apache-client4-1.19.1.jar",
          "class": "com.sun.jersey.client.apache4.ApacheHttpClient4Handler",
          "version": "1.19.1"
        }
      ],
      "commonElementCount": 29,
      "localizedMessage": "Connection refused: connect",
      "message": "Connection refused: connect"
    },
    "commonElementCount": 0,
    "message": "java.net.ConnectException: Connection refused: connect"
  }

Я не очень знаком с logstash, но я хотел бы видеть трассировки стека, как я привык. Я рассмотрел множество примеров, где использовались плагины фильтров «grok», «mutate», «json», но я не вижу примера, как объединить его так, как это выглядит как обычная трассировка стека, помещенная в отдельный тег.

Пожалуйста, посоветуйте мне что-нибудь

Я хотел бы видеть это как:

2018-09-04 20:18:37 com.netflix.discovery.DiscoveryClient [ОШИБКА] DiscoveryClient_BOOK-GATEWAY-SERVICE / RUENSUKHOAD2C. не удалось обновить свой кэш! status = Невозможно выполнить запрос на любом известном сервере com.netflix.discovery.shared.transport.TransportException: не удается выполнить запрос на любом известном сервере в com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute (RetryableEurekaHttpClient.java:112) ~ [eureka-client-1.9.3.jar: 1.9.3] в com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications (EurekaHttpClientDecorator.java:134) ~ [eureka-client-1.9.3.jar: 1.9.3] на java.lang.Thread.run (Thread.java:745) [?: 1.8.0_121] Вызвано: java.net.ConnectException: соединение отказано: соединение на java.net.DualStackPlainSocketImpl.waitForConnect (собственный метод) ~ [?: 1.8.0_121] на java.net.DualStackPlainSocketImpl.socketConnect (DualStackPlainSocketImpl.java:85) ~ [?: 1.8.0_121] в org.apache.http.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:118) ~ [httpclient-4.5.6.jar: 4.5.6] в org.apache.http.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:56) ~ [httpclient-4.5.6.jar: 4.5.6] в com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle (ApacheHttpClient4Handler.java:173) ~ [jersey-apache-client4-1.19.1.jar: 1.19.1] ... еще 29

Мой файл logstash.conf, который не работает:

input {
  tcp {
    port => 9600
    codec => json
  }
}

filter {
  if [thrown] {
    ruby {
        code => "
            event.get('thrown')['extendedStackTrace'].map! { |v| v.map { |k, v| "#{v}" }.join(", ") }
        "
     }
  }
}

output {
  elasticsearch { hosts => ["elasticsearch-service:9200"] }
}
...