阅读175 返回首页    go 阿里云 go 技术社区[云栖]


Logtail-收集详解__Getting-Started_日志服务-阿里云

Logtail收集文本文件按照如下步骤收集日志内容:

指定文件路径名称 => 指定日志行分割方式 => 提取日志字段内容 => 指定日志时间

1.1 指定日志行分割方式

一般完整的一条访问日志(比如nginx的访问日志)为一行一条,每条日志以换行符分割。下面即为两条访问日志:

  1. 10.1.1.1 - - [13/Mar/2016:10:00:10 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"
  2. 10.1.1.1 - - [13/Mar/2016:10:00:11 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"

但是对于java应用中的程序日志,一条日志通常会跨越多行,因此只能通过日志开头开头的特征区分每条日志行首,下面即为一条java程序日志:

  1. [2016-03-18T14:16:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions
  2. 0x152436b9a12aecf, 50000
  3. 0x152436b9a12aed2, 50000
  4. 0x152436b9a12aed1, 50000
  5. 0x152436b9a12aed0, 50000

如上java日志可以观察开头都是以固定的时间格式,即“行首正则表达式”为:[d+-d+-w+:d+:d+,d+]s.*。如下:

1.2 提取日志字段内容

根据日志服务数据模型要求,一条日志的内容包含一个或者多个Key-Value对,如果需要提取指定字段进行分析处理,需要设置正则表达式提取指定内容,如果不需要对日志内容进行处理,可以将整条日志做为一对Key-Value对。对于如上访问日志:

  • 提取字段

    1. 正则表达式:(S+)s-s-s[(S+)s[^]]+]s"(w+).*
    2. 提取内容:1)10.1.1.1;2)13/Mar/2016:10:00 ;3)GET
  • 不提取字段

    1. 正则表达式:(.*)
    2. 提取内容:1)10.1.1.1 - - [13/Mar/2016:10:00:10 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"

1.3 指定日志时间

根据日志服务数据模型要求,一条日志必须要有时间(time)字段,并且格式为unix时间戳。目前提供使用系统时间(即Logtail抓取该条日志的时间)或者日志内容中的时间做为日志的时间。对于如上访问日志:

  • 日志内容时间

    1. 时间:13/Mar/2016:10:00:10
    2. 时间表达式:%d/%b/%Y:%H:%M:%S
  • 抓取日志时间

    1. 时间:抓取日志时的时间戳

2. 控制台配置文件日志收集模式

以上一节的访问日志为例,控制台进行Logtail配置可通过“极简模式”和“完整模式”进行设置,具体流程如下:

2.1 指定配置名称

首先需要指定配置的具体名称,并且名称不能进行修改。

配置名称只能包含小写字母,数字,横线(-)和下划线(_),并且必须以小写字母或者数字作为开头和结尾,长度限制在3-63个字节。

2.3 指定配置模式

如果选择数据源为文本文件,首先需要指定文件目录和文件名称。

指定文件夹下所有符合文件名称的文件都会被监控到(包含所有层次的目录),其中文件夹必须填写完整路径,文件名称可以是完整名,也支持通配符模式匹配。例如:/apsara/nuwa/…/app.Log

2.3.1 极简模式

为了降低用户配置文本文件日志内容收集的难度,提供极简配置方式,只需要提供文件指定完成文件目录和文件名称,Logtail即会按照每行为一条日志,并且不会对日志内容中字段进行提取,同时将日志时间设定为抓取该条日志的时间,如下:

设置完成后,应用到指定机器组即可完成Logtail收集的配置,收集到服务端的日志如下:

如上面的索引查询结果页面,每条日志所有内容都在名为“content”的key之下。

目前极简模式即默认选择了“单行模式”,“不提取字段(即正则表达式为(.*))”和“使用系统时间”三个功能,如果后续需要对极简模式进行更详细的设置可以通过修改配置进入“完整模式”逐项调整。

2.3.2 完整模式

如果需要对内容做更多个性化的抓取设置(比如跨行日志,提取字段等),选择“完整模式”即可进行个性化定制。用户可以参考使用Logtail写入日志了解这些参数的具体含义和设置方式。下面将对每项功能进行具体描述:

  • 单行模式

    目前“完整模式”中默认选择了“单行模式”,即按照一行为一条日志进行分割,如果需要收集如上跨行日志(比如java程序日志),需要关闭“单行模式”,然后设置“行首正则表达式”,“行首正则表达式”提供自动生成和手动输入两种功能,填写完成日志样例后,点击“自动生成”即会生成正则,如果无法自动生成,可以切换为手动模式输入进行验证。

    在配置Logtail时需要用户提供日志样例的目的是方便日志服务控制台自动提取其中的正则匹配模式,请务必使用实际场景的日志。

  • 提取字段

    如果需要对日志内容中的字段单独分析处理,可以使用使用“提取字段”功能将指定字段变成Key-Value对后发送到服务端,所以需要用户指定解析一条日志内容的方式(具体来说,就是正则表达式)。日志服务控制台提供两种方式让用户指定解析正则表达式。第一种方式是通过简单交互自动生成正则表达式,如下图:

    用户通过“划选”的方式操作日志样例,告知需要提取的字段。日志服务控制台会自动生成正则表达式。关于“划选”的具体交互方式请参考如下动画:

    尽管第一种方式避免了用户自己写正则表达式的困扰,但是自动生成的正则表达式很多时候并不是最优化的,所以日志服务控制台仍然提供用户手动直接输入正则的途径。用户只需点击上图中的“手动输入正则表达式”链接即可切换到手动输入模式,如下图:

    手动输入完成后,点击图上“验证”按钮即会验证用户输入的正则表达式是否可以解析、提取日志样例。无论使用自动生成还是手动输入方式产生日志解析正则表达式后,日志服务控制台都会要求用户给每个提取字段“命名”(设定对于字段的Key),如下图:

    对于极简模式中的访问日志样例,可以通过“提取字段”功能提取访问ip,访问时间,http方法,访问地址和访问延时等字段,如下:

  • 使用系统时间

    默认设置“使用系统时间”,如果关闭“使用系统时间”功能,Logtail在解析一条日志字符串时就要求用户指定提取字段中的某一个为时间字段,并“命名”为time(如上图)。在选取time字段后,用户可以点击上图中的“自动生成”按钮生成解析该时间字段的方式。关于日志时间格式的更多信息请参考Logtail日期格式

根据如上的“完整模式”生成的配置保存后即会同步至Logtail客户端,收集到服务端的日志内容如下:

如上面的查询页面结果,每条日志都按照设定的Key-Value收集到了服务端。

完成解析日志的配置后,点击“完成配置”按钮即可以完成该Logtail配置的全部创建过程。之后回到应用机器组

最后更新:2016-11-23 17:16:06

  上一篇:go Logstore-操作__Getting-Started_日志服务-阿里云
  下一篇:go Logtail-配置__Getting-Started_日志服务-阿里云