我想将nginx
生成的日志推送到influxdb
。 为了解决这个问题,我有一个代理,它可以格式化它,提取一些地理数据,生成地理哈希等。
问题是nginx
和代理在单独的docker
容器中运行,nginx
是一个生产者,它只能写入文件系统,但agent
只能从网络读取(例如一些 tcp 流、websocket 或 http,因为它通常在 webdev 中完成(
我不想在容器之间共享访问.log卷、浪费空间和长时间解析数公里的日志。
如何让nginx将日志直接写入某些tcp套接字?
nginx直接写入日志到某些TCP套接字是不安全的,
因为套接字写入可能会减慢甚至阻止nginx
NGINX 可以配置为记录到系统日志,如果agent
能够读取系统日志
access_log syslog:server=syslog_server_ip:sys_log_server_port,facility=local7,tag=nginx,severity=info;
如果您决定进行自定义转发,这是另一种简单但有缺陷的方法
将nginx写入到命名管道,使用NCAT将其发送出去
mkfifo /var/log/nginx/access.log
ncat agent_ip agent_port 0</var/log/nginx/access.log
这是有问题的,因为当断开连接时
必须手动重新启动 NCAT,主管可以帮助重新启动
,但是当它们被NCAT保留但不通过网络发送时,可能会丢失一些日志行
Flume是进行此类日志转发的更好工具