背景:
我公司业务情况,基本上都是一个IP有很多用户登陆。现在使用ELK分析日志,为了分辨具体的用户开启access_log里面的cookie,希望通过cookie来分析具体用户。
模块配置
<IfModule usertrack_module>
CookieExpires "1 weeks"
CookieStyle RFC2965
CookieName zuowenqi
CookieTracking on
</IfModule>
定义
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{COOKIE}n\"" combined
日志如下:
192.168.1.105 - - [19/Dec/2017:15:26:00 +0800] "GET /index.php HTTP/1.1" 200 51315 "http://192.168.1.180:8080/?
redirect_url=http%3A%2F%2F192.168.1.180%2Findex.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.
36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "aacd79a1.560ac60f35579"
定义:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{COOKIE}i\"" combined
日志如下:
192.168.1.105 - - [19/Dec/2017:15:11:00 +0800]
"GET /index.php HTTP/1.1" 200 51315
"http://192.168.1.180:8080/?redirect_url=http%3A%2F%2F192.168.1.180%2Findex.php"
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
"c8621872d2fd5bdf61f9aee06e80231e543b7d6a"
"%E4%B8%8A%E6%B5%B7%E6%96%B0%E5%AE%9E%E6%95%B0%E7%A0%81%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8"
问题:
如果设置\"%{COOKIE}n\",打印出来的cookie简短,但是同一个用户好像几次访问打印的值都不同,无法分辨用户。
\"%设置{COOKIE}i\",日志很详细能明显分辨出用户,但是输出内容太多,需要预处理才能用ELK分析,这样导致无法做到实时分析。
所以请问:
1. \"%{COOKIE}n\"和\"%{COOKIE}i\"里面‘n’和‘i’具体什么意思。n打印出来的短格式如何分辨用户?
2. 如果只能用\"%{COOKIE}i\"来打印cookie,呢么如何用ELK直接处理?
已经解决。
我也遇到类似的问题,我通过nginx输出json格式日志,然后可以解决了,你看看可以我的配置
1 log_format json '{"@timestamp":"$time_iso8601",' 2 '"host":"$server_addr",' 3 '"clientip":"$remote_addr",' 4 '"size":$body_bytes_sent,' 5 '"responsetime":$request_time,' 6 '"upstreamtime":"$upstream_response_time",' 7 '"upstreamhost":"$upstream_addr",' 8 '"http_host":"$host",' 9 '"url":"$uri",' 10 '"referer":"$http_referer",' 11 '"agent":"$http_user_agent",' 12 '"token":"$http_token",' 13 '"status":"$status"}'; 14 access_log /var/log/nginx/access_json.log json;
http_token