日志易自动解析Apache,Nginx,JSON等类型的日志,您可以通过分类检索、字段过滤对日志进行统计分析,您会发现我们添加了一个名为”logtype”的字段来标识日志类型。对于不能被自动识别的日志,我们会对其全文索引,但是这将无法让您充分使用日志易的字段搜索功能。在本节中我们将介绍日志易支持的日志类型,以及日志无法自动解析时如何处理。
这里主要向您介绍日志易支持的日志格式,对于常见日志通常有详尽的官方文档说明供您进一步参考。
另外,我们会持续添加更多的可识别日志格式,如果您的日志暂时不能被正确识别并解析,希望您通知我们,并提供一些日志样本。
我们目前支持以下日志格式:
对于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日志的日志格式与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日志格式,需要您注意以下事项:
我们需要准确地识别日志的时间戳,因此在产生日志时,需要配置日志使其满足如下条件:
例如:
{"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字段来建立索引,但是当字段名种包含空格或圆点(.)时,这些特殊字符将被下划线(_) 替换,这是因为我们的搜索语法中不支持字段名称中包含这些符号。
例如:
{ "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系统日志,需要先配置您的上传模板。我们会将其包装成标准的syslog日志,并解析出如下字段:
timestamp,appname, hostname,priority, facility, severity, message
MySQL日志记录了MySQL本身的运行情况,例如
2014-05-14 23:24:47 15752 [Note] Server hostname (bind-address): '*'; port: 3306
我们会为您解析出如下字段
timestamp,loglevel,pid,message等
如果您的日志类型需要支持,请反馈给我们。