ELKとdocker-compose
久しぶりにdocker-composeでELK(Elasticsearch,Logstash,Kibana)を動かしてみようと思った。
(後付け)最初につまづいた時点で、これ残しておくと解決に導く手順も残せそうと思い残してみることにした。
DBのアクセスパスチェックに使えたりしないかとふと思ったが、ELKをちゃんと使ったことがなかったので、まず使ってみよう。
どこかからdocker-compose.ymlを拾ってきて実行
ちょうど良さそうなので使ってみる。
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ git clone https://github.com/deviantony/docker-elk.git Cloning into 'docker-elk'... remote: Counting objects: 581, done. remote: Compressing objects: 100% (11/11), done. remote: Total 581 (delta 0), reused 0 (delta 0), pack-reused 570 Receiving objects: 100% (581/581), 110.68 KiB | 26.00 KiB/s, done. Resolving deltas: 100% (202/202), done. Checking connectivity... done. isoroku@akagi:git clone https://github.com/deviantony/docker-elk.git isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose up -d Unsupported config option for services service: 'elasticsearch' isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$
docker-composeのオプションを確認するとserviceと言うオプションは確かに無い
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ docker-compose Define and run multi-container applications with Docker. Usage: docker-compose [options] [COMMAND] [ARGS...] docker-compose -h|--help Options: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) --verbose Show more output -v, --version Print version and exit Commands: build Build or rebuild services help Get help on a command kill Kill containers logs View output from containers port Print the public port for a port binding ps List containers pull Pulls service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services up Create and start containers migrate-to-labels Recreate containers to add labels
githubのページに行くと確かにこう書いてある Install Docker-compose version >= 1.6.
今入ってるバージョンは
@akagi:/home/vm/virtualmachine/docker/elasticsearch$ docker-compose -v docker-compose version: 1.3.3 CPython version: 2.7.9 OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
しばらく放置してたなあ…(ー▽ー;)
と言うわけで、docker-composeのアップデート
https://github.com/docker/compose/blob/master/CHANGELOG.md へ行って最新版の確認
今日現在 1.12.0 (2017-04-04)
Releases · docker/compose · GitHub へ行ってみると
curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
でインストールできると書いてある
一応、現在のdocker-composeのありかを確認
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ which docker-compose /usr/local/bin/docker-compose
配置場所は問題なさそうなのでそのまま実行する。 その前に、パーミッション確認
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ ls -l /usr/local/bin/ 合計 8096 -rwxr-xr-x 1 root root 8182592 6月 26 2016 docker-compose
sudo で実行だけど面倒なので sudo su -
してrootになってしまう。
後は上のコマンドを実行してしばらく待つ
root@akagi:~# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 600 0 600 0 0 775 0 --:--:-- --:--:-- --:--:-- 774 82 8076k 82 6646k 0 0 9529 0 0:14:27 0:11:54 0:02:33 0 curl: (56) GnuTLS recv error (-54): Error in the pull function.
orz….
今はこっちかな…..○| ̄|_
とりあえずやり直し
2回め失敗
(4/15追記)
docker-compose は
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ docker-compose -v docker-compose version 1.12.0, build b31ff33
バージョンは上がってるっぽいし、動くっぽい… この際だからこの状態で動くか見てみる。
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ docker-compose Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help Options: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) --verbose Show more output -v, --version Print version and exit -H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don't check the daemon's hostname against the name specified in the client certificate (for example if your docker host is an IP address) --project-directory PATH Specify an alternate working directory (default: the path of the compose file) Commands: build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services top Display the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information
旧バージョンではオプションだったversionサブコマンド
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch$ docker-compose version docker-compose version 1.12.0, build b31ff33 docker-py version: 2.2.1 CPython version: 2.7.13 OpenSSL version: OpenSSL 1.0.1t 3 May 2016
ちゃんとバージョンが表示できた。
では、この状態で
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose up -d Creating network "dockerelk_elk" with driver "bridge" Building elasticsearch Step 1/1 : FROM docker.elastic.co/elasticsearch/elasticsearch:5.3.0 ---> ccec59a7dd84 Successfully built ccec59a7dd84 WARNING: Image for service elasticsearch was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Building logstash Step 1/1 : FROM docker.elastic.co/logstash/logstash:5.3.0 ---> b583a99a08a0 Successfully built b583a99a08a0 WARNING: Image for service logstash was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Building kibana Step 1/1 : FROM docker.elastic.co/kibana/kibana:5.3.0 ---> a21e19753b0c Successfully built a21e19753b0c WARNING: Image for service kibana was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Creating dockerelk_elasticsearch_1 Creating dockerelk_kibana_1 Creating dockerelk_logstash_1
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------- dockerelk_elasti /bin/bash bin Exit 78 csearch_1 /es-docker dockerelk_kibana /bin/sh -c Up 0.0.0.0:5601->56 _1 /usr/local/bin/ 01/tcp ... dockerelk_logsta /usr/local/bin Up 0.0.0.0:5000->50 sh_1 /docker-entr ... 00/tcp
elasticsarchが立ち上がってない
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose start elasticsearch Starting elasticsearch ... done isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------- dockerelk_elasti /bin/bash bin Exit 78 csearch_1 /es-docker dockerelk_kibana /bin/sh -c Up 0.0.0.0:5601->56 _1 /usr/local/bin/ 01/tcp ... dockerelk_logsta /usr/local/bin Up 0.0.0.0:5000->50 sh_1 /docker-entr ... 00/tcp
では、docker-compose up
したときの内容を見てみるけどWARNINGは出てるけど、特に問題なさそう。
あ、もしかしてパーミッションが…
確認すると、別ユーザで作成したディレクトリだったのでパーミッションがなかった。
なので、所有者を共通のグループに、パーミッションを775に設定してやりなおし。
まず、一度落としてから今度は、 docker-compose up
だけで実行
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose down Stopping dockerelk_logstash_1 ... done Stopping dockerelk_kibana_1 ... done Removing dockerelk_logstash_1 ... done Removing dockerelk_kibana_1 ... done Removing dockerelk_elasticsearch_1 ... done Removing network dockerelk_elk
isoroku@akagi:/home/vm/virtualmachine/docker/elasticsearch/docker-elk$ docker-compose up Creating network "dockerelk_elk" with driver "bridge" Creating dockerelk_elasticsearch_1 Creating dockerelk_logstash_1 Creating dockerelk_kibana_1 Attaching to dockerelk_elasticsearch_1, dockerelk_logstash_1, dockerelk_kibana_1 elasticsearch_1 | /bin/bash: bin/es-docker: Permission denied dockerelk_elasticsearch_1 exited with code 126 kibana_1 | fs.js:640 kibana_1 | return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); kibana_1 | ^ kibana_1 | kibana_1 | Error: EACCES: permission denied, open '/usr/share/kibana/optimize/.babelcache.json' kibana_1 | at Error (native) kibana_1 | at Object.fs.openSync (fs.js:640:18) kibana_1 | at Object.fs.writeFileSync (fs.js:1333:33) kibana_1 | at save (/usr/share/kibana/node_modules/babel-core/lib/api/register/cache.js:35:19) kibana_1 | at _combinedTickCallback (internal/process/next_tick.js:67:7) kibana_1 | at process._tickCallback (internal/process/next_tick.js:98:9) kibana_1 | at Module.runMain (module.js:606:11) kibana_1 | at run (bootstrap_node.js:394:7) kibana_1 | at startup (bootstrap_node.js:149:9) kibana_1 | at bootstrap_node.js:509:3 dockerelk_kibana_1 exited with code 1 logstash_1 | Sending Logstash's logs to /usr/share/logstash/logs which is now configured via log4j2.properties logstash_1 | [2017-04-15T15:02:18,387][FATAL][logstash.runner ] An unexpected error occurred! {:error=>#<ArgumentError: Path "/usr/share/logstash/data" must be a writable directory. It is not writable.>, :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/settings.rb:420:in `validate'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:202:in `validate_value'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:118:in `validate_all'", "org/jruby/RubyHash.java:1342:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:117:in `validate_all'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:210:in `execute'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:183:in `run'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/share/logstash/lib/bootstrap/environment.rb:71:in `(root)'"]} dockerelk_logstash_1 exited with code 1
もう一度docker-elkのgithubへ行ってみて、SELinuxのところを見ると
chcon -R system_u:object_r:admin_home_t:s0 docker-elk/
を実行しろと..
ただ、For example on Redhat and CentOS
Ubuntuの場合のchconコマンドは
masataka@akagi:/home/vm/virtualmachine/docker/elasticsearch$ chcon --help 使用法: chcon [OPTION]... CONTEXT FILE... または: chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE... または: chcon [OPTION]... --reference=RFILE FILE... 各 FILE の SELinux セキュリティコンテキストを CONTEXT に変更します。 --reference がある場合、各 FILE のセキュリティコンテキストを RFILE のものに 変更します。 Mandatory arguments to long options are mandatory for short options too. --dereference シンボリック自体の代わりに、シンボリックリンクを辿っ た先に適用する (この動作が既定)、 -h, --no-dereference 参照先のファイルの代わりにシンボリックリンクに適用する -u, --user=USER set user USER in the target security context -r, --role=ROLE set role ROLE in the target security context -t, --type=TYPE set type TYPE in the target security context -l, --range=RANGE set range RANGE in the target security context --no-preserve-root '/' を特別扱いしない (既定) --preserve-root '/' に対する再帰的な操作を失敗させる --reference=RFILE CONTEXT 値を指定するのに代わって RFILE の セキュリティコンテキストを使用する -R, --recursive ファイルとディレクトリを再帰的に操作する -v, --verbose 各ファイルを処理した時の診断を出力する 以下のオプションは -R オプションと併せて指定されたときにどのように階層を 横断するかの動作を変更します。2個以上指定されたときは最後のオプションの み有効になります。 -H コマンドライン引数がディレクトリに対するシンボ リックリンクの場合に、リンクを辿る -L ディレクトリに対するシンボリックリンクに遭遇し た時には全て辿る -P シンボリックリンクを辿らない (デフォルト) --help この使い方を表示して終了する --version バージョン情報を表示して終了する GNU coreutils online help: <http://www.gnu.org/software/coreutils/> chcon の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。 Full documentation at: <http://www.gnu.org/software/coreutils/chcon> or available locally via: info '(coreutils) chcon invocation'