# How to Parse my JSON stack trace in logstash?

**URL:** <https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451>\
**Category:** Logstash\
**Created:** [November 19, 2019, 8:03am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451 "2019-11-19T08:03:01Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 8:03am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/1 "2019-11-19T08:03:01Z")

</div>

Logstash is not parsing the my full stack trace. The stack trace is parsing but only part is coming of stack trace as full stack trace is delayed.

---

<div class="post-metadata">

**Author:** ![gab.bernasconi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gab.bernasconi/32/57955_2.png) [@gab.bernasconi](https://discuss.elastic.co/u/gab.bernasconi)\
**Post date:** [November 19, 2019, 10:30am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/2 "2019-11-19T10:30:44Z")

</div>

Can you please add some context? For example, it would be useful to see an example of the stack trace that you are trying to import, and the Logstash configuration that you are using to do so.

---

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 10:48am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/3 "2019-11-19T10:48:01Z")

</div>

{"timestamp":"2019-11-19 15:42:35.891","level":"ERROR","thread":"http-nio-8080-exec-7","mdc":{"appVersion":null,"appType":null,"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86\_64; rv:70.0) Gecko/20100101 Firefox/70.0","ipAddress":"127.0.0.1","member":"1","BuildVersion":null,"queryString":"id=736145632145","uri":"/register/needDetail","HostName":"urbanpro-Vostro-3583","vistorId":"a94b99a1-6707-4865-810b-534b4d95bc68"},"logger":"org.grails.web.errors.GrailsExceptionResolver","message":"NullPointerException occurred when processing request: [GET] /register/needDetail - parameters:\nid: 736145632145\nNo enquiry found. Stacktrace follows:","context":"default","exception":"java.lang.reflect.InvocationTargetException: null\n\tat org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:210)\n\tat org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:187)\n\tat org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n\tat grails.plugin.springsecurity.rest.RestLogoutFilter.doFilter(RestLogoutFilter.groovy:80)\n\tat org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)\n\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)\n\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n\tat grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat grails.plugin.springsecurity.rest.RestAuthenticationFilter.doFilter(RestAuthenticationFilter.groovy:143)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)\n\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)\n\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)\n\tat org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)\n\tat org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)\n\tat com.mks.filters.ResponseCacheFilter.doFilter(ResponseCacheFilter.java:483)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: java.lang.NullPointerException: No enquiry found\n\tat com.mks.util.AssertUtil.assertNotNull(AssertUtil.groovy:10)\n\tat RegisterController$\_closure157.doCall(RegisterController.groovy:7737)\n\t... 41 common frames omitted\n"}  
this is the configration:  
`input{  
file{  
path =\> "FILENAME"  
start\_position =\> beginning  
}  
}  
filter {  
json { source =\>"message"  
target =\> "log"  
}  
}

output{  
loggly{  
key =\> "loggly\_token"  
tag =\> "logstash"  
}  
}`

---

<div class="post-metadata">

**Author:** ![gab.bernasconi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gab.bernasconi/32/57955_2.png) [@gab.bernasconi](https://discuss.elastic.co/u/gab.bernasconi)\
**Post date:** [November 19, 2019, 10:57am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/4 "2019-11-19T10:57:59Z")

</div>

And what are you seeing as output in Loggly? You said that you are getting only "part of" your stack trace. Can you show us the result of the parsing of the example that you posted?

---

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 11:00am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/5 "2019-11-19T11:00:23Z")

</div>

Only limited stack trace:

{"timestamp":"2019-11-19 15:42:35.877","level":"ERROR","thread":"http-nio-8080-exec-7","mdc":{"appVersion":null,"appType":null,"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86\_64; rv:70.0) Gecko/20100101 Firefox/70.0","ipAddress":"127.0.0.1","member":"1","BuildVersion":null,"queryString":"id=736145632145","uri":"/register/needDetail","HostName":"urbanpro-Vostro-3583","vistorId":"a94b99a1-6707-4865-810b-534b4d95bc68"},"logger":"StackTrace","message":"Full Stack Trace:","context":"default","exception":"java.lang.reflect.InvocationTargetException: null\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)\n\tat org.grails.core.DefaultGrailsControllerClass$ReflectionInvok

---

<div class="post-metadata">

**Author:** ![gab.bernasconi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gab.bernasconi/32/57955_2.png) [@gab.bernasconi](https://discuss.elastic.co/u/gab.bernasconi)\
**Post date:** [November 19, 2019, 11:24am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/6 "2019-11-19T11:24:09Z")

</div>

Assuming UTF-8 encoding, your original payload is 5,490 bytes, and the output your are seeing in Loggly is truncated at exactly 1,024 bytes. It looks like something is truncating your message at 1KB.

Which version of Logstash are you using?

Meanwhile, try changing your configuration in this way, and see if it changes something:

```
input {
  file {
    path => "FILENAME"
    start_position => beginning
    codec => "json"
  }
}

output {
  loggly {
    key => "loggly_token"
    tag => "logstash"
  }
}

```

Using the `json` filter is not necessary, if you provide a `codec` to the file input. This will leave your payload in the `message` field, and it will be shipped to Loggly in this way.

---

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 11:36am UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/7 "2019-11-19T11:36:42Z")

</div>

logstash-7.4.2

---

<div class="post-metadata">

**Author:** ![gab.bernasconi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gab.bernasconi/32/57955_2.png) [@gab.bernasconi](https://discuss.elastic.co/u/gab.bernasconi)\
**Post date:** [November 19, 2019, 1:21pm UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/8 "2019-11-19T13:21:33Z")

</div>

I can't find any specific Logstash configuration that would truncate data at 1,024 bytes. Are you sure this is not happening on the Loggly side? Can you check if there is a specific configuration on the Loggly side that cuts documents longer than 1,024 bytes?

Did you try using `codec => "json"` instead of the `json` filter? Does it change anything?

---

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 1:32pm UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/9 "2019-11-19T13:32:42Z")

</div>

Thanks that worked  
What was the problem anyways?

---

<div class="post-metadata">

**Author:** ![gab.bernasconi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gab.bernasconi/32/57955_2.png) [@gab.bernasconi](https://discuss.elastic.co/u/gab.bernasconi)\
**Post date:** [November 19, 2019, 1:38pm UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/10 "2019-11-19T13:38:58Z")

</div>

If that worked, the problem was probably in the `json` filter; I cannot find anything in the documentation that points to the filter truncating data longer than 1,024 bytes.

In any case, happy to help!

---

<div class="post-metadata">

**Author:** ![rishab](https://avatars.discourse-cdn.com/v4/letter/r/e36b37/32.png) [@rishab](https://discuss.elastic.co/u/rishab)\
**Post date:** [November 19, 2019, 1:39pm UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/11 "2019-11-19T13:39:44Z")

</div>

Thank you very much!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 17, 2019, 1:39pm UTC](https://discuss.elastic.co/t/how-to-parse-my-json-stack-trace-in-logstash/208451/12 "2019-12-17T13:39:47Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
