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の動作原理を理解しましょう

推薦する

Dockerで複数のSpringbootを実行するための詳細なチュートリアル

Dockerは複数のSpringbootを実行する1番目: ポートマッピング 2番目: メモリサイズ...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

JSで実施された機雷掃海プロジェクトの概要

この記事では、JS掃海プロジェクトの概要を参考までに紹介します。具体的な内容は次のとおりです。プロジ...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

docker runコンテナの自動終了の解決策

今日、Dockerfile を使用してイメージを作成したときに問題が発生し、イメージの実行後にコンテ...

アダプティブ Web デザインの手法 (モバイル フォンでの優れたアクセス エクスペリエンス)

1. HTML ヘッダーにビューポート タグを追加します。ウェブサイトの HTML ファイルの先頭...

jQueryはシャトルボックス効果を実現します

この記事では、シャトルボックス効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

MySQL データベースのインポートとエクスポートのデータ エラーの解決例の説明

データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...

Centos6.9 インストール Mysql5.7.18 ステップ記録

インストール手順 rpm -ivh mysql-コミュニティ-共通-5.7.18-1.el7.x86...

docker で golang イメージに基づいて ssh サービスを構築する方法

以下は、docker の golang イメージに基づいて ssh サービスを構築するためのコードで...

MySQLの3値ロジックとNULLの詳細な説明

目次NULLとは何か2種類のNULLなぜ「= NULL」ではなく「IS NULL」と書く必要があるの...

URL を入力すると、バックグラウンドでは具体的に何が起こるのでしょうか?

ソフトウェア開発者は、ネットワーク アプリケーションがどのように動作するかを階層的に完全に理解してい...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...