elasticsearch logstash:如何在输入主机中使用环境变量,elasticsearch,logstash,elastic-stack,logstash-configuration,elasticsearch,Logstash,Elastic Stack,Logstash Configuration" /> elasticsearch logstash:如何在输入主机中使用环境变量,elasticsearch,logstash,elastic-stack,logstash-configuration,elasticsearch,Logstash,Elastic Stack,Logstash Configuration" />

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

elasticsearch logstash:如何在输入主机中使用环境变量,elasticsearch,logstash,elastic-stack,logstash-configuration,elasticsearch,Logstash,Elastic Stack,Logstash Configuration,我想将“主机源”打印到输出。为了实现这一目标,需要局部或全局变量。但是我不想使用像“export…”这样的全局变量。 因此,在输入{}之前,我将主机放入元数据中,然后在“输入{}”中使用。 如下图所示: filter{ environment{ add_field =>{ "[@metadata][TEMP]" => "127.0.0.1" } } } input{ udp{ host => "%{[@metadat

我想将“主机源”打印到输出。为了实现这一目标,需要局部或全局变量。但是我不想使用像“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"
    }
}
[WARN ][logstash.inputs.udp      ] UDP listener died {:exception=>#<SocketError: bind: name or service not known>known>
但logstash未运行,则日志如下所示:

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"
    }
}
[WARN ][logstash.inputs.udp      ] UDP listener died {:exception=>#<SocketError: bind: name or service not known>known>
[WARN][logstash.inputs.udp]udp侦听器已死亡{:异常=>#已知>

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

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

错误消息
您的配置文件格式不正确。工作流始终如下所示:

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

您可以检查您的端口是否已在使用吗?您可以通过“sudo lsof-nPi:10000”@ChristianHäckh获得此信息。感谢您的回复。该端口未被使用,因为如果我设置host=>“127.0.0.1”,然后就可以工作了。过滤器在输入后应用于事件。环境过滤器可用于访问环境变量并相应地更改事件,而不是设置新的环境变量。如果要使用环境变量,则应将其导出。@ChristianHäckh感谢您的回复。我理解您的评论。我可以使用h吗“input{}”中udp的ost值与没有环境变量的“filter{}”类似吗?因为我想在输出端打印udp的主机值。但是在“udp{}”中,主机不是使用“add_field”添加到字段中的。您的主机值是动态的还是静态的?如果是静态的,您可以使用“mutate”将一个字段添加到事件中筛选器。这还不够回答我的问题。我的问题是如何在主机值中使用本地或环境变量。因此,您确实建议使用ruby,可以在字段中使用包含主机的值。但此值不能像“input{}”那样用于其他方面。