1.业务场景及主要需求如图:收集AWS云服务器(web服务器)的nginx访问日志,并进行日志分析.由于AWS云web服务器(webserver)磁盘空间有限,nginx日志已经通过logrotate轮转,只保留最后5天,但也想长期保留日志(不是仅出于安全需求),所以我想使用同步或备份在内网服务器上对nginxweb日志进行增量备份。2.具体实现的思路由于AWS云服务器在内网可以SSH访问(出口公网IP已经在AWS云服务器安全组上加入SSH端口白名单)。在内网部署GrayLog服务器,将Graylog日志服务器的Syslog接收端口2514通过出口防火墙映射到公网。AWS云服务器通过rsyslog服务收集本地的nginx日志,发送到上一步映射到公网的SyslogUDP端口,即发送GrayLog。利用GrayLog服务器的磁盘空间,通过rsync+SSH+crontab实现文件的增量同步备份。三、具体实现步骤1、AWS云服务器配置rsyslog说明:本文使用的115.58.180.214公网IP为虚构IP。vi/etc/rsyslog.d/toGraylog.confmodule(load="imfile"PollingInterval="1")#FILE1的输入#wildcard在文件级允许onlyinput(type="imfile"tag="Nginxlog"ruleset="filelog"Facility="local0"Severity="info"PersistStateInterval="1"reopenOnTruncate="on"freshStartTail="on"file="/var/log/nginx/access.log")#为文件定义模板eventstemplate(name="GraylogFormatFilelog"type="string"string="%msg%\n")#用你的GrayLogIP地址和端口替换Target和Port值。ruleset(name="filelog"){action(type=“omfwd”protocol="udp"target="115.58.180.214"port="2514"template="GraylogFormatFilelog"queue.type="LinkedList"queue.filename="fileq1"queue.saveonshutdown="on"action.resumeRetryCount="-1")stop}重启rsyslog服务:systemctlrestartrsyslog2,验证是否在GrayLog上收到日志。效果如下:可以对提取出的访问IP进行GEOIP查询。3、实现日志增量备份首先测试免密登录是否可以在AWS服务器上生成密钥对。ssh-keygen-trsa-b4096catid_rsa.pub>>/root/.ssh/authorized_keys在GrayLog服务器上验证私钥是否可以免密登录AWS服务器。ssh-i/home/id_rsaroot@115.58.180.214接下来使用rsync+SSH+crontab实现备份。vi/opt/aws_logs_backup.sh#!/bin/bashLOCK=/var/log/aws_logs_rsync_record.logecho"备份日期:">>${LOCK}2>&1echo`date'+%Y-%m-%d_%T'`>>${LOCK}2>&1echo"===================AWSlogsRsyncstarting=================================">>${LOCK}2>&1rsync--progress-avz-e"ssh-p22-i/home/id_rsa"root@115.58.180.214:/var/log/nginx/access.log*/opt/AWS_logs_backup/>>${LOCK}2>&1echo"==================AWS日志rsyncFinished================================">>${LOCK}2>&1授予脚本执行权限。chmod755/opt/aws_logs_backup.shcrontab-e[root@graylog~]#crontab-l000,6,12,18,23***/opt/aws_logs_backup.shsh/opt/aws_logs_backup.sh尝试手动同步是否可以可以。后面观察增量同步备份是否OK。rsync可以参考之前的文章:部署CwRsyncServer将Linux下的文件同步到WindowsServer。
