首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nxlog和elasticsearch解析问题

nxlog和elasticsearch解析问题
EN

Stack Overflow用户
提问于 2015-10-20 00:27:47
回答 1查看 802关注 0票数 0

我正在运行一个ELK堆栈,并将我所有的windows日志从nxlog传递给它,并且在IIS日志上有一个特别的问题。在nxlog中,我在nxlog.conf文件中运行这个

<Extension w3c> Module xm_csv Fields $date, $time, $s-ip, $cs-method, $cs-uri-stem, $cs-uri-query, $s-port, $cs-username, $c-ip, $csUser-Agent, $sc-status, $sc-substatus, $sc-win32-status, $time-taken FieldTypes string, string, string, string, string, string, string, string, string, string, string, string, string, string Delimiter ' ' UndefValue - </Extension>

我没有运行任何解析逻辑库,当它们出现在elasticsearch / kibana中时,我得到了这个巨大的消息输出,

{"message":"2015-10-19 22:17:26 10.10.10.10 GET javascriptScript.js - 443 - 10.10.10.10 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729) 200 0 0 31\r","@version":"1","@timestamp":"2015-10-19T22:19:08.061Z","host":"10.10.10.10","type":"WindowsEventLog","tags":["_jsonparsefailure"]}

我希望能够解析这条消息,并获取所有相关数据。似乎应该可以通过nxlog解析iis日志,然后将json信息传递给elasticsearch。但我不确定这是我应该在nxlog端做的事情,还是logstash方面的事情。我所看到的一切都是使用相同的w3c扩展,但是我无法同时使用nxlog和logstash来解析IIS日志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 08:21:46

您可以向logstash配置中添加一个grok筛选器。在grok过滤器中,您基本上可以从nxlog配置中镜像您的字段定义。您基本上可以使用这样的模式:

代码语言:javascript
复制
%{TIMESTAMP_ISO8601:ts}\s%{IP:s_ip}\s%{WORD:cs_method}\s%{DATA:cs_uri_stem}\s%{DATA:cs_uri_query}\s

这将从您的消息中提取字段的第一部分(直到cs_uri_query)。如果您也想提取其他内容,只需扩展模式即可。您可以使用grok调试器(https://grokdebug.herokuapp.com/)来处理各种模式。预定义模式的列表如下:https://github.com/elastic/logstash/tree/v1.4.2/patterns

回答2:@pcport我想我知道你的问题出在哪里了。您使用的是数据模式,这使用的是一个非贪婪的正则表达式--它被定义为:

代码语言:javascript
复制
DATA .*?

您可以告诉reg-exp分析器,您正在尝试匹配,直到行尾(只需在模式的末尾放一个$),或者最好使用数字模式而不是数据模式来使grok模式更加具体。举个例子,试试这个:

代码语言:javascript
复制
%{TIME:time_stamp}\s%{IP:source_ip}\s%{WORD:cs_method}\s%{DATA:cs_uri_stem}\s%{DATA:cs_uri_query}\s%{NUMBER:source_port}\s%{DATA:username}\s%{IP:client_ip}\s%{DATA:client_browser}\s%{NUMBER:request_status}\s%{NUMBER:request_substatus}\s%{NUMBER:win32_status‌​}\s%{NUMBER:timeTaken}

另外一个提示: Logstash默认情况下在elasticsearch中将所有内容存储为字符串。如果您想在基班纳进行计算(例如所有请求的平均时间,.)您需要将字段转换为数字类型(根据:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html,当前支持int和float )。要做到这一点,您可以使用如下模式:

代码语言:javascript
复制
%{NUMBER:timeTaken:int}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33226088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档