nginx日志到redis到logstash

nginx日志到redis到logstash,logstash,syslog,elastic-stack,syslog-ng,Logstash,Syslog,Elastic Stack,Syslog Ng,我想将nginx日志文件(在一台服务器上)发送到redis(在第二台服务器上),以便稍后使用logstash(在第三台服务器上)进行处理,但我有点迷路了 我使用redis作为缓冲区,以防logstash服务器因维护或任何其他原因而停机时不会丢失任何数据查看文档,这里有一个管理消息队列尖峰的示例: Logstash输入和输出插件应该会有所帮助。我使用一个小的Logstash实例来接收事件并将其写入redis,然后使用第二个实例从redis读取,执行所有的神奇处理,然后写入elasticsearc

我想将nginx日志文件(在一台服务器上)发送到redis(在第二台服务器上),以便稍后使用logstash(在第三台服务器上)进行处理,但我有点迷路了


我使用redis作为缓冲区,以防logstash服务器因维护或任何其他原因而停机时不会丢失任何数据

查看文档,这里有一个管理消息队列尖峰的示例:


Logstash输入和输出插件应该会有所帮助。

我使用一个小的Logstash实例来接收事件并将其写入redis,然后使用第二个实例从redis读取,执行所有的神奇处理,然后写入elasticsearch


我只向第一个实例发送通常可能丢失的事件—syslog、snmptrap等(发送方只是盲目地发送事件)。我将filebeat流量直接发送到第二个logstash实例,因为filebeat在关闭时将停止发送。(只要在客户端日志文件轮换过程中logstash没有关闭,您就可以了)。

如果您想实时记录到redis,可以使用适用于nginx的redis模块-

如果您想延迟redis对后台的调用以保持快速响应时间,请使用nginx的undocumented指令post_action-googleit

这是在您不信任logstash并希望使用redis解决它的情况下

我可以建议您可以查看的备选方案:

  • fluentd redis输出插件和任何其他插件,如elastic(类似于logstash)
  • 您可以使nginx日志旋转大约一小时,并将其与从fluentd或logstash的输出插件复制到任何地方的输出进行比较(例如s3),并以某种方式进行区分(基于日志文件中的小时数,使用sort和comm linux commannds或emr或athena)然后,您可以将差异日志发送回任何需要的目标,如logtash、fluentd或elk

  • 我就是这样解决的, 我让nginx登录到syslog服务器,并从syslog ng登录到redis 这是我的配置 在nginx
    http
    指令中

    log_format xxx_log_format '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';
    
    在nginx
    server
    指令中

    access_log syslog:server=127.0.0.1:601 xxx_log_format;
    
    在syslog ng config中

    source s_syslog {
        udp(
            port(601)
        );
    };
    
    destination d_redis {
        redis(
            host("REDIS-IP")
            port(6379)
            command("LPUSH", "access_logs", "${MESSAGE}")
        );
    };
    
    log {
        source(s_syslog);
        destination(d_redis);
    };
    

    您可以添加一些代码/配置吗?