dockerでタイトルの環境を構築しログを出力していて、ホスト単位ではなくサービス単位でtagをまとめようとしてハマったのでメモ。
コンテナを起動するとき環境変数(ココではSERVICE_NAME)を渡してtd-agent.confで指定すれば良いと思い、以下のように記述。
fluent-plugin-config-expanderでホスト名を参照するため${hostname}と書いていたところを環境変数を参照するように書き換えてみた。
<source>
type tail
path /var/log/hoge.log
tag "docker.hoge-#{ENV['SERVICE_NAME']}"
format none
pos_file /var/log/td-agent/hoge.log.pos
</source>
が、環境変数を参照出来ていない(空になっている)。
試しに#{1+1}のような式を書けば2になるので、rubyが動作していないわけではない模様。
printenvで環境変数が設定出来ていることは確認済み、かつsupervisordではなく手動で起動するときちんと参照出来ている。
このため、supervisordで動かす方法に問題があると推測。
恥ずかしながら、この問題に遭遇するまでserviceと/etc/init.d/xxxで動かす場合の違いを知らなかった。
環境変数を参照出来るよう以下のようにDockerfileを書き換えることで、環境変数を参照出来るようになった。
#ENTRYPOINT ["service", "supervisord", "start"]
ENTRYPOINT ["/etc/init.d/supervisord", "start"]