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

推薦する

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

MySQL累積計算実装方法の詳しい説明

目次序文需要分析MySQL ユーザー変数累積計算にMysqlユーザー変数を使用する要約するこの記事で...

MySQL EXPLAIN ステートメントの使用例

目次1. 使用方法2. 出力結果1.id 2.選択タイプ3.表4.パーティション5.タイプ6.可能な...

一般的な MySQL ストレージ エンジンとパラメータ設定およびチューニングの紹介

MyISAM、MySQLでよく使われるストレージエンジン特性: 1. 同時実行性とロックレベル2. ...

Web 開発 js 文字列連結プレースホルダーと conlose オブジェクト API の詳細な説明

目次プレースホルダーの置き換えコンソール印刷テーブル()ログ、情報、警告、エラーグループ()、グルー...

MySQL シリーズ データベース設計 3 つのパラダイム チュートリアルの例

目次1. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...

画像のプリロードと遅延ロードを実装するJavaScript

この記事では、JavaScriptで画像のプリロードと遅延ロードを実装するための具体的なコードを参考...

静的リソースファイルのアクセスログをフィルタリングするNginxの実装

乱雑なログ日常的に使用される Nginx は、静的リソース サーバーとリバース プロキシ サーバーの...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

MySQLはinet_atonとinet_ntoaを使用してIPアドレスデータを処理します。

この記事では、適切な形式を使用して IP アドレス データをデータベースに保存し、IP アドレスを簡...

Node.jsを使用してホットリロードページを実装する方法の詳細な説明

序文少し前に、browser-sync+gulp+gulp-nodemon を組み合わせて、本番環境...

HTML入力ドロップダウンメニューを実装する方法

コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...

Linux でジャンプ サーバー経由でリモート サーバーに接続し、ファイルを転送する方法

最近、Linux ホストに環境を展開する際に多くの問題に遭遇しました。最初の問題は、ジャンプ サーバ...

MySQL のメモリ使用量と CPU 使用率が高い場合のテストと解決策

変更後: innodb_buffer_pool_size=576M ->256M InnoDB...

IE で ClearType をオンにした後の透明フォントの問題の解決方法

IE で ClearType をオンにした後に発生する透明フォントの問題を解決するには、透明要素に背...