edit-icon download-icon

分析 – Nginx モニタリングデータの収集と分析

最終更新日: Nov 12, 2019

PHP-FPM、Docker、Apache と同様に、Nginx には Nginx ステータスの表示とモニタリングに役立つステータスページが組み込まれています。このトピックでは、 Log Service Logtailを使用して Nginx ステータス情報を収集し、収集されたステータス情報をクエリ・カウントし、ダッシュボードを構築し、カスタムアラームを作成して Nginx クラスターを全面的にモニタリングする方法について説明します。

環境の準備

以下の手順に従って、Nginx status プラグインを有効にします。

  1. Nginx に status 機能があるかどうか確認します。

    次のコマンドを実行して、Nginx に status 機能があるかどうかを確認します。

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

    出力が with-http_stub_status_module の場合、Nginx には status 機能があります。

  2. Nginx ステータスを設定します。

    Nginx 設定ファイル (デフォルトのパスは /etc/nginx/nginx.conf) で status 機能を有効にします。設定例は次のとおりです。

    1. location /private/nginx_status {
    2. stub_status on;
    3. access_log off;
    4. allow 11.132.232.238;
    5. deny all;
    6. }

    注:この設定では、IP アドレスが 11.132.232.238 のホストのみが nginx status 機能にアクセスできます。

  3. Logtail がインストールされているホストから nginx status にアクセスできることを確認します。

    次のコマンドを実行して確認します。

    1. $curl http://11.132.232.59/private/nginx_status
    2. Active connections: 1
    3. server accepts handled requests
    4. 2507455 2507455 2512972
    5. Reading: 0 Writing: 1 Waiting: 0

データの収集

  1. Logtail のインストール

    Logtail のインストール」の手順に従って、Logtail をインストールします。バージョンが 0.16.0 以降であることを確認してください。そうでない場合、「Logtail のインストール」の手順に従って、Logtail を最新バージョンにアップグレードします。

  2. 収集情報の設定

    メソッド

    1. Log Service コンソールで Logstore を作成します。データウィザードで、[自己構築ソフトウェア] の下の [Nginx モニター] を選択します。

    2. プロンプトに従って、Nginx モニターの URL と対応するパラメーターを設定します。収集の設定は、http 収集機能に基づいています。

      注:

      • 設定例の Addresses フィールドの値を、モニタリングする URL リストに変更します。
      • 返される Nginx ステータス情報がデフォルトの情報と異なる場合、HTTP 本文が解析されるように processors を変更します。

      設定例:

      1. {
      2. "inputs": [
      3. {
      4. "type": "metric_http",
      5. "detail": {
      6. "IntervalMs": 60000,
      7. "Addresses": [
      8. "http://11.132.232.59/private/nginx_status",
      9. "http://11.132.232.60/private/nginx_status",
      10. "http://11.132.232.62/private/nginx_status"
      11. ],
      12. "IncludeBody": true
      13. }
      14. }
      15. ],
      16. "processors": [
      17. {
      18. "type": "processor_regex",
      19. "detail": {
      20. "SourceKey": "content",
      21. "Regex": "Active connections: (\\d+)\\s+server accepts handled requests\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+Reading: (\\d+) Writing: (\\d+) Waiting: (\\d+)[\\s\\S]*",
      22. "Keys": [
      23. "connection",
      24. "accepts",
      25. "handled",
      26. "requests",
      27. "reading",
      28. "writing",
      29. "waiting"
      30. ],
      31. "FullMatch": true,
      32. "NoKeyError": true,
      33. "NoMatchError": true,
      34. "KeepSource": false
      35. }
      36. }
      37. ]
      38. }

データのプレビュー

設定を適用した後、1 分待ってから [プレビュー] をクリックします。ステータスデータが正常に収集されたことを確認できます。Logtail の HTTP 収集により、本文解析データ、URL、ステータスコード、メソッド名、レスポンス時間、リクエスト結果 (成功したかどうか) がアップロードされます。

注:データが収集されない場合、設定が有効な json かどうかを確認してください。

  1. _address_:http://11.132.232.59/private/nginx_status
  2. _http_response_code_:200
  3. _method_:GET
  4. _response_time_ms_:1.83716261897
  5. _result_:success
  6. accepts:33591200
  7. connection:450
  8. handled:33599550
  9. reading:626
  10. requests:39149290
  11. waiting:68
  12. writing:145

クエリと分析

カスタムクエリ

ログを照会」をご参照ください。

  1. 特定の IP アドレスのステータスのクエリ:_address_ : 10.168.0.0

  2. レスポンス時間が 100 ミリ秒を超えるリクエストのクエリ:_response_time_ms_ > 100

  3. ステータスコードが 200 以外のリクエストのクエリ:not _http_response_code_ : 200

分析と統計

統計と分析の構文の詳細は、「分析文法」をご参照ください。

  • 5 分ごとに平均待機時間、読み取り時間、書き込み時間、接続時間をカウントします。

    1. *| 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 エントリをカウントします。

    1. *| select max(waiting) as max_waiting, address, from_unixtime(max(__time__)) as time group by address order by max_waiting desc limit 10
  • Nginx の現在の合計数と invalid の数をカウントします。

    1. * | select count(distinct(address)) as total
    1. not _result_ : success | select count(distinct(address))
  • 最後に失敗した 10 件のリクエストをカウントします。

    1. not _result_ : success | select _address_ as address, from_unixtime(__time__) as time order by __time__ desc limit 10
  • 5 分ごとにリクエスト処理の合計数をカウントします。

    1. *| 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 分ごとに平均リクエスト遅延をカウントします。

    1. *| 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
  • 有効/無効のリクエストの数をカウントします。

    1. not _http_response_code_ : 200 | select count(1)
    1. _http_response_code_ : 200 | select count(1)

ダッシュボード

Log Service では、デフォルトで Nginx モニタリングデータのダッシュボードが提供されています。ダッシュボードの作成方法については、「ダッシュボード」をご参照ください。

ダッシュボード

アラームの設定

  1. クエリ not _http_response_code_ : 200 | select count(1) as invalid_count をクイッククエリとして保存し、invalid_nginx_status という名前を付けます。

  2. このクイッククエリに基づいて、アラームルールを作成します。次に例を示します。

    オプション
    アラームルール名 invalid_nginx_alarm
    クイッククエリ名 invalid_nginx_status
    データクエリ時間 (分) 15
    チェック間隔 (分) 5
    トリガーの数 1
    フィールド名 invalid_count
    比較演算子 より大きい
    しきい値の確認 0
    通知タイプ 通知センター
    通知内容 Nginx ステータスの取得時に例外が発生しました。詳細な例外メッセージは、Log Service にアクセスしてください。Project: xxxxxxxx, logstore : nginx_status