关键在于结构化采集、低损传输、精准解析、高可用承载四环节闭环:Nginx输出escape=json的JSON日志;Graylog用Beats输入+Sidecar纳管Filebeat并启用json.keys_under_root;索引设生命周期与keyword/numeric字段优化;Nginx反向代理Graylog Web实现负载均衡、IP白名单及基础认证。

要让 Nginx 和 Graylog 协同支撑大规模分布式日志的实时搜索与分析,关键不在“连上就行”,而在于结构化采集、低损传输、精准解析、高可用承载四个环节环环相扣。下面从实际可落地的配置要点切入。
一、Nginx 端:输出结构化 JSON 日志
默认 access_log 是纯文本,Graylog 无法直接提取字段。必须用 log_format 定义 JSON 格式,并启用 escape=json 防止特殊字符破坏结构:
- 在
http块中定义(示例含常用业务字段):
log_format graylog_json escape=json '{ "timestamp": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"request": "$request", ' '"status": $status, ' '"body_bytes_sent": $body_bytes_sent, ' '"request_time": $request_time, ' '"upstream_response_time": "$upstream_response_time", ' '"http_user_agent": "$http_user_agent", ' '"http_x_forwarded_for": "$http_x_forwarded_for", ' '"host": "$host", ' '"uri": "$uri" }';- 在
server或location中启用该格式:
access_log /var/log/nginx/access-graylog.log graylog_json;
注意:不要混用多个 log_format 到同一 access_log 文件,否则 JSON 会错乱;建议为 Graylog 单独建日志文件。
二、Graylog 端:配置 Beats 输入并绑定 Sidecar
Filebeat 是最轻量、最稳定的选择,通过 Graylog Sidecar 统一纳管多台 Nginx 服务器:
- Web 界面进入 System → Inputs,创建类型为 Beats 的输入,端口设为
5044(默认),绑定地址为0.0.0.0; - 进入 System → Sidecars,点击 Create collector configuration,选择
filebeat on Linux; - 在
paths中填写 Nginx JSON 日志路径,如/var/log/nginx/access-graylog.log; - 在
hosts中填入 Graylog 服务器 IP + 上一步的 Beats 端口(如192.168.10.5:5044); - 关键配置项需显式开启 JSON 解析(Sidecar 自动生成的配置里加):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access-graylog.log
json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true这样 Filebeat 会自动将 JSON 字段提升为顶层字段,Graylog 后续可直接按 status、request_time 等字段过滤或聚合。
三、Graylog 内部:建立索引生命周期与字段优化
面对每天 GB 级 Nginx 日志,不设约束会导致 Elasticsearch 崩溃或查询变慢:
- 在 System → Indices 中,为 Nginx 日志创建专用 index set(如
nginx-access),设置 rotation strategy 为Size-based(如 20GB/索引)或Time-based(如 daily); - 启用 Retention strategy,例如保留最近 30 天,避免磁盘耗尽;
- 进入该 index set 的 Fields 页面,将高频查询字段(如
status、remote_addr、uri)设为keyword类型(非text),确保精确匹配和聚合性能; - 对
request_time这类数值字段,确认其映射为float或long,才能做范围筛选(如request_time > 2.0)或统计图表。
四、Nginx 作为反向代理:保障 Graylog Web 高可用与安全
Nginx 不只是转发日志,更是 Graylog Web 访问入口的守门人:
- 配置 upstream 实现 Graylog 节点负载均衡(至少 2 节点):
upstream graylog_web {
least_conn;
server 192.168.10.101:9000;
server 192.168.10.102:9000;
}- 在 server 块中添加基础认证与 IP 白名单:
location / {
proxy_pass http://graylog_web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 仅允许运维网段访问
allow 10.20.30.0/24;
deny all;
# 启用 basic auth
auth_basic "Graylog Admin";
auth_basic_user_file /etc/nginx/htpasswd.graylog;
}这样既防未授权访问,又避免单点故障影响日志检索体验。


















