• 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_(简体中文)

  • 相关阅读:
    python3 urllib 类
    python 金角大王博客园学习地址
    配置文件一mapper.xml
    配置文件一mybatis-config.xml
    配置文件一applicationContext.xml
    类文件路径一classpath
    配置文件一web.xml
    日志框架一logback配置和使用
    SpringBoot + redis实现分布式session共享
    SpringBoot集成Redis 一 分布式锁 与 缓存
  • 原文地址:https://www.cnblogs.com/hanyifeng/p/5861283.html
Copyright © 2020-2023  润新知