一、目的

将nginx 日志通过普通用户利用rsync公钥认证的方式实时同步到本地服务器上,之后使用elk程序进行处理。

二、遇到问题及解决方法思路

问题1.文件权限:nginx 的日志默认权限如下:

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

我新建的是普通用户,标准的用户组,用rsync同步时,报个错误,说是没有该文件的权限

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

问题1解决方法:于是我直接修改了该文件的权限为其它用户也可读。修改后的权限如下:

[root@elk ~]# ll /var/log/nginx/access.log
-rw-r--r-- nginx adm Sep : /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=(testuser1) gid=(adm) groups=(adm)

上面加了一个testuser1用户并指定组为adm组。创建用户时如果不指定组,将会自动创建一个与用户名同名的组名及gid号

还可以给用户添加多个组。这样就拥有其它组下的权限了,如:

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

上面是将testuser1 也附加到users组中。

四、总结

  主要涉及到了nginx服务的日志切割的默认。

参考文章:

https://wiki.archlinux.org/index.php/Users_and_groups_(简体中文)

rsync同步Nginx日志遇到问题总结的更多相关文章

  1. 实现Rsync同步Nginx前端配置

    近期,由于我们的阿里前端服务器频频受到恶意的流量攻击,导致前端NGINX进入黑洞而无法正常访问公司网站. 按之前的预计方法,采用加速乐及备用全配置前端的作法,将恶意短时流量攻击的损失时间降到最短.现将 ...

  2. 同步nginx日志到s3 bulket

    1.此处用的是增量同步 #!/bin/bash rm -rf /var/log/nginx/access.log.*.* local_host="`hostname --i`" a ...

  3. Nginx日志导入到Hive0.13.1,同步Hbase0.96.2,设置RowKey为autoincrement(ID自增长)

    ---------------------------------------- 博文作者:迦壹 博客地址:Nginx日志导入到Hive,同步Hbase,设置RowKey为autoincrement( ...

  4. 09、日志轮转+rsync同步

    logrotate   -  rotates,  compresses,  and    mails system logs 日志轮转 rotate 日志切割 轮转   切割   备份   归档 常见 ...

  5. Linux rsync 同步实践

    目录[-] 1. rsync 同步的大致思路 2. rsync的安装 3. rsync的配置 4. rsync的基本操作 服务器端启动 注2. 实时同步 注3. rsync通过linux防火墙 公司网 ...

  6. Rsync同步部署web服务端配置

    Rsync同步部署web服务端配置 1,参数详解: -v, --verbose 详细模式输出. -q, --quiet 精简输出模式. -c, --checksum 打开校验开关,强制对文件传输进行校 ...

  7. 用 JuiceFS 备份 Nginx 日志可以这么简单

    在我们线上的生产环境中要备份的东西很多,各种服务日志.数据库数据.用户上传数据.代码等等.用 JuiceFS 来备份可以节省你大量时间,我们会围绕这个主题写一系列的教程,整理出一套最佳实践,方便大家. ...

  8. 运维工作中常用到的几个rsync同步命令

    作为一个运维工程师,经常可能会面对几十台.几百台甚至上千台服务器,除了批量操作外,环境同步.数据同步也是必不可少的技能.说到“同步”,不得不提的利器就是rsync. 下面结合本人近几年运维工作中对这一 ...

  9. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

随机推荐

  1. Express ejs 3.* layout.ejs

    新版本改成了 <%- include file.ejs %> 具体使用方法如下:1. views文件夹 下新建header.ejs,插入代码 <html><head> ...

  2. (ETW) Event Tracing for Windows 入门 (含pdf下载)

    内容提纲 • ETW 介绍 • ETW 使用 • ETW 监控本机Demo • ETW 监控远程机器的思路 • 底层类库:EventSource 介绍 • 底层类库:TraceEvent 介绍 ETW ...

  3. 线程互斥与析构函数中mutex的销毁

    正在实现一个线程池的pthread包装器,突然发现有人在讨论关于http://blog.csdn.net/Solstice/article/details/5238671 是一篇比较老的文章,考虑了下 ...

  4. 分享自己写的一个小工具RGB转十六进制(高手勿喷)

    由于工作经常美工给的颜色是rgb,而我们网页里面是16进制.网上也有很多类型的工具.不过似乎都用浏览器打开.没网就不爽了 实现也很简单.代码已经共享了 http://git.oschina.net/w ...

  5. JAVA Builder模式构建MAP/LIST的示例

    我们在构建一个MAP时,要不停的调用put,有时候看着觉得很麻烦,刚好,看了下builder模式,觉得这思路不错,于是乎,照着用builder模式写了一个构建MAP的示例,代码如下: import j ...

  6. Ubuntu server解决不能访问外网问题

    Ubuntu server解决不能访问外网问题 在Ubuntu Server上设置访问外网时,需要设置dns,通常是将dns添加到/etc/resolv.conf文件中. 但是将dns添加至/etc/ ...

  7. Android 5.0 Default SMS App以及运营商授权SMS App

    已同步更新至个人blog:http://dxjia.cn/2015/08/android-5-default-sms-app/ 题外话:博友们有没有好用的写博客客户端推荐啊,cnblogs推荐的win ...

  8. 菜鸟类库诞生记二:通过反射转换DataRow为对象

    虽然大数据量的环境下,通过反射转换DataRow为对象性能会很低,但是在数据量适中的时候,这样能够减少很多的代码量,性能也确实不错. 所以在数据量不是很大的情况下,推荐使用. 如果数据量很大,可以使用 ...

  9. Unity 由Verlet数值积分产生的头发运动

    先发下效果图. 参考项目unitychan-crs-master与miloyip大神的博客 爱丽丝的发丝,使用Verlet数值积分,根据旧的现在位置与上一桢位置来计算现在的位置,得到新的方向,上面的运 ...

  10. SQL查询 - 表连接

    一.连接查询简介 连接查询中用来连接连个表的条件称为连接条件或连接谓词.其形式为: [<表1>].<列名1><连接运算符>[<表2>].<列2&g ...