4
5

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 5 years have passed since last update.

[Nginx]logrotateしないでaccess.log-YYYYMMDDを得る

Last updated at Posted at 2015-10-18

追記

  • 調べれば調べるほどlogrotateを使うほかない感じだった。
  • ngx_http_log_merge_loc_conf とかそのあたりをいじればいいのだろうけどそこまでする?

前提1 環境

環境 /etc/redhat-release nginx 補足
Vagrant CentOS Linux release 7.1.1503 (Core) nginx-1.8.0-1.el7.ngx.x86_64 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box

前提2 なんでしたのか

以下事由により、logrotateなしにaccess.log-YYYYMMDDを得たかった。

  • Apache運用時に利用していたrotatelogsと同じ挙動を得たかった
  • logrotateが個人的に嫌いだった
    • Cronに頼りたくない

端的に言うとデフォルトのlogrotate設定ファイルが /etc/logrotate.d/nginx という形で /etc/nginx/から遠いところ(別文脈)で管理される のが気に食わない

参考URL

serverディレクティブに以下if文を追加

nginx.conf
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})") {
  set $year $1;
  set $month $2;
  set $day $3;
  set $hour $4;
  set $min  $5;
}

access_log を以下のように記述

末尾のフォーマット指定は本旨でないのでこの場合無視してよい
なお数分のうちにテストしやすいように YYYY-mm-dd-HHMM としている

nginx.log
access_log  /var/log/nginx/access.log-$year-$month-$day-$hour$min ltsv;

yum版nginxの場合、以下が必要だった

以下コマンドを発行しないとerror.logにエラーがでる1
指定のオーナ:グループの根拠は $ id nginx の出力による

command
sudo chown nginx:nginx /var/log/nginx

nginx restart

command
sudo systemctl restart nginx.service

以下のように生成される

アクセスし続けることで1分ごとに新規ログファイルが作成されることがわかる

command
[root@localhost nginx]# ls -lha /var/log/nginx/
total 24K
drwxr-xr-x  2 nginx nginx  105 Oct 18 14:24 .
drwxr-xr-x. 8 root  root  4.0K Oct 18 11:16 ..
-rw-r--r--  1 root  root     0 Oct 18 14:22 access.log
-rw-r--r--  1 nginx nginx 5.5K Oct 18 14:23 access.log-2015-10-18-1423
-rw-r--r--  1 nginx nginx 5.2K Oct 18 14:24 access.log-2015-10-18-1424
-rw-r--r--  1 root  root  2.2K Oct 18 14:23 error.log

注意点

  • もしもこのまま運用しようという場合には、/etc/logrotate.d/nginx を処理してlogrotate対象外とすること

懸念点

  • error_log に同様の指定をしても error.log-$year-$month-$day-$hour$min というまんまイカしたログファイル名になる
    • error_log もYYYYMMDDしたかったらlogrotateするしかないのかこれ?
  • 必ず access.log は生成される
  • access.logとerror.logというファイル名は固定値なのかしら
  1. 2015/10/18 14:37:29 [crit] 19178#0: *1 open() "/var/log/nginx/access.log-2015-10-18-1437" failed (13: Permission denied) while logging request, client: 192.168.1.11, server: example.com, request: "GET / HTTP/1.1", host: "192.168.1.123"

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?