Logstash - 解析日志

Logstash使用输入插件接收日志,然后使用过滤器插件来解析和转换数据.根据输出目的地中存在的系统执行日志的解析和转换. Logstash会解析日志记录数据并仅转发所需的字段.之后,这些字段将转换为目标系统的兼容且易于理解的形式.

如何解析日志?

解析日志执行我的使用 GROK (图形表示知识)模式,你可以在Github : 中找到它们;

https://github.com/elastic/logstash/tree/v1.4.2/patterns .

Logstash匹配具有指定GROK模式或模式序列的日志数据,用于解析日志,例如"%{COMBINEDAPACHELOG}",这通常用于apache日志.

解析后的数据更结构化并且易于搜索和执行查询. Logstash在输入日志中搜索指定的GROK模式,并从日志中提取匹配的行.您可以使用GROK调试器来测试GROK模式.

GROK模式的语法是%{SYNTAX:SEMANTIC}. Logstash GROK过滤器使用以下形式编写 :

%{PATTERN:FieldName}

此处,PATTERN表示GROK模式和fieldname是字段的名称,它表示输出中的已解析数据.

例如,使用在线GROK调试器 https://grokdebug.herokuapp.com/

输入

日志中的示例错误行 :

[Wed Dec 07 21:54:54.048805 2016] [:error] [pid 1234:tid 3456829102]
   [client 192.168.1.1:25007] JSP Notice:  Undefined index: abc in
   /home/manu/tpworks/IT屋.com/index.jsp on line 11

GROK模式序列

此GROK模式序列与日志事件匹配,后者包含时间戳,后跟日志级别,进程标识,交易ID和错误消息.

\[(%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\]
   \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\]
   %{GREEDYDATA:errormsg}

输出

输出为JSON格式.

{
   "day": [
      "Wed"
   ],
   "month": [
      "Dec"
   ],
   "loglevel": [
      "error"
   ],
   "pid": [
      "1234"
   ],
   "tid": [
      "3456829102"
   ],
   "clientip": [
      "192.168.1.1"
   ],
   "errormsg": [
      "JSP Notice:  Undefined index: abc in
      /home/manu/tpworks/IT屋.com/index.jsp on line 11"
   ]
}