当前位置: 首页 > 后端技术 > Node.js

构建请求日志分析系统

时间:2023-04-03 11:42:46 Node.js

请求日志中记录了哪些数据time_local:请求的时间remote_addr:客户端的IP地址request_method:请求方式request_schema:请求协议,常见的http和httpsrequest_host:请求的域名request_path:请求的路径request_query:请求的查询参数request_size:请求的Sizereferer:请求的源地址,假设你在a.com网站下发了一个b.com的链接,那么当用户从a.com点击访问b.com时,referer记录的是a.com,这是浏览器行为user_agent:客户端浏览器相关信息status:请求响应状态request_time:请求耗时bytes_sent:响应大小很多时候,我们会使用负载网关将请求转发给实际的后端服务。此时,请求日志仍然可用。会包含以下数据:upstream_host:proxy转发的hostupstream_addr:proxy转发的IP地址upstream_url:proxy转发给service的urlupstream_status:statusupstream服务返回的proxy_time:proxy转发的耗时数据process客户端IP地址可以从以下数据中得到:asn相关信息:asn_asn:自治系统号,IP地址由自治系统管理,如中国联通上海网管理所有上海联通的IPas_org:自治系统组织,如如中国移动、中国联通geo地址位置信息:geo_location:经纬度geo_country:国家geo_country_code:国家代码geo_region:地区(省)geo_city:城市user_agent可以解析出如下信息:ua_device:设备ua_os:操作系统ua_name:浏览器数据分析PV/QPS:页面浏览量/每秒请求数UV:访问的用户数,很多网站用户可以无序登录。这时可以通过IP+user_agent的唯一性判断用户IP的个数:访问源
网络有多少个IP地址网络流量:根据request_size请求大小统计网络流入流量,根据bytes_sent响应大小统计网络流出流量
referer来源分析
客户请求地理位置分析:从IP地址推导出geo数据
customerDevice分析:根据user_agent提取数据
请求耗时统计:根据request_time数据p99,p95,p90delay(请求前耗时占多少百分比,比如p99是time-消耗前99%的请求)长时间耗时异常监控
响应状态监控:根据状态数据,每个状态码的响应比例为5xx,服务端异常数
结合业务分析:请求的request_path地址和request_query参数必须对应具体的服务,比如请求某个相册的地址是/album/:id,那么日志中的request_path对应的是访问相册和地址sitesearch的是/search?q=,那么统计request_path为/search的日志条数可以知道自己搜索了多少次,通过统计里面的q参数可以知道搜索的关键词请求查询。通用架构日志系统采用ELK+kafka构建了目前业界比较主流的解决方案。Beats和logstash用于收集和传输日志,kafka用于存储日志和等待。消费,elasticsearch做数据聚合分析,grafana和kibana做图形展示。