스트림 표시기 출력

NGINX, 클라우드 네이티브로 진화, All in  OpenNJet 


1. 소개

NJet은 오픈소스 커뮤니티에서 제공하는 STS 모듈(https://github.com/vozlt/nginx-module-sts)을 수정 및 적용한 후 Stream Server의 표시기 정보를 출력하는 데 사용되며 json 반환을 지원합니다. html 및 prometheus 형식.

2. 구성 지침

데이터 플레인 구성 지침

server_traffic_status_zone

   
문법 server_traffic_status_zone [공유:이름:크기]
기본값 공유:stream_server_traffic_status:1m
구성 위치 개울

설명: 스트림 서버의 실행 상태를 저장하는 공유 메모리 영역을 구성합니다.

서버_트래픽_상태

   
문법 server_traffic_status<on
기본값 끄다
구성 위치 스트림,서버

설명: 스트림 서버 표시기를 기록할지 여부입니다. server_traffic_status_zone 명령이 구성된 경우 표시기 수집이 자동으로 활성화됩니다.

server_traffic_status_filter_by_set_key

   
문법 server_traffic_status_filter_by_set_key 키 [이름]
기본값 -
구성 위치 스트림,서버

설명: 그룹(이름) 및 하위 그룹(키) Stream의 트래픽 통계를 $server_addr, $server_port 등과 같은 변수를 사용할 수 있습니다. 매개변수 이름이 지정되지 않은 경우 기본값은 streamFilterZones입니다.

제어 영역 구성 지침

stream_server_traffic_status_display

   
문법 stream_server_traffic_status_display
기본값 -
구성 위치 위치

설명: 이 명령은 스트림 서버의 표시기 정보를 얻는 데 사용됩니다. 기본 출력 형식은 stream_server_traffic_status_display 명령에 의해 설정됩니다.

stream_server_traffic_status_display_format

   
문법 stream_server_traffic_status_display_format <json
기본값 JSON
구성 위치 위치

설명: 이 명령은 표시기의 기본 반환 형식을 구성하는 데 사용됩니다.

3. 구성 파일 예시

njet.conf njt_stream_stsc_module 모듈은 정적으로 컴파일되므로 별도로 로드할 필요가 없습니다.

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;

events {
    worker_connections  1024;
}
http {
}

stream {
  server_traffic_status_zone shared:aabbcc:2m;
  upstream tcpa {
    server 127.0.0.1:1234; 
  }
  server {
    listen 1234;
    server_traffic_status off;
    server_traffic_status_filter_by_set_key * $server_addr;
    return "aa\n";
   }
  server {
     listen 1235;
     server_traffic_status on;
     proxy_pass tcpa;
   }

}

njet_ctrl.conf는 동적 모듈 njt_stream_stsd_module.so를 로드해야 합니다.

load_module /usr/local/njet/modules/njt_http_sendmsg_module.so;
load_module /usr/local/njet/modules/njt_ctrl_config_api_module.so; 
load_module /usr/local/njet/modules/njt_helper_health_check_module.so;
load_module /usr/local/njet/modules/njt_http_upstream_api_module.so; 
load_module /usr/local/njet/modules/njt_http_location_api_module.so;
load_module /usr/local/njet/modules/njt_doc_module.so;
load_module /usr/local/njet/modules/njt_http_vtsd_module.so;
load_module /usr/local/njet/modules/njt_stream_stsd_module.so;

error_log logs/error_ctrl.log error;

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 /metrics {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        location /stream_metrics {
            stream_server_traffic_status_display;
            stream_server_traffic_status_display_format html;
        }
    }
}

4.4.동적 구성

NJet은 스트림 서버가 지표를 수집하는지 여부를 동적으로 구성할 수 있습니다.

동적 구성 기능을 사용하려면 njet.conf에 sts 동적 구성 모듈을 로드해야 합니다.

load_module /usr/local/njet/modules/njt_stream_dyn_sts_module.so;

동적 구성 API 메시지의 스키마는 다음과 같이 정의됩니다.

{
        "$id": "dynsts",
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "type": "object",
        "required": ["servers"],
        "properties": {
                "servers": {
                        "type": "array",
                        "items": {
                                "type": "object",
                                "additionalProperties": false,
                                "required": ["listens", "server_traffic_status"],
                                "properties": {
                                        "listens": {
                                                "type": "array",
                                                "items": {
                                                        "type": "string",
                                                        "minLength": 1
                                                }
                                        },
                                        "server_traffic_status": {
                                                "type": "boolean"
                                        },
                           "server_traffic_status_filter_by_set_key": {
                                                "type": "array",
                        "items": {
                                                        "type": "string",
                                                        "minLength": 1
                                                }
                                        }
                                }
                        }
                }
        }
}

메시지 샘플:

{
  "servers": [
    {
      "listens": [
        "0.0.0.0:18082"
      ],
      "server_traffic_status": true,
      "server_traffic_status_filter_by_set_key":
       [
       "* $server_addr"
       ]
    }
  ]
}

GET을 사용하여 현재 구성 쿼리

curl localhost:8081/api/v1/config/stream_dyn_sts

PUT을 사용하여 구성 업데이트

curl -X PUT -d 
'{"servers":[{"listens":["0.0.0.0:1234"],"server_traffic_status":false,"server_traffic_status_filter_by_set_key":["\"*\" \"$server_addr\""]},{"listens":["0.0.0.0:1235"],"server_traffic_status":true,"server_traffic_status_filter_by_set_key":[]}]}'
 localhost:8081/api/v1/config/stream_dyn_sts 

img

img

NJet 애플리케이션 엔진은 커널 재구성을 통해  고유한 런타임 동적 구성 로딩 기능을 달성하며 차세대 고성능 웹 애플리케이션 엔진 입니다 . NJet은 고성능 데이터 플레인 처리 기능을 갖추고 있으며 NJet의 고유한 부조종사 CoPilot 서비스 프레임워크를 통해 클러스터링, 고가용성, 활성 상태 확인 및 선언적 API와 같은 여러 보조 기능을 예약하여 기능 확장을 촉진하고 관리/제어 기능 쌍을 분리합니다. 데이터 플레인에 미치는 영향까지 NJet 애플리케이션 엔진의 성능은 CNCF에서 권장하는 Envoy 애플리케이션 엔진의 3배를 초과합니다. 메일 그룹 공식 홈페이지   

Linus는 커널 개발자가 탭을 공백으로 대체하는 것을 막기 위해 문제를 직접 해결했습니다. 그의 아버지는 코드를 작성할 수 있는 몇 안 되는 리더 중 한 명이고, 둘째 아들은 오픈 소스 기술 부서의 책임자이며, 막내 아들은 핵심입니다. Huawei: 일반적으로 사용되는 모바일 애플리케이션 5,000개를 변환하는 데 1년이 걸렸습니다. Hongmeng으로의 포괄적인 마이그레이션 Java는 타사 취약점에 가장 취약한 언어입니다. Hongmeng의 아버지인 Wang Chenglu: 오픈 소스 Hongmeng은 유일한 아키텍처 혁신입니다. 중국 기초 소프트웨어 분야의 마화텅(Ma Huateng)과 저우홍이(Zhou Hongyi)가 악수를 하며 "원한을 풀다" 전 마이크로소프트 개발자: 윈도우 11 성능은 "터무니없을 정도로 나쁘다" 라오샹지가 오픈소스인 것은 코드는 아니지만 그 이유는 다음과 같다. Google이 대규모 구조 조정을 발표 했습니다 .
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/6606114/blog/11054470