首页 文章

Grok解析消息中的特殊字符

提问于
浏览
1

在Logstash / grok中,我如何解析丹麦字母表中包含特殊字符的消息,例如æøå?

我正在尝试解析以下消息(IIS日志文件):

2016-06-12 18:15:10 server01 192.168.10.1 GET /test/charæfoobar pagenumber=2 443 - 192.168.100.31 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:47.0)+Gecko/20100101+Firefox/47.0 https://domain.com/test/char%C3%A6foobar domain.com 200 0 0 5493 559 515

有这种模式:

%{TIMESTAMP_ISO8601:logTimestamp} %{NOTSPACE:server} %{IP:serverIp} %{WORD:method} %{URIPATHPARAM:page} %{NOTSPACE:querystring} %{NUMBER:port} %{NOTSPACE:username} %{IP:clientIp} %{NOTSPACE:httpVersion} %{NOTSPACE:useragent} %{NOTSPACE:referer} %{NOTSPACE:siteDomain} %{NUMBER:status} %{NUMBER:substatus} %{NUMBER:win32Status} %{NUMBER:bytesSent:int} %{NUMBER:bytesReceived:int} %{NUMBER:timetaken:int}

我一直在使用这个工具进行调试:http://grokconstructor.appspot.com/它似乎扼杀了消息中的æ字符 .

我正在使用Filebeat日志转发器,其编码设置为UTF-8,IIS也以UTF-8输出日志 . 它直接发送到Logstash .

有任何想法吗?

1 回答

  • 1

    根据RFC 1738统一资源定位器(URL):

    URL仅使用US-ASCII编码字符集的图形可打印字符编写 . 八位字节80-FF十六进制不用于US-ASCII,八位字节00-1F和7F十六进制表示控制字符;这些必须编码 .

    由于字符 æ ,即unicode E6,在80-FF范围内,因此需要将其编码为 %C3%A6 十六进制等效值 . 如果您的URL已正确编码为 /test/char%C3%A6foobar ,就像引荐来源网址中的情况一样,那么grok会正确解析它 .

    UPDATE

    如果要处理这些非ASCII字符,而不是使用 URIPATHPARAM 预定义模式,则可以构建your own pattern,并包含要考虑的非ASCII字符 .

相关问题