OpenNJet动态API设置accessLog开关,颠覆传统运维工作模式

devtools/2025/3/21 19:32:29/

在这里插入图片描述


OpenNJet

OpenNJet 应用引擎是高性能、轻量级的WEB应用与代理软件。作为云原生服务网格的数据平面,NJet具备动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。通过CoPliot副驾驶服务框架,在隔离控制面和数据面的情况下实现了高可扩展性。NJet应用引擎助力企业实现云原生技术的平滑升级并大幅降低IT运营成本。

在这里插入图片描述

OpenNJet 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目!

独特优势

高性能:NJet性能是CNCF推荐Envoy的三倍。

功能多:内置HTTP3、故障注入、遥测、配置动态加载、服务发现等功能

强安全:集成Web应用防火墙、原生支持国密/ RSA加密解密算法

可扩展:强大的插件框架能力支持第三方应用开发

可编程:支持LUA、Python可编程控制脚本

易管理:提供完善的API接口,内置多主集群和高可用性能力

快速开始

我们提供了几种快速使用的方法:

  • 二进制安装
  • 发行版安装
  • 源码安装
  • docker镜像启动
镜像构建

如果大家想制作OpenNJet镜像,可使用如下方法:

下载njet_main源码,执行如下命令:

  cd njet_main//导入环境变量export NJET_RIEPOSITORY="tmlake/njet"export NJET_TAG="latest"//构建镜像docker build --build-arg NJet_VERSION=$NJET_TAG --build-arg GIT_COMMIT=$(git rev-parse HEAD) --network host --target ubuntu-njet -f ./build/docker/Dockerfile_njet -t $NJET_RIEPOSITORY:$NJET_TAG ./

通过 Swagger 的进行动态配置:

通过 swagger 的 url,http://njetaddr:8081/doc/swagger/ 进入 swagger 页面,可以看到会提供一个可视化的操作界面,里面包括很多动态的设置选项,这里我们以动态access log配置接口为主来进行操作。

在这里插入图片描述

1. 查看当前允许的动态模块:

使用一个GET请求,来进行查询本机支持哪些动态模块的修改,可以看到查出了4种。

curl -X 'GET' \'http://121.41.236.243:8081/api/v1/config/' \-H 'accept: application/json'

在这里插入图片描述


2. 查看当前服务http_log日志动态设置参数:

通过一个Get请求可以查看当前服务http_log日志动态设置参数,可以看到本机是有一条location为根目录的/,但是没有做任何的设置,这里我们可以来进行设置。

curl -X 'GET' \'http://121.41.236.243:8081/api/v1/config/http_log' \-H 'accept: application/json'

在这里插入图片描述

为了对比效果,我们再添加2个访问路径来演示操作情况:

在这里插入图片描述

以下是配置文件中增加2条访问路由,分别为njetTest1和njetTest2。

在这里插入图片描述

完整的conf配置文件:

worker_processes auto;cluster_name njet;
node_name node1;error_log logs/error.log error;helper ctrl /usr/local/njet/modules/njt_helper_ctrl_module.so /usr/local/njet/conf/njet_ctrl.conf;
helper broker /usr/local/njet/modules/njt_helper_broker_module.so;load_module /usr/local/njet/modules/njt_http_split_clients_2_module.so;  
load_module /usr/local/njet/modules/njt_agent_dynlog_module.so;  
load_module /usr/local/njet/modules/njt_http_dyn_bwlist_module.so; 
load_module /usr/local/njet/modules/njt_dyn_ssl_module.so;
load_module /usr/local/njet/modules/njt_http_vtsc_module.so;
load_module /usr/local/njet/modules/njt_http_location_module.so;
#load_module /usr/local/njet/modules/njt_http_lua_module.so;
#load_module /usr/local/njet/modules/njt_http_modsecurity_module.so;
#load_module /usr/local/njet/modules/njt_http_dyn_modsecurity_module.so;events {worker_connections  1024;
}http {include mime.types;access_log off;vhost_traffic_status_zone;#lua_package_path "$prefix/lualib/lib/?.lua;/usr/local/njet/modules/?.lua;$prefix/apps/?.lua;;";#lua_package_cpath "$prefix/lualib/clib/?.so;;";server {#modsecurity on;       #modsecurity_rules_file /usr/local/njet/conf/modsec/main.conf;listen       8080;location / {root html;}location /njetTest1 {return 200 Test1ok\r\n;}location /njetTest2 {return 200 Test2ok\r\n;}}
}

3. 动态请求设置http_log日志信息:

我们通过一个PUT请求来将2条路径分别设置一个是写入日志,另一个暂时先不写入日志。

在这里插入图片描述

curl -X 'PUT' \'http://121.41.236.243:8081/api/v1/config/http_log' \-H 'accept: */*' \-H 'Content-Type: application/json' \-d '{"servers": [{"listens": ["0.0.0.0:8080"],"serverNames": [""],"locations": [{"location": "/njetTest1","accessLogOn": true,"accessLogs": [{"path": "./logs/njetTest10319.log","formatName": "test"}]},{"location": "/njetTest2","accessLogOn": false,"accessLogs": [{"path": "./logs/njetTest20319.log","formatName": "test"}]}]}],"accessLogFormats": [{"name": "test","format": "$remote_addr - $remote_user [$time_local] \\\"$request\\\" $status $body_bytes_sent \\\"$http_referer\\\" \\\"$http_user_agent\\\"","escape": "default"}]
}'

查看当前目录是没有任何日志信息的:

在这里插入图片描述
通过设置后,我们可以看到本地有一个空文件,通过请求Test1与Test2来查到,因为Test2没有开启日志,所以这里只有Test1写入日志成功了。

在这里插入图片描述

接着我们再次请求接口,将Test2的接口日志同时也开启来。

在这里插入图片描述

curl -X 'PUT' \'http://121.41.236.243:8081/api/v1/config/http_log' \-H 'accept: */*' \-H 'Content-Type: application/json' \-d '{"servers": [{"listens": ["0.0.0.0:8080"],"serverNames": [""],"locations": [{"location": "/njetTest1","accessLogOn": true,"accessLogs": [{"path": "./logs/njetTest10319.log","formatName": "test"}]},{"location": "/njetTest2","accessLogOn": true,"accessLogs": [{"path": "./logs/njetTest20319.log","formatName": "test"}]}]}],"accessLogFormats": [{"name": "test","format": "$remote_addr - $remote_user [$time_local] \\\"$request\\\" $status $body_bytes_sent \\\"$http_referer\\\" \\\"$http_user_agent\\\"","escape": "default"}]
}'

可以看到Test2也同时有记录了日志,感觉通过API接口来进行动态的管理,非常的方便,不用再重复的去操作Conf文件。

在这里插入图片描述


http://www.ppmy.cn/devtools/168550.html

相关文章

瑞萨RA系列使用JLink RTT Viewer输出调试信息

引言 还在用UART调试程序么?试试JLINK的RTT Viewer吧!不需占用UART端口、低资源暂用、实时性高延时微秒级,这么好的工具还有什么理由不用了! 目录 一、JLink RTT Viewer 简介 二、软件安装 三、工程应用 3.1 SEGGER_RTT驱动包 3.2 手搓宏定义APP_PRINT 3.3 使用APP_…

清晰易懂的 Kotlin 安装与配置教程

初学者也能看懂的 Kotlin 安装与配置教程 Kotlin 是一种现代、简洁且功能强大的编程语言,广泛应用于 Android 开发和后端服务。本教程将手把手教你如何安装 Kotlin,配置依赖包缓存位置,并指出新手容易踩坑的细节。即使你是零基础小白&#x…

windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC

大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…

C语言基础(函数)

函数的概述 函数:实现一定功能的,独立的代码模块。对于函数的使用,一定是先定义,后使用。 使用函数的优势: ① 我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数,减少代码 量。 …

《模型思维》第二十章 “空间竞争模型与享受竞争模型” 总结

《模型思维》第二十章 “空间竞争模型与享受竞争模型” 的核心内容总结,结合斯科特佩奇的核心观点与逻辑框架: 1. 两类模型的本质与核心思想 (1)空间竞争模型(Spatial Competition) 定义:基于地…

算法每日一练 (14)

💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (14)斐波那契数题目描述解题思路解题代码…

AI大模型:(一)1.大模型的发展与局限

说起AI大模型不得不说下机器学习的发展史,机器学习包括传统机器学习、深度学习,而大模型(Large Models)属于机器学习中的深度学习(Deep Learning)领域,具体来说,它们通常基于神经网络…

解决MySQL 5.6升5.7之后,非空有默认值的字段,报cannot be null Column ‘xxx‘的问题

背景 项目需要升级MySQL版本,打算5.6升5.7,升级后发现原本正常的部分SQL,不能正常工作。 字段定义为 created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP在之前的使用中,有的同事代码不规范,向此字段插入时…