Closed jalogisch closed 3 years ago
I cannot reproduce this issue, neither in a 3.3.2 test instance in pipelines and netcat, nor in master or 3.3 unit tests.
I have a similiar Warning in my envrionment but my messages are not lost and are parsed by the select_jsonpath
Function
I have the Following:
2020-07-30T14:37:08.920+02:00 WARN [JsonParse] Unable to parse JSON
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Virtual': was expecting ('true', 'false' or 'null')
at [Source: (String)"Virtual field 'Barva' not added, because a real field with this name exists already."; line: 1, column: 8]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1804) ~[graylog.jar:?]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:703) ~[graylog.jar:?]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2853) ~[graylog.jar:?]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1899) ~[graylog.jar:?]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:757) ~[graylog.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4043) ~[graylog.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2552) ~[graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.json.JsonParse.evaluate(JsonParse.java:53) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.json.JsonParse.evaluate(JsonParse.java:36) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.expressions.FunctionExpression.evaluateUnsafe(FunctionExpression.java:63) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.functions.ParameterDescriptor.required(ParameterDescriptor.java:116) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.conversion.MapConversion.evaluate(MapConversion.java:48) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.conversion.MapConversion.evaluate(MapConversion.java:33) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.expressions.FunctionExpression.evaluateUnsafe(FunctionExpression.java:63) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.functions.ParameterDescriptor.required(ParameterDescriptor.java:116) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.messages.SetFields.evaluate(SetFields.java:52) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.functions.messages.SetFields.evaluate(SetFields.java:33) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.expressions.FunctionExpression.evaluateUnsafe(FunctionExpression.java:63) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.expressions.Expression.evaluate(Expression.java:41) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.ast.statements.FunctionStatement.evaluate(FunctionStatement.java:32) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.evaluateStatement(PipelineInterpreter.java:385) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.executeRuleActions(PipelineInterpreter.java:369) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.evaluateStage(PipelineInterpreter.java:309) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.processForResolvedPipelines(PipelineInterpreter.java:267) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.process(PipelineInterpreter.java:147) [graylog.jar:?]
at org.graylog.plugins.pipelineprocessor.processors.PipelineInterpreter.process(PipelineInterpreter.java:103) [graylog.jar:?]
at org.graylog2.shared.buffers.processors.ProcessBufferProcessor.handleMessage(ProcessBufferProcessor.java:136) [graylog.jar:?]
at org.graylog2.shared.buffers.processors.ProcessBufferProcessor.dispatchMessage(ProcessBufferProcessor.java:121) [graylog.jar:?]
at org.graylog2.shared.buffers.processors.ProcessBufferProcessor.onEvent(ProcessBufferProcessor.java:93) [graylog.jar:?]
at org.graylog2.shared.buffers.processors.ProcessBufferProcessor.onEvent(ProcessBufferProcessor.java:47) [graylog.jar:?]
at com.lmax.disruptor.WorkProcessor.run(WorkProcessor.java:143) [graylog.jar:?]
at com.codahale.metrics.InstrumentedThreadFactory$InstrumentedRunnable.run(InstrumentedThreadFactory.java:66) [graylog.jar:?]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_262]
In this case "Virtual field 'Barva' not added, because a real field with this name exists already."
is the content of the message field or field value in the JSON object.
It seems that the parser has trouble with the single quotes?
The sample from jalogisch has these issues:
level
is a numeric field. The value "WARN" is invalid and throws an exceptiontimestamp
value is invalid formatOnce I fixed / removed those fields, the message is parsed without issues. The rule is applied successfully and creates the expected fields and values.
I could not reproduce the failure reported by xtruthx.
I tested this in both version 3.3 and 4.2. Incidentally, issues like this are now much easier to debug using the Failures stream introduced in 4.2.
Current Behavior
Having the rule & pipeline running in the simulator does work without any problems, only if you run that processing the message is dropped. Using the reproduce steps will create the following error:
The message is lost in processing after this.
Steps to Reproduce (for bugs)
rule "extractvia jsonpath - with stacktrace" when is_json(parse_json(to_string($message.message))) == true && contains(to_string($message.message), "stacktrace") then set_field("original_message", to_string($message.message)); let json = parse_json(to_string($message.message)); let new_fields = select_jsonpath(json, { time: "$.timestamp", type: "$.type", loglevel: "$.level", component: "$.component", message: "$.message", cluster_name: "$.['cluster.name']", node_name: "$.['node.name']", cluster_uuid: "$.['cluster.uuid']", node_id: "$.['node.id']", stacktrace: "$.stacktrace" } ); set_fields(new_fields); end