推荐 stub_status 用于基础连接统计,access.log 解析用于接口级深度分析;两者并存可兼顾全局水位与明细瓶颈,telegraf 配置需精准启用插件、严格匹配 grok 模式、正确配置 influxdb 输出。

直接用 Telegraf 抓 Nginx 日志或状态接口,把指标写进 InfluxDB,再由 Grafana 展示——这套链路轻量、稳定、不侵入业务,已在多个中小规模生产环境长期运行。
核心数据来源:选日志解析还是 stub_status?
两种方式各有适用场景,关键看你要什么数据:
-
stub_status 接口(推荐用于基础连接与请求统计):需在 Nginx 配置中启用
location /nginx_status,返回极简的实时指标(Active connections、accepts、handled、requests、Reading/Writing/Waiting)。Telegraf 通过inputs.nginx插件定时拉取,延迟低、开销小,适合监控连接数突增、请求吞吐异常等宏观问题。 -
access.log 解析(推荐用于接口级深度分析):配合自定义
log_format(务必包含$request_time、$upstream_response_time、$status、$request等字段),用 Telegraf 的inputs.tail + grok插件实时解析。能精确到每个 URL 的 P95 响应时间、各状态码分布、慢请求 TopN,但对磁盘 IO 和 Telegraf CPU 有轻微压力。
建议两者并存:stub_status 看全局水位,access.log 看明细瓶颈。
Telegraf 配置要点:避免踩坑的关键项
配置文件 /etc/telegraf/telegraf.conf 中必须明确以下几处:
-
输入插件启用要精准:注释掉所有不用的 input(如 mysql、redis),只保留
[[inputs.nginx]]和[[inputs.tail]];否则 Telegraf 启动慢、内存占用高。 -
logparser 的 grok 模式必须严格匹配 log_format:例如 Nginx 日志含
$upstream_addr和$upstream_status,grok 模式就得写成%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}" %{NUMBER:status} %{NUMBER:body_bytes_sent} "%{DATA:http_referer}" "%{DATA:http_user_agent}" %{DATA:http_x_forwarded_for} %{DATA:host} "%{DATA:upstream_addr}" %{NUMBER:upstream_status} %{NUMBER:request_time:float} %{NUMBER:upstream_response_time:float},字段名和类型(如:float)缺一不可。 -
输出目标锁定 InfluxDB 实例:确保
[[outputs.influxdb]]中的urls、database、username、password全部正确;若 InfluxDB 启用了认证,此处漏配会导致数据静默丢失。
InfluxDB 存储优化:让 Nginx 指标查得快、存得省
默认配置跑几天就可能遇到查询变慢或磁盘涨满,建议初始化时调整:
-
建专用 database + retention policy:例如创建
nginx_metrics库,并设 7 天自动过期策略:CREATE DATABASE "nginx_metrics"; CREATE RETENTION POLICY "rp_7d" ON "nginx_metrics" DURATION 7d REPLICATION 1; -
为高频查询字段加 tag:在 Telegraf 的 tail 输入中,用
tags参数将host、env(如 prod/staging)、upstream_name等固定维度设为 tag,而非 field;这样按 tag 过滤的GROUP BY查询性能可提升数倍。 - 禁用不必要的 shard group duration:对 Nginx 这类写入密集型指标,将 shard group duration 设为 1h(而非默认 7d),减少 compaction 压力。
Grafana 可视化:从模板起步,快速交付价值
不必从零画图,直接导入社区成熟模板:
- 搜索 Grafana Dashboard ID 12426(Nginx Metrics by InfluxDB),它专为 Telegraf + InfluxDB 日志解析设计,含响应时间热力图、状态码趋势、Top 耗时路径等核心视图。
- 搭配 ID 10846(Nginx Stub Status)看连接池健康度,两个 Dashboard 关联同一数据源,可联动下钻排查。
- 关键字段映射检查:导入后确认
measurement是nginx_log或nginx,field如request_time、upstream_response_time类型为 float,tag如status、host已被正确识别。
上线后第一周重点关注采集延迟(Grafana 查 _internal 库中的 gather 时间差)和 InfluxDB 写入成功率,确认链路闭环。











