Logstash配置语法错误求助:output段报Expected one of...错误
错误信息
[2024-05-21T16:03:45,523][ERROR][logstash.agent ] Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:logstash, :exception=>"LogStash::ConfigurationError", :message=>"Expected one of [ \t\r\n], "#", "(" at line 93, column 28 (byte 2170) after output {\r\n if [new_entries] == true ", :backtrace=>["C:/elastic-stack/logstash-8.13.2/logstash-core/lib/logstash/compiler.rb:32:in `compile_imperative'", "org/logstash/execution/AbstractPipelineExt.java:239:in `initialize'", "org/logstash/execution/AbstractPipelineExt.java:173:in `initialize'", "C:/elastic-stack/logstash-8.13.2/logstash-core/lib/logstash/java_pipeline.rb:48:in `initialize'", "org/jruby/RubyClass.java:931:in `new'", "C:/elastic-stack/logstash-8.13.2/logstash-core/lib/logstash/pipeline_action/create.rb:49:in `execute'", "C:/elastic-stack/logstash-8.13.2/logstash-core/lib/logstash/agent.rb:386:in `block in converge_state'"]}
问题分析
错误明确指向第93行if [new_entries] == true之后的语法不符合编译预期,常见诱因包括:
- 布尔值判断的语法格式错误,缺少必要空格或符号
if语句未正确跟随左大括号{- 存在不可见特殊字符(如全角空格、异常换行符)干扰编译逻辑
排查步骤
- 修正
if语句写法:确保==前后有空格,且true后紧跟左大括号,标准格式示例:if [new_entries] == true { # 输出逻辑代码 } - 简化布尔判断:Logstash支持直接用
if [new_entries]判断字段为真,可规避== true的语法风险:if [new_entries] { # 输出逻辑代码 } - 检查特殊字符:将配置粘贴到纯文本编辑器(如VS Code、Notepad++),开启「显示所有字符」功能,排查是否存在不可见的异常字符。
- 核对
output块结构:确保所有if/else语句的大括号完全闭合,无嵌套层级错误。
若排查后仍未解决,可提供完整配置代码进一步定位问题。
内容的提问来源于stack exchange,提问作者Danyal Danish

