ブログ | NGINX

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

NGINX-F5 水平黒タイプ RGB の一部
モニカ・ソーン サムネイル
モニカ・ソーン
2021年9月23日公開

「Kubernetes での可視性を向上させる方法」で説明したように、アプリ開発および配信チームにとっての最大の課題の 1 つは、アプリのパフォーマンス、セキュリティ、可用性に関する洞察を得ることです。 これらの分析情報は、チームが問題を迅速にトラブルシューティングし、トラフィックの急増に積極的に備えるのに役立ちます。

ロードバランサ、リバースプロキシ、API ゲートウェイ、Ingress コントローラなどのトラフィック管理ツールは、アプリとインフラストラクチャの健全性に関する豊富な情報を生成します。 これらの貴重なメトリクスは、 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 では機能しません。
  • NGINX Ingress Controller で Prometheus と Grafana を使用するには、ドキュメントを参照してください。

前提条件

デモを開始する前に、次の前提条件を満たしていました。

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

NGINX Plus サーバーをセットアップする (1:20)

  1. Prometheus-njsモジュールをインストールします。 デモでは Ubuntu 20.04 を使用しており、これが適切なコマンドです。 その他のオペレーティング システムについては、ドキュメントを参照してください。

    $ sudo apt-get で nginx-plus-module-prometheus をインストールします
    
  2. 好みのテキスト エディターを使用して、 /etc/nginx/nginx.confを開き、 httpブロックの外側のトップレベル コンテキストに次のload_moduleディレクティブを追加します。

    load_module modules/ngx_http_js_module.so;
    # 既存のトップレベルディレクティブ
    
    http {
    #...
    }
    
  3. (オプション) サブリクエストからのレスポンス本文を格納するためのバッファのサイズを増やします (デフォルトのサイズはプラットフォームに応じて4 KBまたは 8 KBです)。 これにより、 NGINX エラー ログに表示される、大きすぎるサブリクエスト応答エラーが防止されます。 httpブロックに次のsubrequest_output_buffer_sizeディレクティブを追加します。

    http { #...
    サブリクエスト出力バッファサイズ 32k;
    }
    
  4. nginx.conf を保存し、このコマンドを実行して、NGINX 構成が構文的に正しいことを確認します。

    $ sudo nginx -t nginx: 設定ファイル /etc/nginx/nginx.conf の構文は正常です nginx: 設定ファイル /etc/nginx/nginx.conf のテストは成功しました
    
  5. ディレクトリをconf.dに変更し、ファイルを一覧表示します。

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

    $ sudo rm デフォルト.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-njsload_moduleディレクティブを追加する必要はありません。)

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

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

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

  8. prometheus.confを保存し、手順 4のように構文が正しいことを確認してから、このコマンドを実行して NGINX Plus を起動します。

    $ sudo nginx
    

Prometheus サーバーをセットアップする (5:30)

  1. /etc/prometheusディレクトリに、 prometheus.ymlという新しい YAML 形式の Prometheus 構成ファイルを作成し、次の内容を記述します (Prometheus Web サイトのデフォルトの構成ファイルに基づきます)。 示されているように、行う必要がある唯一の変更は、ターゲット フィールドに NGINX Plus サーバーの IP アドレスとポートを追加することです。

    グローバル: scrape_interval: 15秒 external_labels: monitor: 'codelab-monitor' scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - ターゲット: [' 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 メトリックのフィードにアクセスしていることを確認します。 ウィンドウの右上隅にある「実行」ボタンの左側にある地球儀アイコンをクリックします。 次のようなメトリックのリストが表示されます。

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

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

    [ターミナル]$ sudo docker run -d -p 3000:3000 grafana/grafana
    

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

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

  3. 電子メールまたはユーザー名パスワードの両方のフィールドにadminと入力してログインします。 指示に従って新しい安全なパスワードを設定することを強くお勧めしますが、デモでは時間の関係でその手順を省略しています。

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

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

    Grafana の説明のステップ 7 で[保存してテスト]ボタンをクリックすると、チェックマークの付いた緑色のボックスと[データ ソースが動作しています]というメッセージが表示され、Grafana が Prometheus サーバーに正常に接続したことが示されます。

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

Prometheus は 1 つのメトリックだけを確認するのに便利ですが、Grafana を使用すると、メトリックのコレクションを 1 つのグラフで簡単に確認できます。

Grafana グラフを構築するには:

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

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

  3. 表示される「新しいダッシュボード/パネルの編集」ページで、ページの下半分にある「クエリ」タブの「データ ソース」フィールドに Prometheus が表示されていることを確認します。 そうでない場合は、ドロップダウン メニューからPrometheus を選択します。

  4. メトリクス ブラウザ >フィールドに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 ハンドシェイク中のセッションの再利用
    • nginxplus_workers_mem_private – NGINXワーカーが使用するプライベートメモリ(共有ライブラリは含まれません)
    • nginxplus_workers_mem_rss – NGINXワーカープロセスによって使用されるメモリ
  5. リストからメトリックを選択します (デモではnginxplus_connections_activeを選択します)。 別のメトリックを選択するには、[ + クエリ]ボタンをクリックし、新しい[メトリック ブラウザー >]フィールドで別のメトリックを選択します (デモでは、 nginxplus_connections_idleを選択します)。

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

ボーナス: すべての NGINX Plus デプロイメントの統合された洞察と分析

「多数の NGINX Plus インスタンスを含む大規模な NGINX デプロイメントがある場合はどうすればよいですか?」または「Prometheus と Grafana からの洞察と分析に基づいてインスタンスの構成を更新するにはどうすればよいでしょうか?」と疑問に思うかもしれません。 NGINX コントローラーNGINX 導入向けの制御および管理プレーン ソリューションである は、こうした質問やその他の多くの質問に対処するのに役立ちます。

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

NGINXコントローラーは、1秒あたりのリクエスト数、CPU使用率など、200以上のNGINX Plusメトリクスに関する詳細な洞察と分析を提供します。 4xx5xxエラー、ヘルスチェックの失敗など、すべてがアプリ中心の直感的な統合プラットフォームに表示されます。 その後、データを詳細に分析し、レポートにエクスポートして、NGINX の専門家によって複雑さを抽象化するために設計された、自動化されたロール固有のワークフローを活用して、必要な構成とポリシーの変更を行うことができます。

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

NGINX Plus と NGINX コントローラーを使い始める

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

NGINX Controller が NGINX Plus フリートの視覚化と監視の方法になると思われる場合は、Controller App Security を備えたアプリケーション配信モジュールと API 管理モジュールの両方が含まれる30 日間の無料トライアルをご確認ください。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"