DockerのApache:「access.log」を実行するにはどうすればよいですか?


17

私はDockerとrichtを使い始めたばかりで、最初のdockerized Apache 2 / PHP環境をセットアップする方法を見つけようとしています。これまで、完全なLinux VMを使用してきました。/var/log/apache2に書き込まれるログファイルを使用し、「logrotate」を使用して毎日新しいファイルにホップしました。

ログファイルは、主に即時エラー検出(つまり、サーバーにログオンし、lessを使用して現在のaccess.logおよびerror.logファイルを開く)およびfail2banに使用されました。

私が正しいなら、それはDocker環境では実用的ではありません-主にあなたは通常ログを見るためにコンテナにログインできないからです。コンテナが削除されると、ログも失われます。

だから:そのような状況でaccess.log / error.logを操作/エミュレート/置換する最も一般的な方法は何ですか?実稼働環境と開発環境の両方に共通するソリューションは何ですか?

これまでの私のアイデアには、NFS共有(低速で注意しないとファイル名の衝突が発生する可能性があります)、およびlogstash(努力する価値があり、小規模なサイトや開発環境でも実用的かどうかわかりませんか?)より良い解決策を考え出しましたか?

違いがあるかどうかはわかりませんが、現在はDockerイメージをphp:5.6-apacheに基づいています。

回答:


13

引き続きdocker exec -it <your container name> /bin/bashコマンドを使用してコンテナに入り、通常のジョブを実行できます。または/bin/bash、コマンドまたはコマンドのスクリプト.shに変更して実行することもできます。

ファイルをコンテナから取り出すには docker cp <container name:/path/to/file> </your local machine/path/>

そして、あなたの毎日の仕事のために、あなたはcronそれらのコマンドをcronjob するために使うことができます。頻繁に使用するdockerコマンドのエイリアスを作成することを強くお勧めします。それで、いくつかのキーを使ってドッカーを楽しく使用できます。

このdocker logs <container name/id>コマンドは、Dockerイメージの実行からのログを表示するためのものです。出力をstdoutにリダイレクトします。


さらに、docker attach <container name>コンテナからstdoutを表示するための良い方法です。ただし、ctrl + dまたはctrl + cを実行すると、進行中のタスクが終了(sigkill)することに注意してください。したがって、エスケープキーを使用して適切にデタッチする必要がありますctrl+p+q。コンテナにシェルをしたいだけなら、exec上記のコマンドを使用することをお勧めします。
フォニールー

6

アクセスとエラーログを標準エラー出力と標準出力に書き込むのはどうですか?

https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E

https://gist.github.com/afolarin/a2ac14231d9079920864

RUN ln -sf / dev / stdout /var/log/nginx/access.log

RUN ln -sf / dev / stderr /var/log/nginx/error.log

ただし、ELKを使用した集中ロギングにより、より積極的な監視が可能になります。しかし、あなたはすでにそれを自分で考えていました。


1

これまでのところ、「ドッカーログ」が数回言及されていることがわかりました。

私は絶対的なDocker初心者なので、これが私の問題の解決策になる可能性があります。

Dockerは、/ var / lib / docker / containers /のすべてのstdout出力をJSONファイルに保持しているようで、logsコマンドを使用してそれらにアクセスする機会を与えてくれます。

これまでのところ、実際に出力を使用する方法がわかりません。


1

質問をしたときにこの機能は存在しなかったかもしれませんが、runの-v引数を使用すると、ホスト上のディレクトリをコンテナ内のディレクトリにマウントできます。

docker run -v [host_dir]:[container_dir]

この方法では、コンテナが削除されたときにログ(またはその他の)ファイルが存続し、コンテナではなくホストにApacheがインストールされているかのようにファイルにアクセスできます。

または、変更したログファイルを何らかの方法で中央の場所にプッシュすることもできます。Kibanaスタックはこれを実現するためにfilebeatを使用しますが、スタックの残りの部分を気にしない場合は、filebeatを個別に実行できるはずです。


1
Dockerには3年前にバインドマウントボリュームがありました。
ウォンブル

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

選択したdockerイメージは、すべての* .logファイルを/ dev / stdoutおよび/ dev / stderrにリンクしているため、それらを読み取ることができませんでした。

ファイルを削除してApacheを再起動した後、Dockerの/ var / log /からログを取得できます。

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

apache構成ファイルに次を追加できます
。CustomLog / dev / stdout
ErrorLog / dev / stderr

ログを表示するには、次のコマンドを使用します
。docker logs container_id

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.