Я пытаюсь интегрировать наш продукт с 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"] }
}