阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

rsync同步Nginx日志遇到问题总结

167次阅读
没有评论

共计 2034 个字符,预计需要花费 6 分钟才能阅读完成。

一、目的

将 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. 用户所在组权限问题

rsync 同步 Nginx 日志遇到问题总结

添加用户时可以指定组,如下:

[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 服务的日志切割的默认。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138102.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计2034字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中