【问题标题】:Sending Logstash Input to Multiple Outputs将 Logstash 输入发送到多个输出
【发布时间】:2018-10-11 13:30:06
【问题描述】:

我有以下 Logstash 配置:

input {
    kafka {
        bootstrap_servers => "svc-kafka:9093"
        topics => ["ELK.LOG_EVENT.PROC", "ELK.API_ANALYTICS.PROC"]
        codec => "json"
        decorate_events => true
    }
}
output {
    if [kafka][topic] == "ELK.LOG_EVENT.PROC" {
        elasticsearch {
            hosts => ["svc-es:9200"]
            index => "elklogevent-%{+YYYY.MM.dd}"
            document_id => "%{id}"
        }
    } else {
        elasticsearch {
            hosts => ["svc-es:9200"]
            index => "elkapianalytics-%{+YYYY.MM.dd}"
            document_id => "%{id}"
        }
    }
}

但我收到以下错误:

[2018-10-11T13:16:30,035][ERROR][logstash.agent           ] Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>"LogStash::ConfigurationError", :message=>"Expected one of #, input, filter, output at line 24, column 1 (byte 514) after ", :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:42:in `compile_imperative'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:50:in `compile_graph'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:12:in `block in compile_sources'", "org/jruby/RubyArray.java:2486:in `map'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:11:in `compile_sources'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:51:in `initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:171:in `initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline_action/create.rb:40:in `execute'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:335:in `block in converge_state'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:141:in `with_pipelines'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:332:in `block in converge_state'", "org/jruby/RubyArray.java:1734:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:319:in `converge_state'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:166:in `block in converge_state_and_update'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:141:in `with_pipelines'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:164:in `converge_state_and_update'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:90:in `execute'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:343:in `block in execute'", "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/stud-0.0.23/lib/stud/task.rb:24:in `block in initialize'"]}

尽管它明确表示它对第 24 行不满意,但我不知道诊断问题所在的最佳方法是什么?总的来说,我对 Ruby 语言和/或 Logstash 不太熟悉。

这个 sn-p 是基于这个 SO 帖子:logstash 5.0.1: setup elasticsearch multiple indexes ouput for multiple kafka input topics

--- 编辑:在stdout { codec => rubydebug } 内包含output {} 块后的示例调试输出---

{
           "message" => "Started Application in 15.296 seconds (JVM running for 16.37)",
          "@version" => "1",
        "loggerFqcn" => "org.apache.commons.logging.LogFactory$Log4jLog",
    "threadPriority" => 5,
         "timestamp" => "2018-10-11T14:39:35.984+0000",
             "level" => "INFO",
          "threadId" => 1,
          "hostname" => "deploy-obfuscated-service-59ffb8957d-rbgs6",
        "endOfBatch" => false,
        "loggerName" => "com.abc.obfuscated.Application",
           "service" => "obfuscated-service",
            "thread" => "main",
        "timeMillis" => 1539268775984,
        "@timestamp" => 2018-10-11T14:39:35.987Z
}

【问题讨论】:

  • 这不是你的全部配置,对吧?你剪掉了一些部分吗?
  • @Val 这就是整个 conf。只是一个输入和一个输出。我错过了什么吗?
  • 没有第 24 行,并且在测试配置时显示“配置正常”。你的 config 目录下还有其他配置文件吗?
  • 你是对的,我在 conf 文件的末尾(第 24 行)添加了stdout { codec => rubydebug },而不是在输出 {} 块中尝试调试。我现在已经更正,错误已经消失,但它仍然不会为这两个主题编制索引。无论数据来自哪个 Topic,它总是落入 else 块中……
  • 你能用你从stdout得到的输出更新你的问题吗?

标签: elasticsearch apache-kafka logstash logstash-configuration


【解决方案1】:

使用decorate_events => true 时,[kafka][topic] 字段实际上已添加到@metadata field,因此您只需将配置更改为:

if [@metadata][kafka][topic] == "ELK.LOG_EVENT.PROC" {

【讨论】:

  • 我用来配置配置的原始帖子没有包含[@metadata] 部分是否有原因?
  • 可能在早期版本的 kafka 插件中,该字段是直接添加到事件的根目录中的。现在我已经修复了我之前的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多