指定日志行分割方式

一条完整的访问日志一般为一行一条,例如Nginx的访问日志,每条日志以换行符分割。例如以下两条访问日志:

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)"
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 程序日志:

[2016-03-18T14:16:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions
0x152436b9a12aecf, 50000
0x152436b9a12aed2, 50000
0x152436b9a12aed1, 50000
0x152436b9a12aed0, 50000
以上Java日志起始字段均为时间格式,即行首正则表达式为:[\d+-\d+-\w+:\d+:\d+,\d+]\s.*。在控制台可按照如下格式填写:
图 1. 完整模式解析正则表达式

提取日志字段内容

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

对于上例中的访问日志,您可以选择提取字段或不提取字段。
  • 提取字段

    正则表达式为(\S+)\s-\s-\s\[(\S+)\s[^]]+]\s"(\w+).*,提取内容为:10.1.1.113/Mar/2016:10:00GET

  • 不提取字段

    正则表达式为(.*),提取内容为: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)"

指定日志时间

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

对于上例中的访问日志:
  • 如果提取日志内容中的时间字段,时间为13/Mar/2016:10:00:10,时间表达式为%d/%b/%Y:%H:%M:%S
  • 抓取日志时的系统时间,时间为抓取日志时的时间戳。