2017-04-11 43 views
0

我想打印'主机源'输出。为了这个目标,局部或全局变量是必要的。但是我不想使用像'export ...'这样的全局变量。 因此,在输入{}之前,我将主机放入元数据中,然后在'input {}'中使用。 象下面这样: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" 
    } 
} 

但logstash未运行,然后登录是象下面这样:

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

那么如何才能解决这个问题?

+0

你能检查你的端口是否已被使用?你可以用'sudo lsof -nPi:10000' –

+0

@ChristianHäckh得到这个信息谢谢你的回复。该端口不使用,因为如果我设置主机=>“127.0.0.1”,那么它是工作。 – leoniz

+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寻找它。

+0

这不足以解决我的问题。我的问题是如何在主机值中使用本地或环境变量。所以你确实建议使用ruby,包括主机在内的值可以在现场使用。但是这个值不能用于像'input {}'这样的其他方面。 – leoniz