contact@yottabyte.cn
400-085-0159
调查问卷
J

数据接收

自动解析日志格式

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

可识别的日志格式

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

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

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

Apache

对于Apache或者Nginx日志,您可以按需要配置服务器的日志格式,具体的配置规则定义可以参考Apache官方文档

我们支持的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基本相同,具体的配置含义请参考Nginx官方文档,我们支持的配置如下:

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;	 #### <a id="Log4j"></a>Log4j

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

    %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系统日志,需要先配置您的上传模板。我们会将其包装成标准的syslog日志,并解析出如下字段:

	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等

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

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