【问题标题】:logstash:how to use environment variables in input hostlogstash:如何在输入主机中使用环境变量
【发布时间】:2017-04-11 08:21:51
【问题描述】:

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

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没有运行,那么日志如下:

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

那么如何解决这个问题呢??

【问题讨论】:

  • 你能检查你的端口是否已经在使用吗?您可以使用 'sudo lsof -nPi :10000' 获取此信息
  • @ChristianHäckh 感谢您的回复。没有使用该端口,因为如果我设置主机 =>“127.0.0.1”,那么它就可以工作。
  • 过滤器应用于输入之后的事件。环境过滤器可用于访问环境变量并相应地更改事件,而不是设置新的环境变量。如果你想使用环境变量,你应该导出它们。
  • @ChristianHäckh 感谢您的回复。我理解你的评论。我可以在没有环境变量的情况下将 'input{}' 中 udp 的主机值使用到另一端,如 'filter{}' 吗?因为我想在输出端打印 udp 的主机值。但是在“udp{}”中,主机没有使用“add_field”添加到字段中。
  • 您的主机值是动态的还是静态的?如果它是静态的,您可以使用“mutate”过滤器向事件添加一个字段。

标签: elasticsearch logstash elastic-stack logstash-configuration


【解决方案1】:

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

错误信息
您的配置文件格式错误。工作流程总是这样:

# 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 中搜索它。

【讨论】:

  • 这对我的问题来说还不够。我的问题是如何在主机值中使用本地或环境变量。因此,您确实建议使用 ruby​​,包括主机在内的值可以在字段中使用。但是这个值不能像'input{}'这样使用。
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2022-01-11
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多