本文介绍Nginx模式及通过日志服务控制台配置Nginx模式采集日志的步骤。

简介

Nginx访问日志相关指令主要有两条:log_format和access_log,通常在配置文件/etc/nginx/nginx.conf中配置。log_format用来定义日志格式;access_log用来指定日志文件的存放路径。

  • 日志格式
    log_format默认值如下所示。
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$request_time $request_length '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent"';
    access_log默认值如下所示。
    access_log /var/logs/nginx/access.log main

    日志格式参数说明如下所示。

    字段名称 含义
    remote_addr 客户端IP地址。
    remote_user 客户端用户名。
    request 客户端的请求地址。
    status 请求状态。
    body_bytes_sent 发送给客户端的字节数,不包括响应头的大小。该变量与Apache的mod_log_config模块中的%B参数保持兼容。
    connection TCP连接的序列号。
    connection_requests 当前通过一个TCP连接获得的请求数量。
    msec 日志写入的时间。单位为秒,精度是毫秒。
    pipe 请求是否通过HTTP流水线(pipelined)发送。通过HTTP流水线发送,则pipe值为p,否则为.
    http_referer URL跳转来源,用来记录从哪个页面链接访问过来的。
    http_user_agent 客户端浏览器相关信息,前后必须加上双引号。
    request_length 请求的长度。包括请求行、请求头和请求正文。
    request_time 处理客户端请求的时间,单位为秒,精度为毫秒。从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    time_local 服务器时间,前后必须加上中括号。
  • 日志样例
    192.168.1.2 - - [10/Jul/2015:15:51:09 +0800] "GET /ubuntu.iso HTTP/1.0" 0.000 129 404 168 "-" "Wget/1.11.4 Red Hat modified"

操作步骤

  1. 登录日志服务控制台
  2. 接入数据区域,选择Nginx-文本日志
  3. 选择日志空间页签中,选择目标Project和Logstore,单击下一步
    您也可以单击立即创建,重新创建Project和Logstore,详情请参见步骤1:创建Project和Logstore
  4. 创建机器组页签中,创建机器组。
  5. 机器组配置页签中,应用机器组。
    选择一个机器组,将该机器组从源机器组移动到应用机器组
  6. Logtail配置页签中,创建Logtail配置。
    参数 说明
    配置名称 Logtail配置的名称,设置后不可修改。

    您也单击导入其他配置,导入其他Project中已创建的Logtail配置。

    日志路径 指定日志的目录和文件名。
    日志文件名支持完整文件名和通配符两种模式,文件名规则请参见Wildcard matching。日志文件查找模式为多层目录匹配,即指定目录(包含所有层级的目录)下所有符合条件的文件都会被查找到。例如:
    • /apsara/nuwa/ … /*.log表示/apsara/nuwa目录(包含该目录的递归子目录)中后缀名为.log的文件。
    • /var/logs/app_* … /*.log*表示/var/logs目录下所有符合app_*模式的目录(包含该目录的递归子目录)中包含.log的文件。
    说明
    • 一个文件只能被一个Logtail配置采集。
    • 目录通配符只支持星号(*) 和问号(?) 。
    设置采集黑名单 开启该功能后,可设置黑名单配置。黑名单配置可在采集时忽略指定的目录或文件,目录和文件名支持完整匹配,也支持通配符模式匹配。例如:
    • 选择按目录路径,路径为/tmp/mydir,则在采集时过滤掉该目录下的所有文件。
    • 选择按文件路径,路径为/tmp/mydir/file,则在采集时过滤掉该文件。
    是否为Docker文件 如果是Docker文件,可以直接配置内部路径与容器Tag,Logtail会自动监测容器创建和销毁,并根据Tag进行过滤采集指定容器的日志。关于容器文本日志采集请参见通过DaemonSet-控制台方式采集Kubernetes文件
    模式 默认为NGINX配置模式,可修改为其它模式,其他模式的配置请参见概述
    NGINX日志配置 请填写标准Nginx配置文件日志配置部分,以log_format开头。例如:
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$request_time $request_length '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent"';
    正则表达式 根据NGINX日志配置中的内容自动生成正则表达式。
    日志样例 通过日志样例验证您的NGINX日志配置是否匹配自动生成的正则表达式。请根据实际场景,输入Nginx日志样例,单击校验。如果校验成功,自动将日志样例提取为NGINX键名称参数中NGINX键对应的值。
    NGINX键名称 根据NGINX日志配置自动生成NGINX键名称。
    丢弃解析失败日志
    • 开启丢弃解析失败日志,解析失败的日志不上传到日志服务。
    • 关闭丢弃解析失败日志,日志解析失败时上传原始日志。
    最大监控目录深度 设置日志目录被监控的最大深度。最大深度范围:0~1000,0代表只监控本层目录。
    请根据您的需求选择高级配置。如没有特殊需求,建议保持默认配置。
    参数 详情
    启用插件处理 请选择是否启用Logtail处理。开启该功能后,使用Logtail插件处理日志,具体配置请参见处理数据
    上传原始日志 开启该功能后,原始日志内容作为__raw__字段与解析过的日志一起上传到日志服务。
    Topic生成方式
    • 空-不生成Topic:默认选项,表示设置Topic为空字符串,在查询日志时不需要输入Topic即可查询。
    • 机器组Topic属性:设置为机器组Topic属性,用于明确区分不同服务器产生的日志数据。
    • 文件路径正则:设置为文件路径正则,则需要配置自定义正则,用正则表达式从路径里提取一部分内容作为Topic。用于区分不同用户或实例产生的日志数据。
    日志文件编码
    • utf8:指定使用UTF-8编码。
    • gbk:指定使用GBK编码。
    时区属性 设置采集日志时,日志时间的时区属性。
    • 机器时区:默认为机器所在时区。
    • 自定义时区:手动选择时区。
    超时属性 如果一个日志文件在指定时间内没有任何更新,则认为该文件已超时。
    • 永不超时:持续监控所有日志文件,永不超时。
    • 30分钟超时:如果日志文件在30分钟内没有更新,则认为已超时,并不再监控该文件。

      选择30分钟超时时,还需配置最大超时目录深度,范围为1~3。

    过滤器配置 只采集完全符合过滤器中的条件的日志。 例如:
    • 满足条件即采集:配置Key:level Regex:WARNING|ERROR,表示只采集level为WARNING或ERROR类型的日志。
    • 过滤不符合条件的数据
      • 配置为Key:level Regex:^(?!.*(INFO|DEBUG)).*,表示不收集level为INFO或DEBUG类型的日志。
      • 配置为Key:url Regex:.*^(?!.*(healthcheck)).*,表示不采集URL中带有healthcheck的日志,例如key为url,value为/inner/healthcheck/jiankong.html的日志将不会被采集。

    更多示例请参见regex-exclude-wordregex-exclude-pattern

  7. 查询分析配置页签中,设置索引。
    默认已设置索引,您也可以根据业务需求,重新设置索引,具体请参见开启并配置索引
    说明
    • 全文索引和字段索引属性必须至少启用一种。同时启用时,以字段索引属性为准。
    • 索引类型为long、double时,大小写敏感和分词符属性无效。

完成以上步骤后,日志服务开始采集日志 。