采集 Nginx 访问日志

最近更新时间: 2026-03-13 09:03:00

操作场景

Nginx 作为常见的反向代理服务,在实际业务中承载着大量的服务请求。服务在运行过程中会产生大量访问日志,通常使用户面临着集群中日志分散,数据量庞大等问题,因此如何有效地收集管理这些日志数据对业务的运维及运营都有着非常重要的意义。本文以 Nginx 访问日志为例,介绍如何使用日志服务接入 Nginx 日志。

Nginx 日志格式

Nginx 访问日志(access.log)的格式可以通过 log_format 命令来定义,例如下列格式:

log_format main '$remote_addr - $remote_user [$time_local] ' 
 '"$request" $status $body_bytes_sent ' 
 '"$http_referer" "$http_user_agent"';

各字段含义如下:

字段名 含义
remote_addr 客户端 IP 地址
remote_user 客户端名称
time_local 服务器本地时间
request HTTP 请求方法及 url 地址
status HTTP 请求状态码
body_bytes_sent 发送给客户端的字节数
http_referer 访问来源的页面链接地址
http_user_agent 客户端浏览器信息

操作步骤

步骤1:创建日志主题

  1. 登录日志服务控制台。
  2. 在左侧导航栏中,单击日志主题,进入日志主题管理页面。
  3. 选择日志主题的地域,单击创建日志主题
  4. 在弹出的创建日志主题窗口中,填写相关信息,单击确定

步骤2:机器组管理

  1. 日志主题创建成功后,进入该日志主题管理页面。
  2. 选择采集配置页签,在 LogListener 采集配置中单击新增,并在服务器及应用栏中选择Nginx日志
  3. 在“机器组管理”步骤,勾选需要与当前日志主题进行绑定的机器组,单击下一步

步骤3:增加采集配置

配置日志文件采集路径

在“采集配置”页面,根据日志采集路径格式,填写“采集路径”。
日志采集路径格式:[目录前缀表达式]/**/[文件名表达式]
例如,采集本地路径为/usr/local/webserver/nginx/logs/access.log的日志文件。

配置采集路径黑名单

开启采集路径黑名单,可在采集时忽略指定的目录前缀或完整的文件路径。目录路径和文件路径可以是完全匹配,也支持通配符模式匹配。

采集黑名单分为两类过滤类型,且可以同时使用:

  • 文件路径:采集路径下,需要忽略采集的完整文件路径,支持通配*,支持**路径模糊匹配。
  • 目录路径:采集路径下,需要忽略采集的目录前缀,支持通配*,支持**路径模糊匹配。

    注意:

    • 需要 LogListener 2.3.9及以上版本。
    • 采集黑名单是在采集路径下进行排除,因此无论是文件路径模式,还是目录路径模式,其指定路径要求为采集路径的子集。

配置采集策略

  • 全量采集:Loglistener 采集文件时,从文件的开头开始读。
  • 增量采集:Loglistener 采集文件时,只采集文件内新增的内容。

编码模式

  • UTF-8:若您的日志文件编码模式为 UTF-8,请选择该选项。
  • GBK:若您的日志文件编码模式为 GBK,请选择该选项。

配置提取模式

提取模式选择Nginx日志模板,填写 Nginx 配置文件(通常为 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf)中的日志模板,通常以 log_format 开头,例如:

log_format main '$remote_addr - $remote_user [$time_local] ' 
 '"$request" $status $body_bytes_sent ' 
 '"$http_referer" "$http_user_agent"';  

CLS 将根据上面的 Nginx 日志模板自动生成日志提取正则表达式,例如:

(\S+)\s*-\s*(\S+)\s*\[(\d+\S+\d+:\d+:\d+:\d+)\s+\S+\]\s*\"(\S+)\s+(\S+)\s+\S+\"\s*(\S+)\s*(\S+)\s*\"([^"]*)\"\s*\"([^"]*)\".*

在样例日志中填写一条实际的 Nginx 日志,用来验证上述提取模式配置是否正确,例如:

59.x.x.x - - [06/Aug/2019:12:12:19 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://119.x.x.x/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" "-"

提取模式验证成功后,可为每个字段设定名称或直接使用默认值:

配置采集时间

  • 日志时间单位为:毫秒。
  • 日志的时间属性有如下方式:
    • 日志采集时间:默认作为日志的时间属性。日志的时间属性由日志服务 CLS 采集该条日志的时间决定。
    • 指定日志字段:填写原始时间戳的时间键以及对应的时间解析格式。日志的时间属性由原始日志中时间戳决定。
      时间格式解析规则填写的示例如下:
      • 示例1:
        日志样例原始时间戳:10/Dec/2017:08:00:00.000,解析格式为:%d/%b/%Y:%H:%M:%S.%f
      • 示例2:
        日志样例原始时间戳:2017-12-10 08:00:00.000,解析格式为:%Y-%m-%d %H:%M:%S.%f
      • 示例3:
        日志样例原始时间戳:12/10/2017, 08:00:00.000,解析格式为:%m/%d/%Y, %H:%M:%S.%f

注意

日志时间支持以毫秒为单位,若时间格式填写错误日志时间将以采集时间为准。

配置过滤器条件

样例日志使用Nginx 日志模板模式解析后,您希望 status 字段为400或500的所有日志数据被采集,那么 key 处配置 status,过滤规则选择等于,value 处配置400|500。

配置上传解析失败日志

建议开启上传解析失败日志。开启后,Loglistener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。

开启后需要配置解析失败的 Key 值(默认为 LogParseFailure),所有解析失败的日志,均以输入内容作为键名称(Key),原始日志内容作为值(Value)进行上传。

高级配置

通过勾选,选择您需要定义的高级配置。
Nginx 日志模板提取模式下,支持配置以下高级配置:

名称 描述 配置项
超时属性 该配置控制日志文件的超时时间。如果一个日志文件在指定时间内没有任何更新,则为超时。超时的日志文件LogListener将不再采集。当您的日志文件数量较大时,建议降低超时时间,避免LogListener性能浪费 - 不超时:日志文件永不超时
- 自定义:自定义日志文件的超时时间
最大目录深度 采集路径中的/**/代表查找所有子目录中的文件。但是,在查找过程中,如果不想搜索太深的目录,可以使用"最大目录深度"配置项来限制搜索深度 大于0的整数。 0代表不进行子目录的下钻

步骤4:索引配置

  1. 单击下一步,进入索引配置页面。
  2. 索引配置页面,设置如下信息。
    • 索引状态:确认是否开启。

      注意

      检索必须开启索引配置,否则无法检索。

    • 全文索引:确认是否需要设置大小写敏感。

    • 全文分词符:默认为@&?|#()='",;:<>[]{}/ \n\t\r\\,确认是否需要开启。

    • 键值索引:默认开启,您可按需进行字段类型、分词符以及是否开启统计分析的配置。若您需要关闭键值索引,可将设置为

  3. 单击提交,完成采集配置。

步骤5:检索分析 Nginx 日志

  1. 在左侧导航栏中,单击检索分析,进入检索分析页面。
  2. 单击顶部的“日志集”和“日志主题”的下拉框,选择待检索的日志主题,即可查询到 Nginx 访问日志内容。