現在、CoreOSクラスタにELK(Elasticsearch、Logstash、Kibana)スタックを使用してロギングを行っています。私はgelfを使って自動的にログをdockerからlogstashに送ることができます。私は、logstashコンテナのIPアドレスのetcd変数を書くためにサイドキックを使用しています。私はdocker runコマンドのフラグにlogstashのIPを渡す必要があるので、変数が設定されるまで待つ必要があります。ユニット/サービスを開始する前に、etcd変数を待つ方法は設定されています
私の質問は、etcdctl get /network/logstash
がIPアドレスを返すまでどのように待つことができますか?
これは私のユニットファイルは、現時点ではどのように見えるかです:変数が進む前に設定されるまでどのようにして待ってください:
[Unit]
Description=nginx with elk logging
After=logstash-discovery.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=/usr/bin/bash -c "/usr/bin/systemctl set-environment ADDR=$(etcdctl get /network/logstash)"
ExecStartPre=-/usr/bin/docker kill nginx1
ExecStartPre=-/usr/bin/docker rm nginx1
ExecStartPre=/usr/bin/docker pull 10.0.2.2:5000/nginx
ExecStart=/usr/bin/docker run -p 80:80 --name=nginx1 --net=host --log-driver=gelf --log-opt gelf-address=udp://${ADDR}:12201 --log-opt gelf-tag="fe" 10.0.2.2:5000/nginx
ExecStop=/usr/bin/docker stop nginx1
[X-Fleet]
Conflicts=logstash.service
私はもっときれいな解決策のためにもオープンしています。 –