gaurav1424
(Gaurav Dalvi)
February 17, 2016, 3:43pm
1
here is example:
My input file :
filter {
environment {
add_metadata_from_env => {"region" => "REGION_ENV"}
add_field => ["my_env", "%{[@metadata ][region]}"]
}
}
bash-3.2$ echo $REGION_ENV
amer
bash-3.2$
My output :
{
"message" => "Hello world\r",
"@version " => "1",
"@timestamp " => "2016-02-17T00:04:13.540Z",
"host" => "0:0:0:0:0:0:0:1",
"port" => 61248,
"my_env" => "%{[@metadata ][region]}"
}
Anything I am missing here ?
Thanks,
Gaurav
gaurav1424
(Gaurav Dalvi)
February 17, 2016, 3:44pm
2
I tried this as well as mentioned on other thread.
Logstash Input :
filter {
environment {
add_metadata_from_env => {"region" => "REGION_ENV"}
add_field => ["my_env", "%{[@metadata ][region]}"]
}
}
output {
stdout
{ codec => rubydebug {
metadata => true
}
}
}
Logstash Output:
{
"message" => "hello world\r",
"@version " => "1",
"@timestamp " => "2016-02-17T00:42:35.846Z",
"host" => "0:0:0:0:0:0:0:1",
"port" => 61853,
"my_env" => "%{[@metadata ][region]}",
"@metadata " => {
"region" => nil
}
}
Works for me. Are you setting the REGION_ENV variable in the same shell from which you're invoking Logstash?
$ cat test.config
input { stdin { } }
output { stdout { codec => rubydebug { metadata => true } } }
filter {
environment {
add_metadata_from_env => {"region" => "REGION_ENV"}
add_field => ["my_env", "%{[@metadata][region]}"]
}
}
$ echo 'hello' | REGION_ENV=foo /opt/logstash/bin/logstash -f test.config
Settings: Default pipeline workers: 8
Logstash startup completed
{
"message" => "hello",
"@version" => "1",
"@timestamp" => "2016-02-17T16:01:09.963Z",
"host" => "lnxolofon",
"my_env" => "foo",
"@metadata" => {
"region" => "foo"
}
}
Logstash shutdown completed
gaurav1424
(Gaurav Dalvi)
February 17, 2016, 7:18pm
4
Thanks a lot @magnusbaek . Appreciate your quick help. I finally got it working. I was starting logstash as sudo but setting environment variable in normal shell.
anyways, How do I remove metadata fields in the parsing key value pairs ?
I get something like this :
"region" => "amer",
"metro" => "sj",
"ibx" => "sv3",
"@metadata " => {
"region" => "amer",
"metro" => "sj",
"ibx" => "sv3"
I dont want this to be part of my output :
"@metadata " => {
"region" => "amer",
"metro" => "sj",
"ibx" => "sv3"
I did this but its not working :
filter {
environment {
add_metadata_from_env => {"region" => "REGION_ENV"}
add_metadata_from_env => {"metro" => "METRO_ENV"}
add_metadata_from_env => {"ibx" => "IBX_ENV"}
add_field => ["region", "%{[@metadata ][region]}"]
add_field => ["metro", "%{[@metadata ][metro]}"]
add_field => ["ibx", "%{[@metadata ][ibx]}"]
remove_field => ["@metadata "]
}
}
The contents of the @metadata
field aren't included by outputs. One exception is if you use the rubydebug codec and explicitly enable inclusion of those fields as I did in my example above.
1 Like