nginx日志到redis到logstash
我想将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
我使用redis作为缓冲区,以防logstash服务器因维护或任何其他原因而停机时不会丢失任何数据查看文档,这里有一个管理消息队列尖峰的示例:
Logstash输入和输出插件应该会有所帮助。我使用一个小的Logstash实例来接收事件并将其写入redis,然后使用第二个实例从redis读取,执行所有的神奇处理,然后写入elasticsearch
我只向第一个实例发送通常可能丢失的事件—syslog、snmptrap等(发送方只是盲目地发送事件)。我将filebeat流量直接发送到第二个logstash实例,因为filebeat在关闭时将停止发送。(只要在客户端日志文件轮换过程中logstash没有关闭,您就可以了)。如果您想实时记录到redis,可以使用适用于nginx的redis模块- 如果您想延迟redis对后台的调用以保持快速响应时间,请使用nginx的undocumented指令post_action-googleit 这是在您不信任logstash并希望使用redis解决它的情况下 我可以建议您可以查看的备选方案:
我就是这样解决的, 我让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"';
在nginxserver
指令中
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);
};
您可以添加一些代码/配置吗?