純粋に手動で Nginx ログを操作する

WBOY
リリース: 2016-08-08 09:22:34
オリジナル
835 人が閲覧しました
Nginx ログはほとんどの人にとって未知の宝物です。ログ分析システムを構築した私のこれまでの経験を要約して、Nginx ログの純粋に手動による分析方法を共有したいと思います。 Nginx ログ関連の設定には、access_log と log_format の 2 つの場所があります。 デフォルト形式:
access_log <span>/</span>data<span>/</span>logs<span>/</span>nginx<span>-</span>access<span>.</span><span>log</span><span>;</span>log_format old <span><em>'$remote_addr [$time_local] $status $request_time $body_bytes_sent '</em></span><span><em>'"$request" "$http_referer" "$http_user_agent"'</em></span><span>;</span>
ログイン後にコピー
Nginx を使用したことのあるほとんどの人は、デフォルトの Nginx ログ形式構成とログの内容に精通していると思います。ただし、デフォルトの構成と形式は、読み取り可能ではあるものの、計算するのが困難です。 Nginx ログ フラッシュ関連の戦略を設定できます: たとえば、バッファを設定すると、バッファが 5 秒未満の場合、バッファは次のようにフラッシュされます。
access_log <span>/</span>data<span>/</span>logs<span>/</span>nginx<span>-</span>access<span>.</span><span>log</span> buffer<span>=</span><span><em>32k</em></span> flush<span>=</span><span><em>5s</em></span><span>;</span>
ログイン後にコピー
これは、ログとログをリアルタイムで表示するかどうかを決定します。 ディスク IO への影響。 Nginx ログには、デフォルト設定では表示されない、記録できる変数が多数あります: 例: リクエスト データ サイズ: $request_length
戻りデータ サイズ: $bytes_sent
リクエスト時間: $request_time
使用された接続番号: $ connection
現在の接続のリクエスト数: $connection_requests Nginx のデフォルト形式は計算可能ではありません。制御文字 ^A (ctrl+) を使用するなど、計算可能な形式に変換する方法を見つける必要があります。 v Mac の場合は ctrl+a)、各フィールドを分割します。 log_format の形式は次のようになります:
log_format new <span><em>'$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A'</em></span><span><em>'$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent'</em></span><span>;</span>
ログイン後にコピー
その後、一般的な Linux コマンド ライン ツールを使用して分析できます:
  • アクセス頻度と回数が最も多い URL を見つけます:

    cat access.log | awk -F ‘^A’ ‘{print $10}’ | uniq sort -c

  • 500 件の不正なアクセスの現在のログ ファイルを検索します。

    cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’

  • 現在のログ ファイルで 500 個のエラーの数を見つけます。

    cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ wc -l

  • ある分間の 500 件のエラー アクセス数を求めます。

    cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ wc-l

  • 1 秒以上かかる遅いリクエストを検索します。

    tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $0}’

  • 特定のビットのみを表示したい場合:

    tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $3″|”$4}’

  • 502 個のエラーが最も多い URL を見つけます。

    cat access.log | awk -F ‘^A’ ‘{if($5==502) print $11}’ ソート | 200 の空白ページを検索

    cat access.log | awk -F '^A' '{if($5==200 && $8
  • リアルタイムで表示ログデータの流れ

    tail -f access.log | cat -e
  • または

    tail -f access.log | tr '^A' '|'

    概要
  • このアイデアに従って、次のような他の多くの分析を行うことができます。 UA として 最もアクセス頻度の高い IP、リクエストの戻りパケット サイズの分析など。 これは大規模な Web ログ分析システムのプロトタイプです。この形式は、その後の大規模なバッチ処理やストリーミング計算にも非常に便利です。

    上記は、さまざまな側面を含む、Nginx ログを手動で操作する方法の紹介です。PHP チュートリアルに興味のある友人に役立つことを願っています。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート