2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker環境でNginxのaccess logをファイル保存しようとしてハマった話

Posted at

環境

Docker: 4.20.1
Nginx: 1.23

記事の要約

パフォーマンスチューニングを行うためにalpというツールを用いてaccess logを解析してエンドポイントごとの実行時間を測ろうとしていたが、Nginxの.confのlog出力先を変更しても保存されずに四苦八苦した話。結論としては、Dockerのデフォルト設定でNginxのlogファイルにシンボリックリンクが設定されており、シンボリックリンクを解除したところ正常に保存される様になった。

目次

Nginxのaccess_logの出力先の変更
シンボリックの削除

Nginxのaccess_logの出力先の変更

Nginxの設定はetc/nginx/nginx.confで変更できる。
下記の様に変更することでlogの出力先を変更可能。(一般的な保存先は /var/log/nginx/access.log

etc/nginx/nginx.conf
http{
    access_log <File PATH>;
}
        

保存先を変更して実行し直してみてもファイルに保存されずに標準出力に出てきてしまっている...?
Docker Desktopで該当ファイルを探して ls -l してみたところ、-> /dev/stdoutとなっていることが確認できた。

# ls -l var/log/nginx
total 0
lrwxrwxrwx 1 root root 11 May 23 08:51 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 May 23 08:51 error.log -> /dev/stderr
}
        

この矢印こそがシンボリックリンクが設定されているという表示らしい。シンボリックリンクは他の記事でさまざま説明があるので詳細は割愛するが、ポインタの様なものらしい。
つまり、出力先がリンクされてしまっているせいで、/var/log/nginx/access.log に出力してもsdtoutに横流しされる設定になっているということだ。

シンボリックの削除

シンボリックリンクの編集の記事を参考にした。
どうやら unlink <ファイル名> で削除できるらしいので早速やってみた。(cdコマンドで階層移動していることに注意)

# unlink access.log
# ls -l
total 0
lrwxrwxrwx 1 root root 11 May 23 08:51 error.log -> /dev/stderr

unlinkによってシンボリックリンクの設定が削除されたことが確認できる。
これでDocker image(このあたりの用語にあまり詳しくないのですが、Containerから再構築する必要はないはず)を再起動すればlogが保存される様になっているはず!!

終わりに

今回はDocker環境におけるNginxのlog保存周りについて調査を行った。
Docker難しい...。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?