[BETA!] log-zmq: NGINX 的 ZeroMQ 日志模块
安装
您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:
- RedHat Enterprise Linux 7、8、9 和 10
- CentOS 7、8、9
- AlmaLinux 8、9
- Rocky Linux 8、9
- Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-log-zmq
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-log-zmq
通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:
load_module modules/ngx_http_log_zmq_module.so;
本文档描述了 nginx-module-log-zmq v0,于 2021 年 11 月 28 日发布。
生产稳定性不保证。
NGINX 的 ZeroMQ 日志模块。
ZeroMQ,\zero-em-queue\,是一种消息交换协议。它是一种使用任何语言或平台通过 inproc、IPC、TCP、TPIC 或多播进行通信的简单方式。它是异步的,只需要一个小型库。
描述
这是一个与 ZeroMQ 库集成的 NGINX 日志模块。
nginx-log-zmq 提供了一种非常高效的方式来记录一个或多个 PUB/SUB 订阅者的数据,通过一个或多个不同的端点。这对于数据收集和处理非常有用。
消息格式可以与传统日志格式相同,这为通过网络 tail 数据或探索其他文本格式(如 JSON)提供了有趣的方式。与传统日志一样,可以使用在每个请求中更新的 NGINX 变量。
所有消息都是异步发送的,不会阻塞 NGINX 服务器的正常行为。正如预期的那样,连接对网络故障具有弹性。
概述
http {
# 发送简单消息到 IPC 端点,使用 4 个线程和 1000 个队列元素
log_zmq_server main "/tmp/main.ipc" ipc 4 1000;
log_zmq_endpoint main "/topic/";
log_zmq_format main '{"remote_addr":"$remote_addr"}'
# 发送消息到监听在 127.0.0.1:5556 的订阅者
log_zmq_server secondary 127.0.0.1:5556 tcp 4 1000;
# 设置次要端点
log_zmq_endpoint secondary "/endpoint/";
# 使用多行设置格式
log_zmq_format secondary '{"request_uri":"$request_uri",'
'{"status":"$status"}';
server {
location /status {
# 对于此位置静音来自 log_zmq 的所有消息
log_zmq_off all;
}
location /endpoint {
# 对于此位置静音来自 log_zmq 的主要消息
log_zmq_off main;
}
}
}
指令
log_zmq_server
语法: log_zmq_server <definition_name> <address> <ipc|tcp> <threads> <queue size>
默认值: no
上下文: http
配置要连接的服务器(PUB/SUB 订阅者)。
以下选项是必需的:
definition_name <name> - NGINX 用于标识此日志实例的名称。
address <path>|<ipaddress>:<port> - 订阅者的地址。如果您使用 IPC 协议,则应指定 unix 套接字的 <path>。如果您使用 TCP 协议,则应指定您的 ZeroMQ 订阅者正在监听的 <ipaddress> 和 <port>。
protocol <ipc|tcp> - 用于通信的协议。
threads <integer> - 要使用的 I/O 线程数。
queue_size <integer> - 等待发送的消息的最大队列大小。
log_zmq_endpoint
语法: log_zmq_endpoint <definition_name> "<topic>"
默认值: no
上下文: http
配置 ZeroMQ 消息的主题。
definition_name <name> - NGINX 用于标识此日志实例的名称。
topic <topic> - 消息的主题。这是一个字符串(可以是 NGINX 变量),在每条发送的消息前加上。举例来说,如果您将消息 "hello" 发送到 "/talk:" 主题,则消息将变为 "/talk:hello"。
示例:
http {
log_zmq_server main "/tmp/example.ipc" 4 1000;
# 根据响应状态发送消息到主题
log_zmq_endpoint main "/remote/$status";
}
log_zmq_format
语法: log_zmq_format <definition_name> "<format>"
默认值: no
上下文: http
配置 ZeroMQ 消息格式。
definition_name <name> - NGINX 用于标识此日志实例的名称。
format <format> - 消息的格式。这定义了发送到 PUB/SUB 订阅者的实际消息。它遵循与标准 log_format 指令相同的规则。可以在这里使用 NGINX 变量,并且也可以将其分成多行。
http {
log_zmq_format main '{"line1": value,'
'{"line2": value}';
}
log_zmq_off
语法: log_zmq_off <definition_name>|all
默认值: no
上下文: location
在当前上下文中关闭 ZeroMQ 日志。
definition_name <name> - 要静音的日志实例的名称。如果使用特殊的 all 名称,则所有日志实例都将被静音。
GitHub
您可以在 nginx-module-log-zmq 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。