rsync同步Nginx日志遇到問題總結


一、目的

將nginx 日志通過普通用戶利用rsync公鑰認證的方式實時同步到本地服務器上,之后使用elk程序進行處理。

二、遇到問題及解決方法思路

問題1.文件權限:nginx 的日志默認權限如下:

[root@elk ~]# ll /var/log/nginx/access.log
-rw-r----- 1 nginx adm 36330 Sep 11 10:26 /var/log/nginx/access.log

我新建的是普通用戶,標准的用戶組,用rsync同步時,報個錯誤,說是沒有該文件的權限

receiving file list ... 
1 file to consider
rsync: send_files failed to open "/var/log/nginx/access.log": Permission denied (13)

問題1解決方法:於是我直接修改了該文件的權限為其它用戶也可讀。修改后的權限如下:

[root@elk ~]# ll /var/log/nginx/access.log
-rw-r--r-- 1 nginx adm 36330 Sep 11 10:26 /var/log/nginx/access.log

上述方法修改后,普通帳號是可以讀取該日志的。rsync同步到本地也沒有問題


 

問題2.第二天查看,發現rsync 同步計划有失敗錯誤的信息。檢查后發現文件權限竟然又變成之前的640了。

查了nginx相關的資料:關於日志切割的任務計划、日志默認權限、以及linux 用戶組的權限,在下一節將主要說明。

問題2解決方法:將之前用於同步的普通用戶加入一個附屬組,即adm 組中。或者重新建立一個權限合適(對系統日志只讀、並附加的adm組)的用戶,如下:

[root@elk ~]# useradd -m -g systemd-journal -G adm logersync

 

三、涉及知識點

1.nginx日志logrotate 程序自動切割:

nginx 的日志文件,每天都會自動分割,/var/log/nginx/*.log,並自動gzip打包存放在和日志同級目錄下。

先看下logrotate程序中nginx 分割的配置文件

[root@elk ~]# cat /etc/logrotate.d/nginx 
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

默認參數解釋:

  • daily:按照每日進行日志切割(weekly、monthly)
  • missingok:日志不存在時忽略錯誤
  • rotate:切割52次后,然后會刪除最早的
  • compress:使用gzip壓縮切割后的日志
  • delaycompress:如果一個日志還正在寫入或被程序使用,分割后將會稍后壓縮。
  • notifempty:不切割空的文件
  • create 640 nginx adm:設置切割后新的日志文件權限是640,屬主是nginx,屬組是adm(這里就是我第的二個問題原因所在)
  • sharedscripts:所有的log文件執行切割完成后,在執行下面的腳本
  • postrotate:下面[]號中的內容,是向nginx主進程發送一個USR1的信號,告訴nginx,日志已經切割,你應該使用新的文件。
  • endsrciprs:腳本結束

nginx 

參考資料:

https://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2

http://drumcoder.co.uk/blog/2012/feb/03/nginx-and-logrotate/

 

2.用戶所在組權限問題

添加用戶時可以指定組,如下:

[root@elk ~]# useradd -g adm testuser1
[root@elk ~]# id testuser1
uid=1002(testuser1) gid=4(adm) groups=4(adm)

上面加了一個testuser1用戶並指定組為adm組。創建用戶時如果不指定組,將會自動創建一個與用戶名同名的組名及gid號

還可以給用戶添加多個組。這樣就擁有其它組下的權限了,如:

[root@elk ~]# gpasswd -a testuser1 users
Adding user testuser1 to group users
[root@elk ~]# id testuser1
uid=1002(testuser1) gid=4(adm) groups=4(adm),100(users)

上面是將testuser1 也附加到users組中。

四、總結

  主要涉及到了nginx服務的日志切割的默認。

 

 

參考文章:

https://wiki.archlinux.org/index.php/Users_and_groups_(簡體中文)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM