自动解析日志格式 -凯发k8国际|首页

j

数据接收

自动解析日志格式

日志易自动解析apache,nginx,json等类型的日志,您可以通过分类检索、字段过滤对日志进行统计分析,您会发现我们添加了一个名为”logtype”的字段来标识日志类型。对于不能被自动识别的日志,我们会对其全文索引,但是这将无法让您充分使用日志易的字段搜索功能。在本节中我们将介绍日志易支持的日志类型,以及日志无法自动解析时如何处理。

可识别的日志格式

这里主要向您介绍日志易支持的日志格式,对于常见日志通常有详尽的官方文档说明供您进一步参考。

另外,我们会持续添加更多的可识别日志格式,如果您的日志暂时不能被正确识别并解析,希望您通知我们,并提供一些日志样本。

我们目前支持以下日志格式:

apache

对于apache或者nginx日志,您可以按需要配置服务器的日志格式,具体的配置规则定义可以参考。

我们支持的apache日志格式如下:

	%h %l %u %t \"%r\" %>s %b
	%h %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\"
	%h %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\" \"%{x-forwarded-for}i\"

其中各项配置的含义如下:

	%b or %b - size
	%h remoteiporhost
	%l - remotelogname
	%r - request
	%>s - httpstatuscode
	%t - eventtime
	%{referer}i - referer
	%{user-agent}i - useragent
	%{x-forwarded-for}i - xforwardedfor

另外,我们还可以自动识别apache的error日志,通常情况下其日志格式如下:

    [fri jul 05 21:28:24 2013] [error] child process 1245 still did not exit, sending a sigkill

我们会为您解析出如下字段:

  timestamp, loglevel, message 等

nginx

nginx日志的日志格式与apache基本相同,具体的配置含义请参考,我们支持的配置如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent';
log_format  combind  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent"';		
                     
log_format  default  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;	 #### log4j

log4j是java程序常用的日志库,具体的配置含义请参考,目前我们支持的日志格式的配置有:

    %d{iso8601} %p %t %c.%m - %m%n

我们会解析出timestamp, log level, thread, class, method, message等字段。对于java的stack traceback等跨多行的日志,目前我们暂不支持。

json

我们也支持json这种格式化的数据,这里要求您的日志整体是json格式,如果json数据仅是您日志的一部分,我们暂不支持。

请首先使用json格式来检测您的日志是否有效。

使用json日志格式,需要您注意以下事项:

时间戳

我们需要准确地识别日志的时间戳,因此在产生日志时,需要配置日志使其满足如下条件:

例如:

    {"timestamp": "2014-09-11t01:13:24.012 0800","family": {"father": "li lei","mother": "han meimei"}}
格式

json的字段类型不能改变。例如,在一条日志中的一个字段为整数类型,在下一条日志中不能被赋予新的类型。下面给出的例子中对象为“company”:

    { "company": {"boss": "mr.chen","employer": "mr.li" }}

重新输入一条“company”的日志,则这个字段不会被索引:

    {"company": 100}
json 字段名称

通常情况下,我们按照您发送的json字段来建立索引,但是当字段名种包含空格或圆点(.)时,这些特殊字符将被下划线(_) 替换,这是因为我们的搜索语法中不支持字段名称中包含这些符号。

例如:

    {  "a": 1, "b c": 2,"d.e": 3,"d": {"e" : 4}}

将被重写为:

    {  "a": 1, "b_c": 2, "d_e": 3,"d": {"e" : 4}}	    

这样可以明确区分json.d.e和json.d_e。

比如我们可以这样来搜索

	json.d_e:3

linux

如果您需要分析一些linux系统日志,需要先配置您的上传模板。我们会将其包装成标准的,并解析出如下字段:

	timestamp,appname, hostname,priority, facility, severity, message

mysql

mysql日志记录了mysql本身的运行情况,例如

	2014-05-14 23:24:47 15752 [note] server hostname (bind-address): '*'; port: 3306

我们会为您解析出如下字段

	timestamp,loglevel,pid,message等

如果现有日志格式不支持?

如果您的日志类型需要支持,请给我们。