すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:NGINXモニタリングログの収集、クエリ、分析

最終更新日:Aug 26, 2024

NGINXの組み込みstub_statusモジュールを設定して、専用のステータスページでNGINXサーバーの主要なメトリックをリアルタイムで表示できるようにすることができます。 メトリックには、アクティブ接続、読み取り、書き込み、待機が含まれます。 Logtailプラグインを使用してNGINXモニタリングログを収集できます。 ログが収集されたら、ログを照会および分析できます。 これにより、NGINXクラスターを継続的に監視できます。

前提条件

Logtailがサーバーにインストールされています。 詳細については、「LinuxサーバーにLogtailをインストールする」または「WindowsサーバーにLogtailをインストールする」をご参照ください。

説明

Linuxサーバーの場合は、Logtail V0.16.0以降をインストールします。 Windowsサーバーの場合は、Logtail V1.0.0.8以降をインストールします。

手順1: stub_statusモジュールの設定

説明

このトピックでは、構成手順を説明する例としてLinuxを使用します。

  1. 次のコマンドを実行してNGINXをインストールして起動します。

    sudo yum install nginx
    sudo systemctl start nginx
  2. 次のコマンドを実行して、NGINX stub_statusモジュールがサポートされているかどうかを確認します。 詳細については、「モジュールngx_http_stub_status_Module」をご参照ください。

    nginx -V 2>&1 | grep -o with-http_stub_status_module
    with-http_stub_status_module 

    次の情報が返された場合、モジュールはサポートされます。

    with-http_stub_status_module
  3. サーバーでstub_statusモジュールを設定します。

    1. 次のコマンドを実行して、/etc/nginx/nginx.confファイルを開きます。

      vim /etc/nginx/nginx.conf
    2. キーボードのiキーを押して編集モードに入ります。

    3. server {..} セクションに次のコードを追加します。 nginx_statusの詳細については、「Nginxステータスの有効化ページ」をご参照ください。

      location /nginx_status {
          stub_status on;    # Enable the stub_status module.
          access_log   off;
          allow ${Server IP address};
          deny all;          # Deny access requests from all other IP addresses to the status page.
       }
    4. キーボードのEscキーを押して編集モードを終了します。 次に、:wqと入力してファイルを保存して閉じます。

  4. サーバーで次のコマンドを実行して、設定結果を確認します。

    curl http://${Server IP address}/nginx_status

    次の出力が返された場合、設定は成功です。

    Active connections: 1
    server accepts handled requests
    2507455 2507455 2512972
    Reading: 0 Writing: 1 Waiting: 0                       

ステップ2: NGINXモニタリングログの収集

  1. Simple Log Serviceコンソール.

  2. 表示されるページの右側にあるクイックデータインポートカードをクリックします。

    image

  3. [カスタムデータプラグイン] をクリックします。

  4. プロジェクトとLogstoreを選択します。 そして、[次へ] をクリックします。

  5. マシングループを作成します。

    • マシングループが利用可能な場合は、[既存のマシングループを使用] をクリックします。

    • 使用可能なマシングループがない場合は、次の手順を実行してマシングループを作成します。 この例では、Elastic Compute Service (ECS) インスタンスが使用されています。

      1. [ECSインスタンス] タブで、[手動でインスタンスを選択] を選択します。 次に、使用するECSインスタンスを選択し、[作成] をクリックします。

        詳細については、「ECSインスタンスへのLogtailのインストール」をご参照ください。

        重要

        Log Serviceとは異なるAlibaba Cloudアカウント、データセンター内のサーバー、またはサードパーティのクラウドサービスプロバイダーのサーバーに属するECSインスタンスからログを収集する場合は、Logtailを手動でインストールする必要があります。 詳細については、「LinuxサーバーにLogtailをインストールする」または「WindowsサーバーにLogtailをインストールする」をご参照ください。

        Logtailを手動でインストールした後、サーバーのユーザー識別子を設定する必要があります。 詳細については、「ユーザー識別子の設定」をご参照ください。

      2. Logtailをインストールしたら、[インストールの完了] をクリックします。

      3. [マシングループの作成] ステップで、[名前] パラメーターを設定し、[次へ] をクリックします。

        Log Serviceでは、IPアドレスベースのマシングループとカスタム識別子ベースのマシングループを作成できます。 詳細については、「IPアドレスベースのマシングループの作成」および「カスタム識別子ベースのマシングループの作成」をご参照ください。

  6. [応用サーバーグループ] セクションにマシングループが表示されていることを確認し、[次へ] をクリックします。

    重要

    マシングループを作成した直後にマシングループを適用すると、マシングループのハートビートステータスがFAILになる可能性があります。 この問題は、マシングループがSimple Log Serviceに接続されていないために発生します。 この問題を解決するには、[自動再試行] をクリックします。 問題が解決しない場合は、Logtailでハートビート接続が検出されない場合はどうすればよいですか?

  7. [データソースの設定] ステップで、[設定名][プラグインの設定] を設定します。 次に、[次へ] をクリックします。

    • 入力は必須であり、Logtail構成のデータソース設定を構成するために使用されます。

      重要

      inputsに指定できるデータソースの種類は1つだけです。

    • processorsはオプションで、データを解析するLogtail設定のデータ処理設定を設定するために使用されます。 1つ以上の処理方法を指定できます。

      入力の設定のみに基づいてログを解析できない場合は、[プラグイン設定] フィールドでプロセッサを設定して、データ処理用のプラグインを追加できます。 たとえば、フィールドの抽出、ログ時間の抽出、データのマスク、ログのフィルタリングができます。 詳細については、「Logtailプラグインを使用したデータ処理」をご参照ください。

    {
    "inputs": [
     {
          "type": "metric_http",
          "detail": {
              "IntervalMs": 60000,
              "Addresses": [
                  "http://${Server IP address}/nginx_status",
                  "http://${Server IP address}/nginx_status",
                  "http://${Server IP address}/nginx_status"
              ],
              "IncludeBody": true
          }
     }
    ],
    "processors": [
     {
          "type": "processor_regex",
          "detail": {
              "SourceKey": "content",
              "Regex": "Active connections: (\\d+)\\s+server accepts handled requests\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+Reading: (\\d+) Writing: (\\d+) Waiting: (\\d+)[\\s\\S]*",
              "Keys": [
                  "connection",
                  "accepts",
                  "handled",
                  "requests",
                  "reading",
                  "writing",
                  "waiting"
              ],
              "FullMatch": true,
              "NoKeyError": true,
              "NoMatchError": true,
              "KeepSource": false
          }
     }
    ]
    }                                

    次の表に、主要なパラメーターを示します。

    パラメーター

    データ型

    必須

    説明

    タイプ

    String

    課金されます

    データソースのタイプ。 値をmetric_httpに設定します。

    IntervalMs

    int

    課金されます

    2つの連続するリクエストの間隔。 単位:ミリ秒。

    アドレス

    配列

    課金されます

    監視するURL。

    IncludeBody

    Boolean

    課金されません

    リクエストのボディ情報を収集するかどうかを指定します。 デフォルト値:false このパラメーターをtrueに設定すると、本文情報が収集され、contentフィールドに保存されます。

Logtail設定が作成されてから1分後に収集されたログを表示できます。 収集されたログの例を次に示します。 デフォルトでは、Simple Log Serviceはnginx_statusダッシュボードを生成し、収集したログのクエリと分析の結果を表示します。

_address_:http://10.10.XX.XX/nginx_status  
_http_response_code_:200  
_method_:GET  
_response_time_ms_:1.83716261897  
_result_:success  
accepts:33591200  
connection:450  
handled:33599550  
reading:626  
requests:39149290  
waiting:68  
writing:145                  

ステップ3: ログの照会と分析

  1. Simple Log Serviceコンソール.

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. 左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。

    image

  4. 検索ボックスにクエリステートメントを入力し、[過去15分] をクリックして、クエリ時間範囲を指定します。

    詳細については、「手順1: クエリステートメントの入力」をご参照ください。

    • ログのクエリ

      • IPアドレスに関する情報を照会します。

        _address_ : 10.10.0.0
      • 応答時間が100ミリ秒を超えるリクエストを照会します。

        _response_time_ms_ > 100
      • HTTPステータスコード200が返されないリクエストを照会します。

        not _http_response_code_ : 200
    • ログの分析

      • 待機中の接続、読み取り接続、書き込み接続、および5分間隔での接続の平均数を取得します。

        *| select  avg(waiting) as waiting, avg(reading)  as reading,  avg(writing)  as writing,  avg(connection)  as connection,  from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440                       
      • 待機中の接続数が最も多い上位10台のサーバーを取得します。

        *| select  max(waiting) as max_waiting, _address_, from_unixtime(max(__time__)) as time group by address order by max_waiting desc limit 10                        
      • IPアドレスの数を取得します。

        * | select  count(distinct(_address_)) as total                       
      • 失敗した要求が開始されたIPアドレスの数を取得します。

        not _result_ : success | select  count(distinct(_address_))                        
      • 最近失敗した10件のリクエストが開始されたIPアドレスを取得します。

        not _result_ : success | select _address_ as address, from_unixtime(__time__) as time  order by __time__ desc limit 10                       
      • 5分間隔でリクエストの総数を取得します。

        *| select  avg(handled) * count(distinct(_address_)) as total_handled, avg(requests) * count(distinct(address)) as total_requests,  from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440                       
      • 5分間隔で平均リクエスト待ち時間を取得します。

        *| select  avg(_response_time_ms_) as avg_delay,  from_unixtime( __time__ - __time__ % 300) as time group by __time__ - __time__ % 300 order by time limit 1440                      
      • 成功したリクエストと失敗したリクエストの数を取得します。

        not _http_response_code_ : 200  | select  count(1)                     

        _http_response_code_ : 200  | select  count(1)