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を使用します。
次のコマンドを実行してNGINXをインストールして起動します。
sudo yum install nginx sudo systemctl start nginx
次のコマンドを実行して、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
サーバーでstub_statusモジュールを設定します。
次のコマンドを実行して、
/etc/nginx/nginx.conf
ファイルを開きます。vim /etc/nginx/nginx.conf
キーボードの
i
キーを押して編集モードに入ります。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. }
キーボードの
Esc
キーを押して編集モードを終了します。 次に、:wq
と入力してファイルを保存して閉じます。
サーバーで次のコマンドを実行して、設定結果を確認します。
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モニタリングログの収集
表示されるページの右側にあるクイックデータインポートカードをクリックします。
[カスタムデータプラグイン] をクリックします。
プロジェクトとLogstoreを選択します。 そして、[次へ] をクリックします。
マシングループを作成します。
マシングループが利用可能な場合は、[既存のマシングループを使用] をクリックします。
使用可能なマシングループがない場合は、次の手順を実行してマシングループを作成します。 この例では、Elastic Compute Service (ECS) インスタンスが使用されています。
[ECSインスタンス] タブで、[手動でインスタンスを選択] を選択します。 次に、使用するECSインスタンスを選択し、[作成] をクリックします。
詳細については、「ECSインスタンスへのLogtailのインストール」をご参照ください。
重要Log Serviceとは異なるAlibaba Cloudアカウント、データセンター内のサーバー、またはサードパーティのクラウドサービスプロバイダーのサーバーに属するECSインスタンスからログを収集する場合は、Logtailを手動でインストールする必要があります。 詳細については、「LinuxサーバーにLogtailをインストールする」または「WindowsサーバーにLogtailをインストールする」をご参照ください。
Logtailを手動でインストールした後、サーバーのユーザー識別子を設定する必要があります。 詳細については、「ユーザー識別子の設定」をご参照ください。
Logtailをインストールしたら、[インストールの完了] をクリックします。
[マシングループの作成] ステップで、[名前] パラメーターを設定し、[次へ] をクリックします。
Log Serviceでは、IPアドレスベースのマシングループとカスタム識別子ベースのマシングループを作成できます。 詳細については、「IPアドレスベースのマシングループの作成」および「カスタム識別子ベースのマシングループの作成」をご参照ください。
[応用サーバーグループ] セクションにマシングループが表示されていることを確認し、[次へ] をクリックします。
重要マシングループを作成した直後にマシングループを適用すると、マシングループのハートビートステータスがFAILになる可能性があります。 この問題は、マシングループがSimple Log Serviceに接続されていないために発生します。 この問題を解決するには、[自動再試行] をクリックします。 問題が解決しない場合は、Logtailでハートビート接続が検出されない場合はどうすればよいですか?
[データソースの設定] ステップで、[設定名] と [プラグインの設定] を設定します。 次に、[次へ] をクリックします。
入力は必須であり、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: ログの照会と分析
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
検索ボックスにクエリステートメントを入力し、[過去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)