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

news2025/3/20 6:32:57

在这里插入图片描述


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.coloradmin.cn/o/2318208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例5_4: 6位数码管轮播0-9【静态显示】

文章目录 文章介绍效果图提示代码&#xff08;不完整&#xff09; 文章介绍 5.1.2 数码管静态显示应用举例 要求&#xff1a; 1、仿真图同案例5_3 2、代码参考案例5_3和案例5_2 效果图 提示代码&#xff08;不完整&#xff09; #include<reg52.h> // 头文件#define uch…

navicat忘记已经连接过的数据库密码的操作步骤

第一步&#xff1a; 点击文件-》导出连接 第二步&#xff1a;选中具体的数据库&#xff0c;且勾选左下角的记住密码 第三步&#xff1a;打开刚刚导出的文件&#xff0c;找到对应加密后的密码 第四步&#xff1a;复制密码到工具点击查看密码 注&#xff1a;参考文章链接附…

Qt窗口坐标体系

坐标系&#xff1a;以左上角为原点&#xff08;0&#xff0c;0&#xff09;&#xff0c;X向右增加&#xff0c;Y向下增加 对于嵌套窗口&#xff0c;其坐标是相对于父窗口来说的 例如&#xff1a; 通过move方法实现

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

VR大空间多人互动方案,VR大空间融合AI行为预测的动捕技术

在数字科技迅猛发展的今天&#xff0c;VR大空间技术正逐步成为各行业探索沉浸式体验的重要方向。从企业培训、线上展览到社交元宇宙&#xff0c;VR大空间的应用范围不断拓展。而在这个过程中&#xff0c;多人实时交互成为核心需求&#xff0c;它不仅关乎沉浸感的提升&#xff0…

十四、OSG学习笔记-事件响应

上一章节 十三、OSG学习笔记-osgDB文件读写-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146165712 本章节代码&#xff1a; OsgStudy/EventHandle CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/master/Osg…

JS逆向_腾讯点选_VMP补环境

1.接口分析 1.cap_union_prehandle 说明:图片、jsvmp GET QueryString:{aid: xxxxxx //网站在腾讯登记的idprotocol: httpsaccver: 1showtype: popupua: //ua atob后的结果noheader: 1fb: 1aged: 0enableAged: 0enableDarkMode: 0grayscale: 1clientype: 2cap_cd: uid: lang:…

【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…

DAPO-Decoupled Clip and Dynamic sAmpling Policy Optimization

论文地址&#xff1a;https://dapo-sia.github.io/static/pdf/dapo_paper.pdf 代码地址&#xff1a;https://github.com/volcengine/verl/tree/gm-tyx/puffin/main/recipe/dapo 数据&#xff1a;https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k 1. 背景与动机…

数组模拟邻接表 #图论

文章目录 为什么要用数组来模拟邻接表存储思路遍历思路 树是特殊的图&#xff0c;因此邻接表可以存储图和树两种数据结构。 为什么要用数组来模拟邻接表 在算法设计当中&#xff0c;利用数组来代替结构体模拟各种数据结构会更加简单。 存储思路 给定如下数据,我们可以构造如…

VBA常见的知识都有哪些,让AI编写的VBA经常 报错,所以VBA的基础还是要学习的

掌握这些能够大大的提高VBA的编写效率&#xff0c;欢迎来到涛涛聊AI。 1. 异常处理 Cleanup:是VBScript的错误处理标签&#xff0c;用于标记程序执行失败或退出时需要执行的清理操作&#xff08;如关闭文件、释放对象&#xff09;。这段代码会在遇到错误或用户取消操作时跳转…

DeepSeek(8):结合Kimi-PPT助手一键生成演示报告

1 生成内容 在Deepseek中生成内容&#xff1a; 帮我创建年度计划&#xff0c;描述《智能枕头》产品的如何在全国销售&#xff0c;计划切分到每个月。从而让我们的老板和团队对报告充满信息。输出的内容我需要放到ppt中进行展示。 使用Deepseek R1模型&#xff0c;如下&#x…

【MySQL】MySQL如何存储元数据?

目录 1.数据字典的作用 2. MySQL 8.0 之前的数据字典 3. MySQL 8.0 及之后的数据字典 4.MySQL 8 中的事务数据字典的特征 5.数据字典的序列化 6. .sdi文件的作用&#xff1a; 7..sdi的存储方式 在 MySQL 中&#xff0c;元数据&#xff08;Metadata&#xff09; 是描述数…

用ASCII字符转化图片

代码 from PIL import Image# 定义 ASCII 字符集&#xff0c;从最暗到最亮 ASCII_CHARS "%#*-:. "def resize_image(image, new_width100):width, height image.sizeratio height / widthnew_height int(new_width * ratio)resized_image image.resize((new_wi…

蓝桥与力扣刷题(蓝桥 组队)

题目&#xff1a;作为篮球队教练&#xff0c;你需要从以下名单中选出 1 号位至 5 号位各一名球员&#xff0c;组成球队的首发阵容。 每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少&#xff1f; 本题为填空题&…

AI Agent系列(六) -基于ReAct架构搭建LLM Agent(Deepseek)

AI Agent系列【六】 一、 ReAct1.1 ReAct 的处理过程&#xff1a;1.1 代码结构 二、 Python代码实现2.1 通过Zero-shot 实现python代码实例Python代码示例1&#xff1a;python代码实现示例2 一、 ReAct ReAct 是 Reseaning 和 Action 两个词的前缀合成&#xff0c;代表着先推…

AnyTouch:跨多个视觉触觉传感器学习统一的静态动态表征

25年3月来自人大、武汉科技大学和北邮的论文“AnyTouch: Learning Unified Static-dynamic Representation Across Multiple Visuo-tactile Sensors”。 视觉触觉传感器旨在模拟人类的触觉感知&#xff0c;使机器人能够精确地理解和操纵物体。随着时间的推移&#xff0c;许多精…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款轻量级且功能强大的跨平台代码编辑器&#xff0c;凭借丰富的插件生态和高度的可定制性&#xff0c;深受开发者喜爱。对于 C/C 开发者而言&#xff0c;在 VSCode 中搭建开发环境&#xff0c;能够获得灵活…

Python 中下划线 “_” 的多面性:从变量到约定

# Python中下划线“_”的多面性&#xff1a;从变量到约定 在Python的语法体系里&#xff0c;下划线“_”看似毫不起眼&#xff0c;实则扮演着极为重要且多样化的角色。它不仅能作为普通变量参与编程&#xff0c;更在多个特殊场景下有着独特的用途与约定。深入理解下划线的各种…