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

NGINX | 2021年9月23日

「Kubernetesの可視性を向上させる方法」で説明したように、アプリケーションの開発・デリバリーチームが直面する主な課題の1つは、アプリケーションのパフォーマンス、セキュリティ、可用性を把握することです。こうしたインサイトは、問題の迅速なトラブルシューティングや、トラフィック急増への事前の備えに役立ちます。

ロードバランサー、リバースプロキシ、APIゲートウェイ、Ingressコントローラーなどのトラフィック管理ツールは、アプリとインフラストラクチャの健全性に関する豊富な情報を生成します。こうした有用なメトリクスは、NGINX Plusダッシュボードでリアルタイムに追跡できます。また、NGINX Plusからサードパーティの監視ツールにメトリクスを送信し、経時的なパフォーマンスを可視化することで、さらに詳しいインサイトを得ることもできます。特に広く利用されている次の2つのツールを連携させると、時系列グラフを作成できます。

  • Prometheus – モニタリングとアラート通知のためのCloud Native Computing Foundation(CNCF)のオープンソースプロジェクト
  • Grafana – Prometheusなどの時系列データベースからグラフなどの視覚表現を生成する、オープンソースの可視化・分析ツール

The Prometheus-njsモジュールを使用すると、NGINX PlusのメトリクスをPrometheusとGrafanaに簡単に送信できます。このモジュールは、NGINX JavaScript module(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 JavaScript(njs)モジュールをインストールし、NGINX Plusサーバーに導入します。
  3. 最新バージョンのDockerをインストールします。Prometheusサーバーにインストールしてください。このデモでは、一般的な方法に従い、NGINX Plusとは別の2台目のサーバーでPrometheusを実行します。
  4. Grafanaサーバー(デモでは3台目のサーバー)に最新バージョンのDockerをインストールします。

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

  1. Prometheus-njsモジュールをインストールします。このデモではUbuntu 20.04を使用しているため、次のコマンドが適切です。その他のオペレーティングシステムについては、ドキュメントを参照してください。
$ sudo apt-get install nginx-plus-module-prometheus
  1. 任意のテキストエディターで「/etc/nginx/nginx.conf」を開き、次の「load_module」ディレクティブを「http」ブロックの外側にある最上位のコンテキストに追加します。
load_module modules/ngx_http_js_module.so;
# existing top-level directives

http {
    #...
}
  1. (任意)サブリクエストのレスポンス本文を保存するバッファーのサイズを増やします(デフォルトのサイズは、プラットフォームに応じて4 KBまたは8 KBです)。これにより、too big subrequest responseエラーが発生しないようにします。このエラーは、NGINXエラーログに表示されます。次のsubrequest_output_buffer_sizeディレクティブをhttpブロックに追加します。
http {    #...
    subrequest_output_buffer_size 32k;
}

  1. Save nginx.confを保存し、次のコマンドを実行して、NGINX構成の構文が正しいことを確認します。
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. ディレクトリを「conf.d」に移動し、ファイルの一覧を表示します。
$ cd conf.d$ ls
default.conf
  1. The default.confファイルには、ポート80でリッスンする仮想サーバーが定義されています。Prometheus用の仮想サーバーも同じポートでリッスンする必要があるため、ポートを解放するにはdefault.confを削除します。
$ sudo rm default.conf
  1. 任意のテキストエディターを使用して、次の内容で新しいファイル「prometheus.conf」を作成します。
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;

server {
    location = /metrics {
        js_content prometheus.metrics;
    }
 
    location /api {
        api;
    } 
}
  1. The js_importディレクティブでは、NGINX Plus APIが生成したメトリクスをPrometheusで必要な形式に変換するNGINX JavaScriptコードの場所を指定します。(Prometheus-njs用のload_moduleディレクティブを追加する必要はありません。)最初のlocationブロックでは、Prometheus形式のメトリクスにアクセスできるようにします。2つ目のlocationブロックではNGINX Plus APIを有効にします。このAPIは未加工のメトリクスを生成し、Prometheusに公開します。注:本番環境では、ドキュメントの説明に従ってNGINX Plus APIへのアクセスを制限することを強く推奨します。Prometheus-njsモジュールの詳細については、ドキュメントをご覧ください。
  2. Save prometheus.confを保存し、ステップ 4と同様に構文が正しいことを確認してから、次のコマンドを実行してNGINX Plusを起動します。
$ sudo nginx

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

  1. YAML形式の新しいPrometheus設定ファイル「prometheus.yml」を「/etc/prometheus」ディレクトリに作成し、次の内容を記述します(Prometheus Webサイトの「デフォルト設定ファイル」に基づいています)。図のとおり、変更するのは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']
  1. 構成ファイルに追加できるその他のオプションなど、Prometheusの設定について詳しくは、Prometheusドキュメントを参照してください。
  2. Save prometheus.ymlを保存してから、次のコマンドを実行します。このコマンドはDocker HubからPrometheusを取得し、ポート9090で公開します。
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  1. ブラウザーで、新しいPrometheusサーバーのIPアドレスとポートにアクセスします。次のようなページが表示されれば、サーバーが稼働していることを確認できます。
  2. PrometheusがNGINX Plusメトリクスのフィードにアクセスしていることを確認します。ウィンドウ右上の Executeボタンの左にある地球儀アイコンをクリックします。次のようなメトリクスの一覧が表示されます。

Grafanaサーバーのセットアップ(9:15)

  1. 次のコマンドを実行して、Docker HubからGrafanaを取得し、ポート3000で公開します:
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
  1. その他のインストール方法については、Grafanaドキュメントをご覧ください。
  2. ブラウザーで、新しいGrafanaサーバーのIPアドレスとポートにアクセスします。Grafanaのログインページが表示されれば、サーバーが稼働していることを確認できます。
  3. [admin]と[Email or username]、[Password]の両方のフィールドに入力してログインします。画面の指示に従って安全な新しいパスワードを設定することを強く推奨しますが、このデモでは時間の都合上、その手順を省略します。

  1. 表示されたGrafanaホームページで、データソースとしてPrometheusを登録します。手順については、Grafanaドキュメントを参照してください。動画では、Grafana GUIでの手順を紹介しています。注:Grafanaの手順5では、表示されているURLの例(http://localhost:9090)の代わりに、PrometheusサーバーのIPアドレス(およびポート9090)を入力します。
    Grafanaの手順7で[Save & test]ボタンをクリックした後、チェックマーク付きの緑色のボックスと「Data source is working」というメッセージが表示されれば、GrafanaはPrometheusサーバーに正常に接続されています。

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

Prometheusは1つのメトリクスを確認するのに便利ですが、Grafanaを使用すると、複数のメトリクスを1つのグラフで簡単に確認できます。

Grafanaグラフを作成するには:

  1. ページ左側のナビゲーションバーにあるプラス記号(+)をクリックします(前のセクションのステップ 4のスクリーンショットを参照)。[Dashboard]を[Create]ドロップダウンメニューから選択します。
  2. [Add an empty panel]をクリックします。
  3. 表示された[New dashboard/Edit Panel]ページで、ページ下半分にある[Data source]フィールドの[Query]タブにPrometheusが表示されていることを確認します。表示されていない場合は、ドロップダウンメニューから[Prometheus]を選択します。
  4. [nginx]を[ Metrics browser >]フィールドに入力します。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を選択します)。別のメトリクスを選択するには、 + 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インスタンスと構成オブジェクト(Environments、Gateways、Appsなど)を大規模に管理できます。また、使い慣れた監視およびアラートソリューションを手放す必要もありません。ControllerはAPIファーストで設計されているため、サードパーティソリューションと非常に簡単かつスムーズに統合できます。

 

NGINX PlusとNGINX Controllerを使い始める

NGINX Plusをまだお試しでない場合は、ロードバランサー、リバースプロキシ、APIゲートウェイとして、または強化された監視・管理APIを備えたフルサポートのWebサーバーとして、ぜひお試しください。今すぐ30日間の無料トライアルを開始するか、ユースケースについてF5にお問い合わせください。

また、NGINX Plus環境の可視化と監視にNGINX Controllerの導入をご検討の場合は、Controller App Securityに加え、Application DeliveryモジュールとAPI Managementモジュールの両方を利用できる30日間の無料トライアルをお試しください。


共有

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります