📅  最后修改于: 2020-11-01 04:22:25             🧑  作者: Mango
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/tutorialspoint.com/index.jsp on line 11
此GROK模式序列与日志事件匹配,该日志事件包括时间戳,后跟日志级别,进程ID,事务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/tutorialspoint.com/index.jsp on line 11"
]
}