logstash:如何在输入主机中使用环境变量

时间:2017-04-11 08:21:52

标签: elasticsearch logstash elastic-stack logstash-configuration

我想打印'主机来源'来输出。为此目标,必须使用局部或全局变量。但我不想使用像'export ...'这样的全局变量。 所以在输入{}之前,我将主机放在元数据中,然后在'input {}'中使用。 如下所示:

filter{
  environment{
    add_field =>{
      "[@metadata][TEMP]" => "127.0.0.1"
       }
    }
  }
input{
  udp{
    host => "%{[@metadata][TEMP]}"
    port => "10000"
    }
  }
output{
  udp{
    host => "127.0.0.1"
    port => "10001"
    }
}

但是logstash没有运行,那么log就像下面这样:

[WARN ][logstash.inputs.udp      ] UDP listener died {:exception=>#<SocketError: bind: name or service not known>known>

那怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

让我分两步尝试回答你的问题。

错误消息
您的配置文件格式错误。工作流程始终如下:

# This is a comment. You should use comments to describe
# parts of your configuration.
input {
  ...
}

filter {
  ...
}

output {
  ...
}

这就是您收到错误消息的原因,您的过滤器位于错误的位置,并且在输入之前未应用。

多个输入源
如果要根据使用的输入向事件添加信息,可以在输入处理期间添加类型。这是一个示例配置文件:

input {
  file {
    type => "file"
    path => "/var/log/some_name.log"
  }
  udp{
    type => "udp"
    host => "127.0.0.1"
    port => "10001"
  }
} 

filter {
  # can be omitted, if not used
}

output {
  udp{
    host => "127.0.0.1"
    port => "10001"
  }
}

该类型存储为事件本身的一部分,因此您也可以使用该类型在Kibana中搜索它。