ADC

Prometheusを使用してNetScaler、アプリケーション、およびアプリケーションのセキュリティを監視する

指標は、特定の期間に測定されたデータを数値で表したものです。メトリックデータは、 システムの状態を経時的に追跡するのに役立ちます。Prometheus は、メトリクスデータを収集し、データが記録された時点のタイムスタンプを付けてそのデータを保存するオープンソースの監視ツールです。

メトリクスを監視および分析することで、アプリケーションの状態を追跡し、異常を検出し、アラートを作成し、必要な是正措置を講じて、ソフトウェアを確実に配信できます。

NetScalerは、Prometheusへのメトリクスの直接エクスポートをサポートするようになりました。NetScaler ADCが提供する豊富なメトリックセットを使用して、NetScalerの状態とアプリケーションの状態を監視できます。たとえば、CPUとメモリの使用状況に関するメトリックを収集して、NetScalerの状態を知ることができます。同様に、1 秒あたりに受信した HTTP リクエストの数やアクティブなクライアントの数などの指標を使用して、アプリケーションの状態を監視できます。

NetScaler からPrometheusへのメトリクスのエクスポート

NetScalerは、Prometheusのプルモードとプッシュモードをサポートしています。プルモードでは、Prometheus が定期的にクエリを実行し、エクスポーターリソースを挟まずにメトリクスデータを直接取得する時系列プロファイルを設定する必要があります。プルモードでは、スーパーユーザー権限を持たないユーザーがPrometheusにメトリックをエクスポートするための読み取り専用アクセスを有効にできます。Grafana を使用すると、Prometheus にエクスポートされた NetScaler メトリクスを視覚化して、解釈や理解が容易になります。

次の図は、PrometheusとGrafana とNetScalerの統合を示しています。

NetScalerとPrometheusおよびGrafana との統合

NetScalerからPrometheusへのメトリクスのエクスポートとGrafanaを使用した視覚化を設定します

NetScalerからPrometheusへのメトリックのエクスポートを構成し、Grafana aを使用して視覚化するには、次の手順を実行する必要があります。

  1. メトリクスをPrometheusにエクスポートするための時系列分析プロファイルを使用してNetScalerを構成します。
  2. Prometheusをインストールし、NetScaler 固有のパラメーターを使用して構成します。
  3. Grafana のデータソースとして Prometheus を追加します。
  4. Grafana でビジュアライゼーションを作成

PrometheusプルモードをサポートするようにNetScalerで時系列分析プロファイルを構成する

NetScaler CLIを使用してプルモードを構成するには、次の手順を実行します。

  1. タイプが時系列である分析プロファイルを作成します。必要な NetScaler メトリックを含むスキーマファイルを指定します。

     add analytics profile <timeseries_profile_name> -type timeseries -schemaFile <name_of_schema_file> -outputMode Prometheus -serveMode PULL -metrics ENABLED
    <!--NeedCopy-->
    

    このコマンドでは:

    -timeseries_profile_name: 時系列プロファイル名を指定します。 -schemaFile: NetScaler カウンターを使用してスキーマファイルの名前を指定します。デフォルトでは、カウンターのリストを含むスキーマファイル/var/metrics_conf/schema.jsonが設定されます。サポートされているすべてのカウンタを含む参照スキーマファイルreference_schema.jsonもパス/var/metrics_conf/の下にあります。このスキーマファイルは、カウンターのカスタムリストを作成するための参照として使用できます。 スキーマファイルを指定すると、 スキーマファイル/var/metrics_conf/のパスが自動的に追加されるため、指定する必要があるのはスキーマファイル名だけです。たとえば、 /var/metrics_conf/でカウンターのカスタムリストを含むスキーマファイルschema1.jsonを作成した場合は 、 ファイル名のみをschema1.jsonとして指定する必要があります。 -outputMode: 出力モードを「Prometheus」に設定します。 -serveMode: Prometheusのプルモードを指定します。 -metrics: NetScaler からのメトリクスの収集を有効にします。

    注:

    add コマンドを使用して、必要なすべてのパラメーターを含む分析プロファイルを設定できます。プロファイルの作成後に変更を加える必要がある場合は、set コマンドを使用して、メトリックの無効化やサーバーモードの変更などの適切なアクションを実行できます。非スーパーユーザーには、読み取り専用の Prometheus アクセスを設定できます。詳細については、「 スーパーユーザー以外の読み取り専用の Prometheus アクセスを設定する」を参照してください。

NetScalerからメトリックをエクスポートするためのPrometheusのインストールと設定

Prometheusは、DockerHub や Quay などのリポジトリや、Prometheusの公式リポジトリからダウンロードできます。

Prometheus を Docker コンテナーとして実行するには、以下のコマンドを使用します。

docker run -dp 39090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml --name native_prom prom/prometheus:latest
<!--NeedCopy-->

注:

ここでは、/tmp/prometheus.ymlprometheus.ymlファイルへのパスとして使用されます。その代わりに、仮想マシンのパスを指定できます。

prometheus.yml NetScalerのパラメータを使用して編集する必要があります。

NetScalerからメトリックをエクスポートするには、 Prometheus YAMLスクレイプ構成セクションで次のNetScaler固有のパラメーターを指定する必要があります。スクレイプ構成セクションでは、ターゲットとそれらをスクレイピングする方法を説明する構成パラメーターのセットを指定します。

  • metrics_path : NetScalerのHTTPリソースパスを指定してメトリックを取得します。このパラメータはオプションで、デフォルトパスは/metricsです。値が定義されていない場合、Prometheusはパスとして「/metrics」を追加します。
  • username: NetScalerユーザー名を指定します。
  • password: NetScalerのパスワードを指定します。
  • targets:メトリックのエクスポート元となるNetScalerのIPアドレスと、公開するポートを指定します。
  • profilename : profilenameの代わりにプロファイルの名前を指定します 。profilenameパラメーターはオプションで、ユーザー定義の時系列プロファイル名を使用できます。profile nameパラメータがない場合は、ns_analytics_time_series_profileがプロファイル名とみなされます。
  • follow_redirects: HTTP リクエストが HTTP 3xx リダイレクトに従うかどうかを設定します。このパラメーターはオプションで、デフォルト値は Prometheus によってtrueに設定されます。このパラメータを設定する場合は、値をtrueに設定する必要があります。

以下は、Prometheus YAMLのスクラップ構成セクションで、NetScaler IPアドレスをPrometheusのターゲットとして追加してメトリックをエクスポートするためのものです。ここでは、HTTP がスキームとして使用されています。HTTP または HTTPS のいずれかを使用できます。

  scrape_configs:
    - job_name: 'vpx2_metrics_direct'
      metrics_path: /metrics
      params:
        profilename:
        - 'profile_name'
      basic_auth:
        username: 'prom_user'
        password: 'user_password'
      scheme: http
      scrape_interval: 30s
      follow_redirects: true
      static_configs:
      - targets: ['10.102.34.231:80']
<!--NeedCopy-->

PrometheusをGrafana データソースとして追加

Grafana ダッシュボードを使用してメトリクスを視覚化する必要がある場合は、Grafana のデータソースとして Prometheus を追加する必要があります。詳細については、「 Grafana のデータソースとして Prometheus を追加する」を参照してください。

Grafana でメトリクスのビジュアライゼーションを作成

Grafana ダッシュボードを作成し、主要な指標と適切なビジュアライゼーションタイプを選択できます。

以下の手順は、Grafana パネルに指標を追加し、サンプルビジュアライゼーションダッシュボードを作成する方法を示しています。

  1. パネルタイトルを指定します。
  2. 「クエリ」タブで、クエリ A に必要なメトリックを指定します。
  3. 「設定」タブで、「 ビジュアライゼーション」タイプを選択します。

Grafana では、データとその表現を変更できます。詳細については、 Grafana のドキュメントを参照してください

以下は、いくつかのNetScalerメトリックを含むGrafanaダッシュボードのサンプルです。

Grafana ダッシュボードのサンプル

このダッシュボードには、次のようなさまざまなNetScalerメトリックのグラフが表示されます。

  • vsvr_tot_Hits: 仮想サーバーが受信した要求の数を示します。
  • cc_cpu_use: CPU 使用率を表示します。
  • http_tot_Requests: 受信した HTTP リクエストを表示します。
  • serv_tot_serviced: 処理中のリクエストを表示します。
  • mem_cur_used_size: NetScalerアプライアンスの現在使用されているメモリが表示されます。

Prometheusグラフのサンプル

Prometheus エクスプレッションブラウザを使用すると、Prometheus サーバーによって収集された時系列メトリックを表示できます。ブラウザでprometheu-server-ip-address/graph をポイントすると、エクスプレッションブラウザにアクセスできます。 式を入力すると、その結果を表またはグラフとして時系列で表示できます。「Expression」フィールドに指標名を入力して、表示する正確な指標を指定します。さまざまなパネルを使用して複数のカウンターを指定できます。

次の図は、2つのNetScalerメトリックとに関するPrometheusグラフを示しています。 cpu_usehttp_tot_requests

Prometheusダッシュボードのサンプル

Grafana ダッシュボードのサンプル

NetScalerはGrafana サンプルダッシュボードをサポートしています。Grafana でサポートされているサンプルダッシュボードの完全なリストとその詳細については、「Grafana のサンプルダッシュボード」を参照してください。

サンプルダッシュボードはNetScalerのダウンロードページからダウンロードできます

追加情報

エクスポートに必要な NetScaler カウンタを含むスキーマ

メトリクスコレクターは、設定されたスキーマファイルに存在するカウンターをエクスポートします。 /var/metrics_conf/schema.json このファイルは、分析プロファイルで設定されたデフォルトのスキーマファイルです。

スキーマファイルは、エンティティタイプと関連するカウンターのリストです。スキーマでは、 netscalerすべてのグローバルまたはシステムレベルのカウンタがエンティティタイプ別にグループ化されます。グローバルカウンタには、CPU 使用率 (cpu_use)、管理 CPU 使用率 (mgmt_cpu_use)、受信した HTTP リクエストの総数 (http_tot_Requests) があります。サービスグループ固有のカウンタ、lbvservercsvserverなどは、それぞれのエンティティタイプの下に一覧表示されます。

以下は、認証仮想サーバー (vserver_authn) エンティティのschema.jsonファイル内のカウンターのサンプルです。

"vserver_authn":
  [
      {"name":"si_tot_Requests","rate":"True"},
      {"name":"si_tot_Responses","rate":"True"},
      {"name":"si_tot_RequestBytes","rate":"True"},
      {"name":"si_cur_state","rate":"False"},
      {"name":"si_tot_ResponseBytes","rate":"True"},
      {"name":"si_peer_port","rate":"True"},
      {"name":"vsvr_Protocol","rate":"False"}
  ]
<!--NeedCopy-->

次の表では、このサンプルに記載されているカウンタについて説明します。

カウンター名 説明
si_tot_Requests このサービスまたは仮想サーバーで受信したリクエストの総数。
si_tot_Responses このサービスまたは仮想サーバーで受信した応答の総数。
si_tot_RequestBytes このサービスまたは仮想サーバーで受信したリクエストバイトの総数。
si_cur_state 仮想サーバーの現在の状態。
si_tot_ResponseBytes このサービスまたは仮想サーバーで受信した応答バイトの総数。
si_peer_port サービスが実行されているポート。
vsvr_Protocol 仮想サーバーに関連するプロトコル。

rateフィールドは、カウンターのレート値をエクスポートする必要がある場合、Trueとして設定できます。たとえば、ratesi_tot_RequestsTrueに設定すると、si_tot_Requestsのレートがエクスポートされます 。

以下は、 netscaler エンティティのカウンターのサンプルです。

"netscaler":
  [
      {"name":"cpu_use","rate":"False"},
      {"name":"mgmt_cpu_use","rate":"False"},
      {"name":"tcp_tot_rxpkts","rate":"True"},
      {"name":"tcp_tot_rxbytes","rate":"True"},
      {"name":"tcp_tot_txpkts","rate":"True"},
      {"name":"tcp_tot_txbytes","rate":"True"},
      {"name":"tcp_cur_ClientConnEst","rate":"False"},
      {"name":"tcp_cur_ServerConnEst","rate":"False"},
      {"name":"tcp_cur_ClientConn","rate":"False"},
      {"name":"tcp_cur_ClientConnClosing","rate":"False"},
      {"name":"tcp_tot_ClientOpen","rate":"True"},
      {"name":"tcp_cur_ServerConn","rate":"False"},
      {"name":"tcp_cur_ServerConnClosing","rate":"False"},
      {"name":"http_tot_Requests","rate":"True"},
      {"name":"http_tot_Responses","rate":"True"},
      {"name":"http_tot_Gets","rate":"True"},
      {"name":"http_tot_Posts","rate":"True"},
      {"name":"http_tot_Others","rate":"True"},
  ]
<!--NeedCopy-->

次の表では、このサンプルに記載されているカウンタについて説明します。

カウンター名 説明
cpu_use CPU 使用率を追跡します (CPU 使用率* 10)。
tcp_tot_rxpkts TCP パケットを受信しました。
tcp_tot_rxbytes 受信した TCP データのバイト数。
tcp_tot_txpkts TCP パケットが送信されました。
tcp_tot_txbytes 送信された TCP データのバイト数。
tcp_cur_ClientConnEst 現在のクライアント接続が「確立済み」状態です。これは、NetScalerアプライアンスとクライアント間でデータ転送が可能であることを示しています。
tcp_cur_ServerConnEst 現在のサーバー接続が「確立済み」状態です。これは、NetScalerアプライアンスとサーバー間でデータ転送が可能であることを示しています。
tcp_cur_ClientConn クライアント接続 ([開始]、[確立]、[終了] 状態の接続を含む)。サーバー接続 (「開始」、「確立」、および「終了」状態の接続を含む)。
tcp_cur_ClientConnClosing クライアント接続が閉じている状態です。これは、接続終了プロセスが開始されたがまだ完了していないことを示します。
tcp_cur_ServerConn サーバー接続 (「開始」、「確立」、および「終了」状態の接続を含む)。
tcp_cur_ServerConnClosing サーバー接続が「クローズ」状態になっています。これは、接続終了プロセスが開始されたがまだ完了していないことを示します。
http_tot_Requests このカウンタは、GET メソッドを使用して受信した HTTP リクエストを追跡します。
http_tot_Responses このカウンタは、POST メソッドを使用して受信した HTTP リクエストを追跡します。
http_tot_Gets このカウンタは、GET メソッドを使用して受信した HTTP リクエストを追跡します。
http_tot_Posts このカウンタは、受信した HTTP リクエストを追跡します。
http_tot_Others このカウンタは、GET と POST 以外のメソッドを使用して受信した HTTP リクエストを追跡します。

以下は、 vserver_ssl エンティティのカウンターのサンプルです。

"vserver_ssl":
  [
    {"name":"ssl_ctx_tot_session_hits","rate":"True"},
    {"name":"ssl_ctx_tot_session_new","rate":"True"},
    {"name":"ssl_ctx_tot_enc_bytes","rate":"True"},
    {"name":"ssl_ctx_tot_dec_bytes","rate":"True"},
  ]
<!--NeedCopy-->

次の表では、このサンプルに記載されている SSL カウンタについて説明します。

カウンター名 説明
ssl_ctx_tot_session_hits このカウンタはセッションヒット数を追跡します。
ssl_ctx_tot_session_new このカウンタは、作成された新しいセッションの数を追跡します。
ssl_ctx_tot_enc_bytes このカウンタは、SSL 仮想サーバーごとの暗号化されたバイト数を追跡します。
ssl_ctx_tot_dec_bytes このカウンタは、SSL 仮想サーバーごとに復号化されたバイト数を追跡します。

非スーパーユーザーには読み取り専用の Prometheus アクセスを設定する

スーパーユーザー以外のユーザーに読み取り専用の Prometheus アクセスを設定するには、次の手順を実行します。

  1. NetScalerアプライアンスに新しいユーザーを追加します。

    add system user <ns_user_name> <ns_user's_password> -externalAuth enabled -promptString user-%u-at-%T logging enaBLED
    <!--NeedCopy-->
    

    例:

    add system user nspaul nspaul -externalAuth enabled -promptString user-%u-at-%T logging enaBLED
    <!--NeedCopy-->
    
  2. 読み取り専用ユーザー用のコマンドポリシーを作成します。このコマンドポリシーでは、 /var/nslog/ directoryにあるすべてのファイルからの読み取り専用アクセスを許可します。

    add system cmdPolicy read-only-prometheus ALLOW "(^man.*)|(^show\s+(?!system)(?!configstatus)(?!ns ns\.conf)(?!ns savedconfig)(?!ns runningConfig)(?!gslb runningConfig)(?!audit messages)(?!techsupport).*)|(^stat.*)|(show system file .* -filelocation "/var/nslog")"
    <!--NeedCopy-->
    
  3. メトリクスを特定のファイルにのみ書き込む場合は、その特定のファイルのみを取得できるようにユーザーアクセスを制限することもできます。

    add system cmdPolicy read-only-prometheus ALLOW "(^man.*)|(^show\s+(!system)(!configstatus)(!ns ns\.conf)(!ns savedconfig) (!ns runningConfig)(!gslb   runningConfig)(!audit messages)(!techsupport).*)|(^stat.*) |(show system file metrics_prom_<name_of_timeseries_profile>.log -filelocation "/var/nslog")"
    <!--NeedCopy-->
    

    注:

    show system fileコマンドで、name_of_ timeseries_profileの代わりに設定した時系列プロファイルの名前を指定します。

  4. ユーザーをコマンドポリシーでバインドします。

    bind system user <userName> ((<policyName> <priority>) | -partitionName <string>)
    <!--NeedCopy-->
    

    例えば:

    bind system user user1 read-only-prometheus 0
    <!--NeedCopy-->
    

ユーザーをバインド解除してコマンドポリシーから削除するには、次のコマンドを使用します。

  1. 設定したユーザーをシステムコマンドポリシーからバインド解除します。

    unbind system user <userName> (<policyName> | -partitionName <string>
    <!--NeedCopy-->
    

    例:

    unbind system user user1 read-only-prometheus
    <!--NeedCopy-->
    
  2. NetScalerからコマンドポリシーを削除します。

    rm system cmdPolicy read-only-prometheus
    <!--NeedCopy-->
    

複数の時系列プロファイルのカウンターの購読

NetScalerは複数の時系列プロファイルの作成をサポートし、プロファイルごとに異なるカウンターのセットを指定します。また、要件に応じてカウンターのみをエクスポートできます。

複数の時系列プロファイルを構成するには、必要なカウンタを固有の名前と拡張子.jsonで含む複数のschema.jsonファイルを作成する必要があります。参照スキーマファイルreference_schema.jsonは、 参照用のパス/var/metrics_conf/の下にあります。

2 つの新しい時系列プロファイルの構成は次のとおりです。

  add analytics profile ns_analytics_timeseries_profile_1   -type timeseries -schemaFile schema1.json

  set analytics profile  ns_analytics_timeseries_profile_1 -outputMode prometheus -serveMode PULL -metrics ENABLED

  add analytics profile ns_analytics_timeseries_profile_2   -type timeseries -schemaFile schema2.json

  set analytics profile  ns_analytics_timeseries_profile_2 -outputMode prometheus -serveMode PULL -metrics ENABLED
  <!--NeedCopy-->

この例では、schema1.jsonschema2.json でカウンターのセットが異なります。

Prometheus構成

prometheus.yml サンプルファイルの設定は次のとおりです。

scrape_configs:
  - job_name: 'vpx2_metrics_direct'
    metrics_path: /metrics
    params:
     - 'profile_name'
    basic_auth:
     username: 'prom_user'
     password: 'user_password'
    scheme: https
    scrape_interval: 30s
    follow_redirects: true
    static_configs:
     - targets: ['<ADC1-ip>:<port>', '<ADC2-ip>:<port>']
<!--NeedCopy-->