0

我找到了一篇关于使用 nginx custom log format for logstash 的好文章。在一个主题评论中有:

注意:最终用户可以设置两个(推荐人,用户代理)和四个(请求方法,remote_user)之间,因此可能导致JSON无效(即,将用户代理设置为“})。

只要 nginx 没有明确的 JSON 支持,我建议不要手动 > 构建 JSON 并坚持使用 logstack 很好支持的组合日志。

我应该如何使用自定义日志格式来防止这个问题?

4

3 回答 3

3

用内容创造 grok

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

并过滤

filter {
    grok {
        patterns_dir => ["Grok_DIR"]
        match => { "message" => "%{NGINXACCESS}" }
    }
}
于 2014-12-01T02:25:18.863 回答
1

在任何版本的 nginx 中手工制作 JSON 都不是万无一失的 - \xXX 不是有效的 JSON 编码,它应该是 \u00XX 如果 nginx 使用 \xXX 转义,任何正确的 JSON 解析器都会拒绝 JSON 字符串。

如果您使用 LogStash 执行此操作,您通常会没事,但会不时出现 json 解析失败。

于 2015-12-16T11:05:43.953 回答
0

我认为在最新版本的 nginx 中很好:

nginx 1.1.6 的变化 2011 年 10 月 17 日

*) Change: now the 0x7F-0x1F characters are escaped as \xXX in an
   access_log.

nginx 0.7.0 的变化 2008 年 5 月 19 日

*) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX
   in an access_log.
   Thanks to Maxim Dounin.
于 2014-07-14T18:15:27.787 回答