NGINX(エンジンエックス)|日本公式サイト

NGINXはF5ファミリーの一員となりました。新体制の詳細はこちらを御覧ください。

PrometheusとGrafanaでNGINX Plusを可視化する方法

Kubernetesの可視性を向上させる方法でも説明していますが、アプリの開発・配信チームにとって最大の課題の1つは、アプリのパフォーマンス、セキュリティ、可用性を洞察することです。これらの洞察は、チームが問題を迅速にトラブルシューティングし、トラフィックの急増に先回りして備えるのに役立ちます。

ロードバランサー、リバースプロキシ、APIゲートウェイ、Ingress Controllerなどのトラフィック管理ツールは、アプリとインフラの健全性に関する豊富な情報を出力します。NGINX Plusのダッシュボードでこれらの貴重なメトリクスをリアルタイムで追跡できます。また、NGINX Plusはサードパーティの監視ツールにメトリクスを送り、時系列のパフォーマンスの視覚化からさらなる洞察を得ることができます。最も人気のある2つのツールは、これらの時系列グラフを提供するために一緒に動作します。

  • Prometheus – Cloud Native Computing Foundation (CNCF)のオープンソースプロジェクトで、監視とアラートを提供します。
  • Grafana – Prometheusなどの時系列データベースからグラフ生成するオープンソースの可視化・分析ツールです。

Prometheus-njsモジュールは、NGINX PlusのメトリクスをPrometheusやGrafanaに簡単に連携できるようにするものです。NGINX JavaScriptモジュール(NJS)とNGINX Plus APIを使用して、NGINX PlusからPrometheusサーバーにメトリクスをエクスポートします。

このデモでは、NGINX Plus、Prometheus、GrafanaのセットアップとGrafanaグラフの構築のステップを説明します。

注意事項

  • これらの手順は、NGINX Plus APIで利用が可能です、NGINX Open Sourceでは動作しません。
  • rometheusとGrafanaをNGINX Ingress Controllerで使用するには、当社のオンラインドキュメントを参照してください。

前提条件

デモを始める前に、以下の前提条件を満たしてください。

  1. NGINX PlusをNGINX Plusサーバーにインストールする。デモの目的のため、クリーンな初期インストールを行います。既存のNGINX Plusサーバーを使用している場合、デモ中に設定ファイルに加えられた変更を修正する必要があるかもしれません。
  2. NGINX JavaScript (njs) モジュールをNGINX Plusサーバーにインストールします。
  3. Prometheusサーバーに最新版のDockerをインストールします。デモでは、NGINX Plusとは別のサーバーでPrometheusを実行します。
  4. Grafanaサーバー(デモでは3つ目のサーバー)を最新バージョンのDockerでインストールします。

NGINX Plusサーバーのセットアップ(1:20)

  1. Prometheus-njsモジュールをインストールします。デモではUbuntu 20.04を使用しているので、このコマンドを実行します。他のOSの場合は、ドキュメントを参照してください。

    $ sudo apt-get install nginx-plus-module-prometheus
  2. テキストエディタで /etc/nginx/nginx.conf を開き、http ブロック外、トップレベルのコンテキストに以下の load_moduleディレクティブを追加してください。

    load_module modules/ngx_http_js_module.so;
    # existing top-level directives
    
    http {
        #...
    }
  3. (オプション) サブリクエストからの応答を格納するためのバッファーサイズを大きくします (プラットフォームによって、デフォルトのサイズは 4 KB または 8 KB です)。これにより、NGINXのエラーログに表示される、サブリクエスト応答エラーを防ぐことができます。httpブロックに以下のsubrequest_output_buffer_sizeディレクティブを追加してください。

    http {
        #...
        subrequest_output_buffer_size 32k;
    }
  4. nginx.confを保存し、このコマンドを実行して NGINX の設定が構文的に正しいことを確認します。

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  5. conf.dにディレクトリを変更し、ファイルをリストアップします。

    $ cd conf.d
    $ ls
    default.conf
  6. default.conf ファイルは、ポート 80 をリッスンする仮想サーバーを定義しています。Prometheusの仮想サーバーはこのポートをリッスンする必要があるので、default.confを削除して空きポートにします。

    $ sudo rm default.conf
  7. お好みのテキストエディタで、prometheus.confというファイルを新規に作成し、以下の内容を記述します。

    js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
    
    server {
        location = /metrics {
            js_content prometheus.metrics;
        }
    
        location /api {
            api;
        }
    }

    js_importディレクティブは、NGINX Plus APIによって生成されたメトリクスをPrometheusが必要とする形式に変換するNGINX JavaScriptコードの場所を指定します。(Prometheus-njsのload_moduleディレクティブを追加する必要はありません)。

    最初のlocationブロックは、Prometheus形式のメトリクスへのアクセスを提供します。2番目のlocationブロックはNGINX Plus APIを有効にし、各メトリクスを生成してPrometheusに公開します。

    注:本番環境では、弊社のドキュメントに記載されているように、NGINX Plus APIへのアクセスを制限することを強くお勧めします。

    Prometheus-njssモジュールの詳細については、当社のドキュメントを参照してください。

  8. prometheus.confを保存し、ステップ4と同様に正しい構文であることを確認し、以下のコマンドを実行してNGINX Plusを起動します。

    $ sudo nginx

Prometheusサーバーのセットアップ (5:30)

  1. /etc/prometheusディレクトリにprometheus.ymlというYAML形式のPrometheus設定ファイルを新規に作成し、以下の内容を記述します(Prometheusウェブサイトのデフォルト設定ファイルが元になっています)。図のように、変更点はtargets欄にNGINX PlusサーバーのIPアドレスとポートを追加することです。

    global:
      scrape_interval: 15s
    
      external_labels:
        monitor: 'codelab-monitor'
    
    scrape_configs:
      - job_name: 'prometheus'
    
        scrape_interval: 5s
    
        static_configs:
          - targets: ['NGINX_Plus_IP_address:80']

    設定ファイルに含めることができるその他のオプションなど、Prometheusの設定の詳細については、Prometheusのドキュメントを参照してください。

  2. prometheus.ymlを保存し、以下のコマンドを実行します。Docker HubからPrometheusを取得し、9090番ポートで公開します。

    $ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  3. ブラウザで、新しいPrometheusサーバーのIPアドレスとポートに移動します。以下のようなページが表示されれば、サーバーが動作していることが確認できます。

  4. PrometheusがNGINX Plusのメトリックのフィードにアクセスしていることを確認します。ウィンドウの右上にある[Execute]ボタンの左側にある地球儀のアイコンをクリックします。以下のようなメトリクスのリストが表示されます。

Grafanaサーバーをセットアップする(9:15)

  1. このコマンドを実行して、Docker Hub から Grafana を引き出し、ポート3000 で公開します。

    [terminal[$ sudo docker run -d -p 3000:3000 grafana/grafana

    その他のインストール方法については、Grafanaのドキュメントを参照してください。

  2. ブラウザで、新しいGrafanaサーバーのIPアドレスとポートに移動します。Grafanaのログインページで、サーバーが動作していることを確認します。

  3. Email または usernamePassword の欄に admin と入力し、ログインします。新しい安全なパスワードを設定することを強くお勧めしますが、デモでは時間の都合上、このステップは省略します。

  4. 表示されたGrafanaのホームページで、Grafanaのドキュメントの説明に従って、Prometheusをデータソースとして登録します。動画では、GrafanaのGUIで手順を説明しています。

    注: Grafanaの説明のステップ5では、表示されているURLの例(http://localhost:9090)の代わりに、PrometheusサーバーのIPアドレス(ポート9090)を入力してください。

    Grafanaの説明のStep7で Save & test  ボタンをクリックすると、緑のボックスにチェックマークとData source is workingのメッセージが表示され、GrafanaがPrometheusサーバーに正常に接続されたことが確認できます。

GrafanaでNGINX Plusのグラフを作成する (11:15)

Prometheusは1つのメトリクスだけを見るのに便利ですが、Grafanaは1つのグラフでメトリクスの集まりを簡単に見ることができます。

Grafanaのグラフを作るには。

  1. ページ左側のナビゲーションバーにあるプラス記号(+)をクリックします(前節のステップ4のスクリーンショットを参照)。作成ドロップダウン メニューでDashboardを選択します。

  2. 空のパネルを追加ボックスをクリックします。

  3. New dashboard/Edit Panelページが表示されたら、ページの下半分にあるQueryタブのData sourceフィールドにPrometheusが表示されることを確認します。表示されていない場合は、ドロップダウンメニューからPrometheusを選択します。>

  4.  Metrics browser > フィールドに「nginx」と入力します。NGINX Plusのメトリクスのリストが表示されます。

    ここでは、どのような情報を提供するのか、簡単に説明します。

    • nginxplus_connections_accepted – 受け入れられたクライアント接続
    • nginxplus_connections_active – アクティブなクライアント接続
    • nginxplus_connections_dropped – ドロップされたクライアント接続数
    • nginxplus_connections_idle – アイドル状態のクライアント接続
    • nginxplus_http_requests_current – 現在の HTTP リクエスト。
    • nginxplus_http_requests_total – HTTP リクエストの合計数。
    • nginxplus_nginx_meta – NGINX のメタ情報
    • nginxplus_processes_respawned – 異常終了し再起動された子プロセスの総数
    • nginxplus_ssl_handshakes – SSLハンドシェイク
    • nginxplus_ssl_handshakes_failed – SSL ハンドシェイクに失敗
    • nginxplus_ssl_session_reuses – SSL ハンドシェイク中のセッションの再利用/li>
    • nginxplus_workers_mem_private – NGINX ワーカーが使用するプライベートメモリ、共有ライブラリは含まない
    • nginxplus_workers_mem_rss – NGINX ワーカープロセスによって利用されるメモリ
  5. リストからメトリックを選択します (デモでは nginxplus_connections_active を選択)。別のメトリックを選択するには、 + Query ボタンをクリックし、新しい Metrics browser > フィールドで別のメトリックを選択します(デモでは、nginxplus_connections_idle を選択しています)。

  6. ページの上半分のグラフの上にある「更新」(2つの矢印が円形になる)アイコンをクリックすると、結果がグラフに表示され始めます。

ボーナス:NGINX Plusの全デプロイメントに対する統一されたインサイトとアナリティクス

“多くのNGINX Plusインスタンスを含む大規模なNGINXデプロイメントがある場合はどうすればいいのか?””PrometheusとGrafanaからのインサイトと分析に基づいてインスタンスの構成をどのように更新や管理すればいいのか?”といった疑問があるかもしれません。NGINX Controllerは、NGINXデプロイメント用の統合管理ソリューションで、これらの疑問やその他多くの疑問への対処を支援します。

PrometheusとGrafanaは監視、アラート、可視化のための優れたソリューションですが、設定やポリシーを更新する方法は提供されていません。これらの洞察に基づいて行動を起こすには、変更を加えるために個々のNGINX Plusインスタンスにログインする必要があり、特に大規模で複雑なNGINX Plusの展開では、時間がかかり、エラーが発生しやすい可能性があります。

NGINX Controllerは、1秒あたりのリクエスト数、CPU使用率、4xxおよび5xxエラー、ヘルスチェックの失敗など、200以上のNGINX Plusメトリクスに関する深い洞察と分析を提供し、これらはすべてアプリ中心で直感的、かつ統一的なプラットフォームで表示されます。そして、データを深く掘り下げ、レポートにエクスポートし、必要な設定やポリシーの変更を行うことができます。これは、NGINXの専門家によって設計され、複雑さを抽象化する自動化された役割別のワークフローを利用しています。

NGINX Controllerを使用すれば、アプリケーションの展開を常に把握し、NGINX Plusインスタンスと構成オブジェクト(環境、ゲートウェイ、アプリケーション)を大規模に制御することができます。また、お気に入りの監視やアラートのソリューションを犠牲にする必要はありません。ControllerのAPIファーストの設計により、サードパーティーソリューションとの統合は非常にシンプルで簡単です。

NGINX PlusとNGINX Controllerをはじめよう

ロードバランサー、リバースプロキシ、APIゲートウェイとして、あるいは監視・管理APIが強化されたフルサポートのWebサーバーとして、NGINX Plusをまだお試しになっていない方は、ぜひ今すぐ30日間の無料トライアルを開始するか、お客様の使用例について弊社にご相談ください。

また、NGINX ControllerがNGINX Plusのフリートを可視化し監視する方法だとお考えでしたら、アプリケーションデリバリーモジュールとAPI管理モジュールの両方とController App Securityを含む30日間の無料トライアルをご確認ください。

関連資料

サンプルNGINX Plus 無料トライアル サンプルダウンロード資料 サンプル無料ウェビナー