Accessing environment variable in config file in a custom made beats

I have built a custom made beats based on libbeat and I want to use environment variable as a value in the config file. However, if I type ${VAR} in the config file and I run config test, I got:
./countbeat -c countbeat.yml --configtest
Exiting: error unpacking config data: missing field accessing 'name' (source:'countbeat.yml')

I tried in line of configuring the name of the shipper:
name: "${HOSTNAME}"

And it works if I change it into a static string:
name: "a_name"

I have tried to use the filebeat (v1.2.3) and the syntax works. Have I made any mistake in building the beats? Thank you.

Thank you.

is the environment variable really set?

With beats 5.0, variable expansion will check if environment variable is available and fail if no default is set. In beats 1.x a missing environment variable will just be ignored.

this might work for you:

name: '${HOSTNAME:localhost}'

if HOSTNAME is not set it will expand into "localhost".

In 5.0 you can try to print a custom error if HOSTNAME is missing via:

name: ${HOSTNAME:?Please set HOSTNAME environment variable}

in beats 5.0 one can also overwrite any setting from command line via -E flag. For example:

./countbeat -c countbeat.yml --configtest -E name=otherhost

Thank you. You are right, $HOSTNAME is set in the shell only but not exported, so it is not available to countbeat.

This topic was automatically closed after 21 days. New replies are no longer allowed.