如何利用 log_format 自定义 JSON 格式日志实现与 ELK 的无缝对接

酷芳君_3262

酷芳君_3262

2026-05-18

938人浏览

原创

使用nginx原生log_format输出标准json日志是对接elk最轻量稳定的方式,需满足每行一条合法json、字段值为基本类型、顶层结构扁平化三项硬性要求,并配合escape=json转义与logstash json_lines codec直采。

如何利用 log_format 自定义 json 格式日志实现与 elk 的无缝对接

直接用 Nginx 的 log_format 输出标准 JSON 格式日志,是对接 ELK(Elasticsearch + Logstash + Kibana)最轻量、最稳定的方式——无需额外解析插件,Logstash 可直采,Elasticsearch 能自动识别字段类型,Kibana 查看时各字段天然可筛选、聚合、可视化。

JSON 日志格式必须满足的三个硬性要求

ELK 对“可直入 JSON 日志”有明确约定,否则 Logstash 会丢弃或报错:

  • 每行一条完整、合法的 JSON 对象:不能有多行 JSON,不能有注释,不能有 trailing comma;推荐用 ngx_http_log_module 原生支持的 escape=json 参数自动转义
  • 所有字段值必须为字符串、数字、布尔或 null:Nginx 变量如 $status、$request_time 默认是字符串,但需确保不混入空格、换行等非法字符;建议对关键数值字段显式用 0 或 - 占位,避免字段缺失
  • 顶层结构扁平化,避免嵌套对象:Elasticsearch 不支持动态嵌套 JSON 字段(除非提前定义 mapping),所以不要写 "http": {"method": "$request_method"},应写成 "http_method": "$request_method"

推荐的 log_format JSON 模板(含关键字段与容错处理)

以下模板已在生产环境验证,兼容 Logstash 的 json_lines codec 和 Elasticsearch 8.x 的 dynamic mapping:

log_format json_combined escape=json '{'
  '"@timestamp":"$time_iso8601",'
  '"host":"$server_addr",'
  '"client_ip":"$remote_addr",'
  '"x_forwarded_for":"$http_x_forwarded_for",'
  '"request_method":"$request_method",'
  '"request_uri":"$request_uri",'
  '"status":$status,'
  '"body_bytes_sent":$body_bytes_sent,'
  '"request_time":$request_time,'
  '"upstream_response_time":"$upstream_response_time",'
  '"upstream_status":"$upstream_status",'
  '"http_referrer":"$http_referer",'
  '"http_user_agent":"$http_user_agent",'
  '"ssl_protocol":"$ssl_protocol",'
  '"ssl_cipher":"$ssl_cipher",'
  '"request_id":"$request_id"'
  '}';

说明:

dmap-jsapi-skill
dmap-jsapi-skill

DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。

下载
  • escape=json 是关键,它会自动转义双引号、换行符等,防止 JSON 结构被破坏
  • 数值型字段如 status、body_bytes_sent 去掉引号,Elasticsearch 会自动映射为 long 类型;字符串字段保留引号,映射为 keyword 或 text
  • $upstream_response_time 和 $upstream_status 在非代理场景可能为空,Nginx 会输出 -,Logstash 的 json_lines 可正常处理为字符串;若需统一为 null,需配合 Lua 或 map 指令预处理

Logstash 配置只需两步,无需 filter 解析

既然日志已是标准 JSON 行格式,Logstash 可跳过 grok,大幅提升吞吐:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "end"
    sincedb_path => "/dev/null"
    codec => "json_lines"
  }
}

output {
  elasticsearch {
    hosts => ["http://es:9200"]
    index => "nginx-access-%{+YYYY.MM.dd}"
  }
}

注意点:

  • 必须用 json_lines codec,不是 json;后者只处理单条 JSON,无法流式读取多行日志文件
  • 确保 Nginx 日志轮转后 Logstash 能识别新文件(可通过 file input 的 ignore_older 和 close_older 控制)
  • 首次写入时,Elasticsearch 会基于首条日志自动创建 index template,建议后续手动定义 template 固定字段类型(如将 request_time 设为 float)

Kibana 中快速启用字段分析与告警

日志进入 Elasticsearch 后,在 Kibana → Stack Management → Index Patterns 中创建对应 pattern(如 nginx-access-*),系统会自动加载所有字段。此时可立即:

  • 在 Discover 中用 status: 500 或 request_time > 2.0 实时筛选慢请求或错误
  • 用 http_method、request_uri 做 Terms 分析,识别高频接口或异常路径
  • 基于 @timestamp 和 request_time 创建 SLO 监控看板,如“P95 响应时间趋势”
  • 对 client_ip 做地理分布聚合(需开启 GeoIP 处理,可在 Logstash filter 中添加,不影响日志格式)

不复杂但容易忽略:确保 Nginx 的 $time_iso8601 时区与 Elasticsearch 集群一致(通常设为 UTC),否则 Kibana 时间范围筛选会偏差。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

403

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3507

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6225

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1496

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3958

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

477

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.8万人学习