既要、又要!NJet支持不落盘的Web服务访问记录分析报表了!
NGINX 向云原生演进,All in OpenNJet
1. 背景需求
访问日志是目前web server,proxy最常用的问题跟踪、统计分析的源头。所以尽管由于IO,产生访问日志对系统的的影响很大(据客户的实际反馈,因打开访问日志,系统性能有50%以上的损耗),但在正式的上线环境中应该尽量打开访问日志。然后,产生的日志作为源头,会被输出到ES等统一的日志平台进行分析处理,或被各式各样的日志分析工具进行分析。比如一款开源的基于c编写的日志分析工具goaccess,就可以既在命令行下使用,也提供HTML格式的报表。
其产生的报表可以有命令行的:
或 html格式的:
以上图片来源于:https://goaccess.io/
当然,NJet针对落盘影响性能这个问题也做了很多优化,比如:
- 动态配置访问日志,仅仅在某个具体的访问url,仅仅在分析故障阶段打开,并在分析定位完成后尽快关闭;
- 动态输出日志到远端,避免磁盘IO的影响。但这个优化是减少了IO,也少输出了记录,影响了用户分析自己的网站的完整性。
在分析了goaccess的代码后,我们觉得,可以把NJet和goaccess结合起来,由NJet直接把访问记录提供给goaccess,复用goaccess经历社区需求验证的分析报表。这样即提供了丰富的分析报表,又避免了IO对性能的影响。
2. 实现简介
2.1 架构设计
goaccess原使用基于堆内存的hash存储报表数据,修改为共享内存存储。NJet 的工作进程在一个HTTP请求完成后,直接产生符合goaccess要求的统计信息计入共享内存中。
同时goaccess作为一个单独的CoPilot嵌入NJet中,并对外提供数据的实时更新。
运维人员通过NJet的统一的控制面端口访问,获得实时的报表。
2.2 相关指令
- name: 共享内存的名字。
- size: 共享内存大小。
例如: access_log_zone abc 1m
;
- days: 统计日志保存的天数。
例如: access_log_zone_valid 3
;
2.3 配置文件变更
2.3.1 数据面
njet.conf中需要 在main节新增加CoPilot配置,及加载so:
helper access_data modules/njt_helper_access_data_module.so conf/goaccess.conf; load_module modules/njt_http_access_log_zone_module.so;
在html节增加zone相关的配置
access_log_zone log_zone 100m; access_log_zone_valid 3;
2.3.2 控制面
在njet_ctr中新增加goaccess报表的访问路径
location /report/ { root html; } location /ws { proxy_pass http://127.0.0.1:7890; }
2.3.3 goaccess.conf
output html/report/report.html real-time-html true
3. 测试
在如下的测试场景中,NJet部署在机器i192.168.40.139,其监听8080,控制面端口8081
load_module modules/njt_http_sendmsg_module.so; load_module modules/njt_ctrl_config_api_module.so; load_module modules/njt_helper_health_check_module.so; load_module modules/njt_http_upstream_api_module.so; load_module modules/njt_http_location_api_module.so; load_module modules/njt_http_dyn_server_api_module.so; load_module modules/njt_doc_module.so; load_module modules/njt_http_vtsd_module.so; load_module modules/njt_http_ssl_api_module.so; #load_module modules/njt_stream_stsd_module.so; #load_module modules/njt_http_lua_module.so; error_log logs/error_ctrl.log debug; events { worker_connections 1024; } http { include mime.types; access_log off; server { listen 8081; location / { return 200 "njet control panel\n"; } location /api { dyn_module_api; } location /doc { doc_api; } location /report/ { root html; } location /ws { proxy_pass http://127.0.0.1:7890; } location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }
conf/goaccess.conf
output html/report/report.html real-time-html true
测试结果:
在访问server(8080)一段时间后,可以通过控制面端口(http://192.168.40.139:8081/report/report.html)查看报表信息
其他说明
- CoPilot,控制面、数据面等概念请参考用户指南中NJet架构说明
- 感谢goaccess提供的丰富访问日志报表
- 由于不再处理日志文件,报表页面展现的某些数据是无效的,如日志分析的字节数等。
- 本功能在3.0.1起支持
- 目前统计数据尚没有持久化,重启会丢失,会在下一个版本中解决
NJet 应用引擎通过内核重构实现了独特的运行时动态配置加载能力,是新一代高性能 Web 应用引擎。NJet 拥有高性能数据面处理能力,将集群、高可用、主动健康检查、声明式 API 等多种辅助功能,通过 NJet 独特的副驾驶 CoPilot 服务框架调度,从而方便功能扩展,隔离管理 / 控制功能对数据面的影响,NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。 邮件组 官网

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Advanced RAG 11:对用户输入的内容进行「分类处理」和「再优化」
编者按: 你是否曾经遇到过这些情况:你向 AI 助手提出了一个比较复杂的问题,但它给出的回答却比较浅显,甚至完全偏离了你的意图🤔?或者,你询问了一个非常简单的问题, AI 助手却给出了一大堆不必要的信息,让你感到烦恼😣? 传统的 RAG 技术虽然能有效减少 AI 回答内容中的错误,但并不能改进用户最初提交的 query 内容,因此可能会出现以下这些问题: 对于用户提交的简单 query ,系统可能会消耗过多的计算资源,浪费用户时间和增加资源消耗。 面对复杂的 query,直接使用原始的 query 进行检索往往无法整理到足够的信息,导致回答不完整或不准确。 对于含义模糊、模棱两可的 query ,仅凭原始的 query 进行信息检索更是远远不够,可能会误解用户的真实意图。 那么,我们如何才能缓解这些问题,提高 AI 系统的理解能力和回答质量呢?本文将介绍两种技术方案:query classification 和 query refinement,并通过代码实例加以阐释,同时还在本文中记录了作者对这些技术方案的理解和思考内容。 作者 | Florian June 编译 | 岳扬 目录...
- 下一篇
HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT改动点
在 "2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)"(https://coding.imooc.com/class/843.html)视频课程中,因为讲师在该课程授课时是使用的HarmonyOS 3.1/4.0应用(API 9),如果部分学员采用了最新的HarmonyOS NEXT API,此时就会遇到API兼容性的问题。 本文整理了从HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT(Developer Preview2)改动点。 获取路由参数 // 从路由参数中获取用户信息 let userInfo: UserInfo = params[`${Constants.PARAM_LOGGED_USER_INFO_KEY}`]; 报错:Indexed access is not supported for fields (arkts-no-props-by-index) <ArkTSCheck> 不应该通过索引来访问对象 错误原因:在 HarmonyOS Next 开发中,如果你不能使用 TypeScript 或 JavaScript 的...
相关文章
文章评论
共有0条评论来说两句吧...