欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > OpenNJet动态API设置accessLog开关,颠覆传统运维工作模式

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

2025/3/21 2:07:37 来源:https://blog.csdn.net/2301_79516720/article/details/146380934  浏览:    关键词:OpenNJet动态API设置accessLog开关,颠覆传统运维工作模式

在这里插入图片描述


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文件。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词