生产环境中经常需要获取Web访问用户的信息,比如:网站的PV,UV,状态码,用户来自哪个地区,访问时间等
可以通过收集的Nginx的访问日志实现
默认Nginx的每一次访问生成的访问日志是一行文本,ES没办法直接提取有效信息,不利于后续针对特定信息的分析
可以将Nginx访问日志转换为JSON格式解决这一问题
安装 nginx 配置访问日志使用 Json格式
#安装Nginx
[root@ubuntu2004 ~]#apt update && apt -y install nginx
[root@ubuntu2004 ~]#vim /etc/nginx/nginx.conf
.....
log_format access_json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
access_log /var/log/nginx/access_json.log access_json ;
#默认开启nginx的错误日志,但如果是ubuntu,还需要修改下面行才能记录错误日志
[root@ubuntu2004 ~]#vim /etc/nginx/sites-available/default
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404; #将此行注释
[root@ubuntu2004 ~]#systemctl restart nginx
#用浏览器访问几次,包括404等错误访问,查看日志是否记录
10.0.0.106
10.0.0.106/xxx.html
修改 Filebeat 配置文件,收集nginx-access文件,并自定义索引名(把之前定义的注释掉)
[root@ubuntu2004 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch:
hosts:["10.0.0.101:9200"]
index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
重启filebeat
[root@ubuntu2004 ~]# systemctl restart rsyslog.service