ストリームインジケータ出力

NGINX はクラウドネイティブに進化し、すべて OpenNJetで実現 


1 はじめに

NJet は、オープン ソース コミュニティによって提供される STS モジュール (https://github.com/vozlt/nginx-module-sts) を変更および適合させた後、ストリーム サーバーのインジケーター情報を出力するために使用され、json を返すことをサポートします。 html およびプロメテウス形式。

2. 設定手順

データプレーンの構成手順

サーバートラフィックステータスゾーン

   
文法 server_traffic_status_zone [共有:名前:サイズ]
デフォルト値 共有:stream_server_traffic_status:1m
構成の場所 ストリーム

説明: ストリーム サーバーの実行ステータスを保存する共有メモリ領域を設定します。

サーバートラフィックステータス

   
文法 サーバー_トラフィック_ステータス<on
デフォルト値 オフ
構成の場所 ストリーム、サーバー

説明: ストリームサーバーインジケーターを記録するかどうか。server_traffic_status_zone コマンドが設定されている場合、インジケーター収集が自動的に有効になります。

server_traffic_status_filter_by_set_key

   
文法 server_traffic_status_filter_by_set_key キー [名前]
デフォルト値 -
構成の場所 ストリーム、サーバー

説明: ストリームのトラフィック統計のグループ (名前) とサブグループ (キー)。$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 は、ストリーム サーバーがインジケーターを収集するかどうかを動的に構成できます。

動的構成機能を使用するには、sts 動的構成モジュールを njet.conf にロードする必要があります。

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 

画像

画像

NJet アプリケーション エンジンは、カーネルの再構築を通じて独自のランタイム動的構成読み込み機能を実現し、新世代の高性能 Web アプリケーション エンジンです。 NJet は、高性能のデータ プレーン処理機能を備えており、NJet 独自のコパイロット CoPilot サービス フレームワークを通じて、クラスタリング、高可用性、アクティブ ヘルス チェック、宣言型 API などの複数の補助機能をスケジュールして、機能拡張を促進し、管理/制御機能ペアを分離します。データ プレーンへの影響を考慮すると、NJet アプリケーション エンジンのパフォーマンスは、CNCF が推奨する Envoy アプリケーション エンジンの 3 倍を超えています。メールグループ公式サイト   

ライナスは、カーネル開発者がタブをスペースに置き換えることを阻止するために自ら問題を解決しました。 彼の父親はコードを書くことができる数少ないリーダーの 1 人であり、次男はオープンソース テクノロジー部門のディレクターであり、末息子は中核です。ファー ウェイ: 一般的に使用されている 5,000 のモバイル アプリケーションを変換するのに 1 年かかった Java はサードパーティの脆弱性が最も発生しやすい言語です。Hongmeng の父: オープンソースの Honmeng は唯一のアーキテクチャ上の革新です。中国の基本ソフトウェア分野で 馬化騰氏と周宏毅氏が握手「恨みを晴らす」 元マイクロソフト開発者:Windows 11のパフォーマンスは「ばかばかしいほど悪い」 老祥基がオープンソースであるのはコードではないが、その背後にある理由は Meta Llama 3 が正式にリリースされ、 大規模な組織再編が発表されました
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/6606114/blog/11054470