Nginx のステータス監視とログ分析の詳細な説明

Nginx のステータス監視とログ分析の詳細な説明

1. Nginx ステータス監視

Nginx には、Nginx の全体的なアクセス ステータスを監視するために使用できる組み込みのステータス情報監視ページが用意されています。この機能は、ngx_http_stub_status_module モジュールによって実装されます。

nginx -V 2>&1 | grep -o with-http_stub_status_module コマンドを使用して、現在の Nginx にステータス機能があるかどうかを確認します。出力が ngx_http_stub_status_module の場合、ステータス機能があることを意味します。そうでない場合は、コンパイル時にこのモジュールを追加できます。

デフォルトではステータスは無効になっているため、有効にしてデータにアクセスするための URI を指定する必要があります。

サーバー{
  聞く 80;
  サーバー名 デフォルトサーバー;
  場所 / ステータス {
    stub_status オン; 
    114.247.125.227 を許可します。
  }
}

許可設定は、指定された IP のみが nginx ステータス機能にアクセスできるようにします。削除すると、制限はなくなります。

Nginx を再起動した後、ブラウザで http://{IP}/status にアクセスして、ステータス監視情報を表示します。

  • アクティブ接続: 現在アクティブなクライアント接続数(待機中のクライアント接続を含む)。TCP接続ステータスのEstablishedおよびSYN_ACKに相当します。
  • 受け入れ: 受け入れられたクライアント接続、つまりワーカープロセスによって受信された接続の合計数
  • 処理済み: 処理された接続の合計数
  • リクエスト: クライアントからの HTTP リクエストの総数
  • 読み取り: 現在読み取られている http リクエストの数 (http リクエスト ヘッダーを読み取る)
  • 書き込み: 現在応答準備ができている接続の数 (http 応答ヘッダーに書き込まれます)
  • 待機中: 現在待機中のアイドル クライアント要求の数。待機時間は、読み取りと書き込みの間隔です。

Nginx データを収集した後、監視ツールを使用して監視できます。

2. ログ分析

Nginxのデフォルトのログフォーマット設定は/etc/nginx/nginx.confにあります。

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';

印刷されたログの例

39.105.66.117 - mp [11/Sep/2019:19:03:01 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.040 0.040
39.105.66.117 - mp [11/Sep/2019:19:03:08 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.008 0.008

  • $remote_addr: クライアントのIPアドレス
  • $remote_user: リモートクライアントのユーザー名を記録するために使用されます
  • $time_local: アクセス時間とタイムゾーンを記録するために使用されます
  • $request: リクエストURLとリクエストメソッドを記録するために使用されます
  • $status: 応答ステータスコード
  • $body_bytes_sent: クライアントに送信されたファイル本体のコンテンツのバイト数
  • $http_referer: ユーザーがアクセスしたリンクを記録できます
  • $http_user_agent: ユーザーが使用するブラウザに関する情報
  • $http_x_forwarded_for: クライアントのIPを記録し、プロキシサーバー経由でクライアントのIPアドレスを記録できます。
  • $request_time: ユーザーのリクエストの最初のバイトを受信して​​から応答データを送信するまでの時間を指します。つまり、$request_time には、クライアントのリクエスト データを受信した時間、バックエンド プログラムが応答した時間、およびクライアントに応答データを送信する時間が含まれます。
  • $upstream_response_time: アップストリームサーバーからの応答を受信するのにかかった時間

一般的な分析コマンド

1. アクセスIPに基づいてUVをカウントする

awk '{print $1}' paycenteraccess.log | sort -n | uniq | wc -l

2. 最も頻繁にアクセスされる IP (上位 10) を照会する

awk '{print $1}' /var/log/nginx/access.log | sort -n | uniq -c | sort -rn | head -n 10

3. 一定時間(1~8時)のIPアクセス量を確認する

awk '$4 >="[25/Mar/2020:01:00:00" && $4 <="[25/Mar/2020:08:00:00"' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr |wc -l

4. 100回以上アクセスしたIPアドレスを表示する

awk '{print $1}' /var/log/nginx/access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

5. 指定したIPアドレスからアクセスされたURLと訪問回数を表示する

grep "39.105.67.140" /var/log/nginx/access.log|awk '{print $7}' |sort |uniq -c |sort -n -k 1 -r

6. 訪問されたURLに基​​づいてPVをカウントする

cat /var/log/nginx/access.log |awk '{print $7}' |wc -l

7. 最も頻繁にアクセスされる URL (上位 10 件) を照会する

awk '{print $7}' /var/log/nginx/access.log | ソート | uniq -c | ソート -rn | ヘッド -n 10

8. 最も頻繁にアクセスされる URL を表示します ([/api/appid を除く]) (上位 10 件)

grep -v '/api/appid' /var/log/nginx/access.log|awk '{print $7}' | sort |uniq -c | sort -rn | head -n 10

9. 100回以上のページ訪問があるページを表示する

cat /var/log/nginx/access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

10. 最新の1,000件のレコードと最もアクセスされたページを表示する

tail -1000 /var/log/nginx/access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less

11. 1時間あたりのリクエスト数と上位10件の時点をカウントします(時間単位の精度)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 10

12. 1分あたりのリクエスト数と上位10件の時点をカウントします(分単位の精度)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 10

13. 1秒あたりのリクエスト数と上位10件の時点を数える(秒単位の精度)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 10

14. 指定した期間のログを検索する

awk '$4 >="[2020/03/25:01:00:00" && $4 <="[2020/03/25:08:00:00"' /var/log/nginx/access.log

15. 送信時間が0.6秒を超えるURLをリストし、最初の10件を表示する。

cat /var/log/nginx/access.log |awk '(substr($NF,2,5) > 0.6){print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' |sort -k3 -rn | head -10

16. /api/appid のリクエスト時間が 0.6 秒を超える時点をリストします。

cat /var/log/nginx/access.log |awk '(substr($NF,2,5) > 0.6 && $7~/\/api\/appid/){print $4,$7,substr($NF,2,5)}' |awk -F '"' '{print $1,$2,$3}' |sort -k3 -rn | head -10

17. 最も時間のかかるリクエスト時間、URL、期間のトップ10を取得する

cat /var/log/nginx/access.log |awk '{print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10

要約する

Nginx ステータス監視とログ分析に関するこの記事はこれで終わりです。Nginx ステータス監視とログ分析に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx ログ設定手順の詳細な説明
  • ELK を使用して Nginx サーバー ログを分析する方法の詳細な説明
  • nginx サーバーの access_log の詳細な分析と構成
  • nginx ログのアクセス時間と最も時間のかかるページ (遅いクエリ) のシェル スクリプト分析
  • PHP を Nginx サーバーに接続し、Nginx ログを解析する方法
  • Nginx ログ統計分析の一般的なコマンドの概要
  • Nginx サービスステータス監視方法
  • Nginx 構成検出サービスのステータスを実装する方法
  • Pythonはnginxのポートとプロセスの状態を監視します

<<:  MySQLのルートパスワードをリセットする最も簡単な方法

>>:  JavaScriptの動作原理を理解しましょう

推薦する

MySQLの外部ネットワークアクセス権を開く方法

以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...

MySQL のインストール方法と設定に関するいくつかの問題の概要

1. MySQL rpm パッケージのインストール # インストールソースをダウンロードします [r...

Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...

CSS トップに戻る コード例

最近のウェブサイトのほとんどはページが長く、4 画面または 5 画面の長さのものもあれば、2 画面ま...

Linuxの同時実行は簡単です。このようにするだけです

並行処理関数 i の `grep server /etc/hosts | awk '{pri...

フロントエンドページのスライド検証を実装するための JavaScript + HTML (2)

この記事の例では、クールなフロントエンドページのスライド検証の具体的なコードを参考までに共有していま...

HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明

まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...

MySQL で日付時刻データを取得し、その後に .0 を追加する方法

MySQL のデータ型は datetime です。データベースに保存されているデータは 2015-0...

MySQL トランザクション分離レベルとロックメカニズムの問題に関する深い理解

概要データベースは通常、複数のトランザクションを同時に実行します。複数のトランザクションが、同じデー...

クラウドサーバーを購入し、Alibaba Cloud に Pagoda Panel をインストールする手順

アリババクラウドがサーバーを購入クラウドサーバーを購入し、サーバーバージョンとしてcentos 7....

この記事では、Vueのフロントエンドページングとバックエンドページングを実装する方法を説明します。

目次1: フロントエンドの手書きページング(データ量が少ない場合) 2: バックエンドのページング、...

TypeScript の関数

目次1. 関数の定義1.1 JavaScript の関数1.2 TypeScriptの関数2. オプ...

WeChatミニプログラムでトークンの有効期限を処理する方法

目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...

JavaScript操作要素は、ページコンテンツのスタイルを変更する方法を教えます

目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...

JS ES の新機能: 拡張演算子の紹介

1. スプレッド演算子スプレッド演算子は 3 つのドット ... で、複数の引数 (関数呼び出しなど...