开发者社区 问答 正文

如何使用Nginx 日志?


Nginx日志格式和目录通常在配置文件 /etc/nginx/nginx.conf 中。

Nginx日志格式


  • [backcolor=transparent]日志格式
    配置文件中定义了Nginx日志的打印格式,即main格式:
    1. [backcolor=transparent] log_format main  [backcolor=transparent] '$remote_addr - $remote_user [$time_local] "$request" '
    2. [backcolor=transparent]               [backcolor=transparent]'$request_time $request_length '
    3. [backcolor=transparent]               [backcolor=transparent]'$status $body_bytes_sent "$http_referer" '
    4. [backcolor=transparent]               [backcolor=transparent]'"$http_user_agent"'[backcolor=transparent];

    声明使用了main日志格式和写入的文件名。
    1. [backcolor=transparent]access_log [backcolor=transparent]/[backcolor=transparent]var[backcolor=transparent]/[backcolor=transparent]logs[backcolor=transparent]/[backcolor=transparent]nginx[backcolor=transparent]/[backcolor=transparent]access[backcolor=transparent].[backcolor=transparent]log main
  • [backcolor=transparent]字段说明
字段名称含义
remoteaddr表示客户端IP地址。
remote_user表示客户端用户名称。
request表示请求的URL和HTTP协议。
status表示请求状态。
bodybytessent表示发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块modlogconfig里的bytes_sent发送给客户端的总字节数相同。
connection表示连接的序列号。
connection_requests表示当前通过一个连接获得的请求数量。
msec表示日志写入的时间。单位为秒,精度是毫秒。
pipe表示请求是否通过HTTP流水线(pipelined)发送。通过HTTP流水线发送则pipe值为“p”,否则为“.”。
httpreferer表示从哪个页面链接访问过来的。
“http_user_agent”表示客户端浏览器相关信息,前后必须加上双引号。
requestlength表示请求的长度。包括请求行,请求头和请求正文。
request_time表示请求处理时间,单位为秒,精度为毫秒。从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
[$time_local]表示通用日志格式下的本地时间,前后必须加上中括号。
  • [backcolor=transparent]日志样例
  1. [backcolor=transparent]192.168[backcolor=transparent].[backcolor=transparent]1.2[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]10[backcolor=transparent]/[backcolor=transparent]Jul[backcolor=transparent]/[backcolor=transparent]2015[backcolor=transparent]:[backcolor=transparent]15[backcolor=transparent]:[backcolor=transparent]51[backcolor=transparent]:[backcolor=transparent]09[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent]0800[backcolor=transparent]][backcolor=transparent] [backcolor=transparent]"GET /ubuntu.iso HTTP/1.0"[backcolor=transparent] [backcolor=transparent]0.000[backcolor=transparent] [backcolor=transparent]129[backcolor=transparent] [backcolor=transparent]404[backcolor=transparent] [backcolor=transparent]168[backcolor=transparent] [backcolor=transparent]"-"[backcolor=transparent] [backcolor=transparent]"Wget/1.11.4 Red Hat modified"


配置Logtail收集Nginx日志


通过Logtail收集Nginx日志完整流程请参考 快速入门,根据您的网络部署和实际情况选择对应配置。本文档仅展示配置Logtail的第二步[backcolor=transparent]指定收集模式步骤中的详细配置。

  1. 填写配置名称、日志路径,并选择日志收集模式为[backcolor=transparent]完整正则模式。

  2. 输入日志样例并开启[backcolor=transparent]自动提取字段。

  3. 单击 手动输入正则表达式,并调整正则表达式。

    日志服务支持对日志样例划词自动解析,即对您在划词时选取的字段自动生成正则表达式。但鉴于实际的日志数据格式可能会有细微变动,您需要在根据实际情况对自动生成的正则表达式做出调整,使其符合收集过程中所有可能出现的日志格式。

    由于 request_length 和 body_bytes_sent 这两个字段在这里是数字类型,但有些情况下这里不是数字而是“-”,所以匹配结果(\d+)需要替换成(\S+)。如果您还有其它字段存在这种情况,请按照同样的规则完成替换。

    [backcolor=transparent]符合日志格式的正则表达式:[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent]-[backcolor=transparent]\s[backcolor=transparent]-[backcolor=transparent]\s\[[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent][^[backcolor=transparent]\][backcolor=transparent]]+[backcolor=transparent]\]\s[backcolor=transparent]"(\S+)\s(\S+)\s(\S+)"[backcolor=transparent]\s[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent]([backcolor=transparent]\S[backcolor=transparent]+)[backcolor=transparent]\s[backcolor=transparent]"([^"[backcolor=transparent]]+)[backcolor=transparent]"\s"[backcolor=transparent]([^[backcolor=transparent]"]+)"

正则表达式修改完成后,单击 [backcolor=transparent]验证。如果正则式没有错误,会出现提取的结果,如果有错误请再次调整正则式。
为日志内容抽取结果填写对应的Key。
分别为提取结果取一个有意义的字段名称,比如时间字段的命名为time。开启 [backcolor=transparent]使用系统时间,然后单击 [backcolor=transparent]下一步。

Logtail配置完成后,将此配置应用到机器组即可开始规范收集Nginx日志。

展开
收起
轩墨 2017-10-20 16:08:15 2261 分享 版权
0 条回答
写回答
取消 提交回答